Hosting a Static Website on AWS S3 with Route 53 (HTTP) & CloudFront (HTTPS)


This document outlines the steps to host a static website on Amazon S3 and configure it with a custom domain using Route 53. Important: This configuration serves your website over HTTP (not secure). For HTTPS, you’ll need to use CloudFront, which is covered in a separate document.

Prerequisites

  • An AWS account.
  • A registered domain name (if you want to use a custom domain).

Steps

  1. Create an S3 Bucket:

    • In the AWS Management Console, navigate to the S3 service.
    • Click “Create bucket.”
    • Choose a bucket name that ideally matches your domain name (e.g., yourdomain.com). This simplifies configuration later.
    • Select the desired AWS region.
    • Under “Block all public access,” uncheck all the boxes. This is necessary for static website hosting. A more secure approach using bucket policies is used later.
    • Click “Create bucket.”
  2. Enable Static Website Hosting:

    • Select the newly created bucket.
    • Go to the “Properties” tab.
    • Scroll down to “Static website hosting” and click “Edit.”
    • Select “Enable.”
    • In the “Index document” field, enter the name of your main HTML file (e.g., index.html).
    • Optionally, you can specify an “Error document” (e.g., error.html).
    • Click “Save changes.”
  3. Configure Bucket Policy:

    • Go to the “Permissions” tab of your S3 bucket.

    • Under “Bucket policy,” click “Edit.”

    • Paste the following bucket policy, replacing BUCKET-NAME with the actual name of your bucket:

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::BUCKET-NAME/*"
          }
        ]
      }
      
    • Click “Save changes.” This policy allows public read access to the objects in your bucket.

  4. Configure Route 53 (for Custom Domain):

    • Navigate to the Route 53 service in the AWS Management Console.
    • Go to “Hosted zones.”
    • If you don’t have a hosted zone for your domain, create one.
    • Select your hosted zone.
    • Click “Create record.”
    • Choose “Simple routing.”
    • In the “Record name” field, enter the subdomain (e.g., www) or leave it blank for the root domain.
    • Choose “Alias to S3 website endpoint.”
    • Select the region where you created your S3 bucket.
    • Select your S3 bucket. The “Value” field will be automatically populated with the correct S3 website endpoint (e.g., s3-website.us-east-2.amazonaws.com).
    • Click “Create records.”
  5. Upload Website Files:

    • Upload your website files (HTML, CSS, JavaScript, images, etc.) to your S3 bucket.
  6. Test Your Website:

    • After a short while (DNS propagation can take some time), you should be able to access your website using your custom domain (e.g., www.yourdomain.com).

Important Note: HTTP (Not Secure)

This configuration serves your website over HTTP. This means the connection is not encrypted, and user data could be vulnerable. For a secure website (HTTPS), you must use AWS Certificate Manager (ACM) & preferably CDN-Amazon CloudFront. Instructions for configuring HTTPS with CloudFront and your ACM certificate is provided below.