About Expertise Work Managed Apps
Business Website Online Store Sales CRM Team Drive Online Academy Newsletter System Booking System Shared Inbox Knowledge Base Short Links Business Manager Photo Gallery Survey Platform Community Forum Project Boards Estate Agency Car Workshop Restaurant Clinic Photography Studio
AWS
Assess & advise Build & migrate Automate & operate Secure & comply Urgent & go-live
Projects
Hosted Monitoring & Dashboards Self-Hosted Observability Stack Bulk Document Data Extraction Email Deliverability Diagnosis & Repair SEO Migration Recovery AWS Security Review VPS Hardening & ModSecurity Cloud Architecture & Resilience Review SSL & Server Configuration Container Security Review DNS & Email Troubleshooting DevOps Deployment & Rollback Review WordPress Hardening Retainer Data Pipeline Rerun Review Metric Reconciliation
Free Tools
Website Health Check Email Domain Health Check DNS Health Check SSL Certificate Checker Redirect Chain Checker Robots.txt Checker XML Sitemap Validator Docker Compose Checker WordPress Security Check AWS IAM / S3 Policy Checker Domain Registration Lookup Uptime Monitoring Trial Downtime Cost Calculator AWS Cost Estimator Cloud Architecture Self-Assessment DevOps Engagement Builder Self-Managed VPS vs Managed AWS
Blog Certifications Hire Me

S3 + CloudFront Website / CDN

Static hosting where the bucket is private, the certificate is right, and deploys invalidate the cache.

Price and scope

From $249

Typically $249–$549, fixed in writing before anything starts.

1–3 days
Working days, counted from the moment I have access — not from the day you agree.

What moves it up

  • Cache behaviour that has to differ by path, rather than one rule for everything
  • Signed URLs or signed cookies, because some of it is not meant to be public
  • An existing distribution to correct rather than a new one to build

Some of this you can check yourself, right now, for free: SSL Certificate Checker →

What a public S3 origin costs youA visitor reaching an S3 bucket two ways: through CloudFront, where the WAF, geo restrictions and signed URLs apply, and directly to the bucket, where none of them do. The direct path exists because public access is switched on.visitorCloudFrontWAF · geo · signed URLsS3 bucketpublic access onorigin accessnone of the above appliesevery rule set at the edge is only enforced for people who go through it
S3 + CloudFront Website / CDN

What actually goes wrong

This one has a signature failure and it is always the same: the bucket was made public to get the site working. It works, so nobody revisits it, and now the origin is directly reachable — CloudFront is a cache in front of a website that is already on the internet, so every rule set at the edge can be walked straight past. The second is quieter. The deploy uploads new HTML and new JavaScript, the cache is never invalidated, and for the next day some visitors get yesterday's script running against today's markup.

How I find it

  • aws s3api get-public-access-block --bucket <name> — all four settings, not just the first
  • curl -I against the bucket's own website endpoint, to see whether the origin answers directly
  • aws cloudfront get-distribution-config, read for an origin access control rather than a public origin
  • aws acm list-certificates --region us-east-1 — the only region CloudFront will take one from

What you get

  • A private bucket with public access blocked, reachable only through the distribution
  • Origin access control configured, so the origin has one caller and it is CloudFront
  • HTTPS with a certificate in us-east-1, HTTP redirected, and modern TLS only
  • Cache behaviour set per path, with immutable assets cached long and HTML cached short
  • An invalidation step in your deploy, so a release cannot serve mixed versions

Questions

Why does my certificate have to be in a specific region?

CloudFront only reads certificates from ACM in us-east-1, wherever your bucket or your users are. It is an AWS constraint rather than a design choice, and it is the single most common reason a distribution refuses a custom domain.

My bucket is public and everything works. Why change it?

Because anything you enforce at the edge — a WAF rule, a geo restriction, a signed URL — is only enforced for people who go through the edge. A public origin means they do not have to.

Can this host a React or Next.js build?

A static export, yes, including the routing rewrite that makes client-side routes return the right page rather than a 403. Anything needing server-side rendering at request time is a different architecture and I will say which one you have before quoting.

How much will CloudFront cost me?

For a small site, usually less than the EC2 instance it replaces — it is priced on transfer and requests, with a free tier that covers a lot of traffic. I will estimate it from your actual figures rather than quoting a number that suits the pitch.

Route 53 DNS Migration

A zone moved with every record accounted for, and the TTLs lowered before the change rather than after.

From $199 1–2 days

Want this done?

Tell me what you are running and I will come back with a fixed price and a date. If it turns out you do not need this, I will say that instead.

Prefer to talk? Book a free call ↗  ·  Or hire me on Upwork ↗  ·  Typical reply within one business day.

When I answer

Sunday to Thursday, 09:00–18:00 EET. Outside that I will still look, but I will not promise a time.

No 24/7 desk, and I will not pretend otherwise

One person, one time zone. If round-the-clock cover is what you need, you need a team, and I will say so rather than sell you a plan that cannot deliver it.

Your AWS bill stays yours

You pay Amazon directly and you keep control of the account. Nothing here resells your infrastructure or sits between you and your own billing.

A price that starts with "from" is a starting price

Every service page lists exactly what pushes a quote above it, before you ask. You get a fixed number in writing before any work begins.