Skip to main content
How to Host Static Websites With Amazon S3 and Cloudflare
  1. Posts/

How to Host Static Websites With Amazon S3 and Cloudflare

·726 words·4 mins·
Tutorial
May Meow
Author
May Meow
MayMeow is a developer and cybersecurity enthusiast with a passion for cryptography, DevSecOps, and open-source contributions. They enjoy creating tools that strengthen digital security, blending creativity and technology to innovate in fields like PHP and .NET. Always exploring new frontiers in tech, MayMeow is dedicated to safeguarding the digital landscape through their work.
Table of Contents
selfhosted - This article is part of a series.
Part 3: This Article

Hi! I moved my website to s3 + cloudflare for SSL certificate. Do you want to know how? I will show you:

First you will need to create new storage so Login to your AWS console as admin.

Create Bucket
#

Click on services and then select S3 from storage section.

On page click on Create Bucket in right corner and:

  • Change Bucket name in my case www.themaymeow.com
  • Choose AWS Region
  • Uncheck Block all public access
  • Keep other unchanged
  • Click Create Bucket

Update bucket properties
#

You will see bucket lists so select you bucket and from bucket page select Properties tab

  • From Bucket overview copy somewhere Amazon Resource Name ARN. you will need it later
  • Scroll down to Static Website hosting Click Edit
  • Set “Static website Hosting” to enabled
  • Hosting Type is “Host static website”
  • Indes documment set to index.html
  • Other things keep unchaged
  • Scroll down and clik on Save Changes
  • Copy somewhere your Bucket website endpoint

Update Permissions
#

Select second tab Permissions scroll down to Bucket Policy click Edit and paste following policy.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Public",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "<change-me-to-youw-ARN>/*"
        }
    ]
}
  • Update your ARN you have copied
  • Click Save cnages

Thats all for bucket configuration. Now you will need to create user who will be allowd to write content to you bucket.

Deployment user
#

So search for Identity and Access management IAM and open it.

Create Policy
#

First you will need to create policy. Find Policies in left menu and open it.

  • Click Create policy
  • Select JSON tab
  • Paste following content and change your ARN
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "<change-me-to-youw-ARN>"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": "<change-me-to-youw-ARN>/*"
        }
    ]
}

Important thing you will see "Resource": "<change-me-to-youw-ARN>" and "Resource": "<change-me-to-youw-ARN>/*" this is correct do not remove the /* on second one.

  • Click Next Tags
  • Click Next Review policy
  • Update name
  • Click Create Policy

Create User
#

On left menu select Users and click on Add user

  • Change Name
  • Access type select Programatic Access
  • Click Next: permissions

  • Click on Create group

  • Change Group name
  • Select policy you created. you can use search or filter to show only users created policies
  • Click Create gourp
  • Click Next Tags
  • Click Next Review
  • Click Create User

  • Copy Access key ID and Secret access key to some place (you will need it)
  • Click close

OK Thats All for settings on AWS. Next step is to configure our domain in Cloudflare

Add Domain to cloudflare
#

Login to cloudflare and click to + Add a site

  • Enter your site
  • Click add site
  • Select Cloudflare Free
  • If you have dns records cloudflare will try to collect them
  • Login to your privder and update your nameservers
  • Cloudflare now try to verify you domain. (you can wait on page or you can close clodflare for now). Tehy will notify you.

Configure DNS rules
#

Ok if you are back you have configured domain name. So click on it and select 3rd tab DNS

  • Create rule type CNAME
  • name set to www
  • target set to your AWS website endpoint without https://
  • Proxy status set to proxy

Create second rule

  • Set type to CNAME
  • name set to @
  • target set to www.yourdomain.tld
  • Proxy status set to enable

Configure SSL/tls
#

Select 4th tab SSL/TLS

  • Your ssl/tls encryption mode set to Flexibile because because we using certificates from AWS and not self signed ones

Select Edge certificates from tab

  • Always Use HTTPS set to On

Setting up page rules
#

Next and last thing is to redirect our naked domain domain.tld to www.domain.tld.

So select 10th tab Page Rules

  • Click Create page rule
  • Set If the rule matches yourdomain.tld/*
  • Then The setings select Forwarding Url
  • Next fiels select 301 Permanent redirect
  • Set the desitnation url https://www.yourdomain.tld/$1
  • Click save and deploy.

Done
#

Sot that all for prepare AWS + Cloudflare to your static website.

Bonus
#

To deploy website to AWS you can use minio-cli Minio with following script manually or you can use CI/CD

mc config host add cdn https://s3.amazonaws.com <access-id> <secret-access-key> --api s3v4
mc cp -r paath/to/website/files cdn/bucket-name

Now just navigate to your new website and enjoy. :)

Photo by Billy Huynh on Unsplash

Reply by Email
selfhosted - This article is part of a series.
Part 3: This Article

Related

Xfce Terminal Color Emoji
·133 words·1 min
Tutorial Linux Xfce 100DaysToOffload
Initial Server Setup on Cloud Services
·398 words·2 mins
Administration Fundamentals Linux Ubunutu Tutorial
Static Sites With Minio and S3www
·1297 words·7 mins
Docker Object Storage Static Site Selfhosting