From a6378b9a9da29b881d5f8ede9b865b94076c0f84 Mon Sep 17 00:00:00 2001 From: kakakakakku Date: Fri, 3 Jul 2026 11:28:49 +0900 Subject: [PATCH 1/7] s3-cloudfront-oac-cdk-python: Add requirements.txt --- s3-cloudfront-oai-cdk-python/requirements.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 s3-cloudfront-oai-cdk-python/requirements.txt diff --git a/s3-cloudfront-oai-cdk-python/requirements.txt b/s3-cloudfront-oai-cdk-python/requirements.txt new file mode 100644 index 0000000000..81bf648456 --- /dev/null +++ b/s3-cloudfront-oai-cdk-python/requirements.txt @@ -0,0 +1,2 @@ +aws-cdk-lib==2.260.0 +constructs>=10.0.0,<11.0.0 From 22facfa124842b04786d648530fbf4d0f11f269a Mon Sep 17 00:00:00 2001 From: kakakakakku Date: Fri, 3 Jul 2026 11:43:45 +0900 Subject: [PATCH 2/7] s3-cloudfront-oac-cdk-python: Add cdk.json --- s3-cloudfront-oai-cdk-python/cdk.json | 3 +++ .../{s3_cloudfront_oai_cdk.py => s3_cloudfront_oac_cdk.py} | 0 2 files changed, 3 insertions(+) create mode 100644 s3-cloudfront-oai-cdk-python/cdk.json rename s3-cloudfront-oai-cdk-python/{s3_cloudfront_oai_cdk.py => s3_cloudfront_oac_cdk.py} (100%) diff --git a/s3-cloudfront-oai-cdk-python/cdk.json b/s3-cloudfront-oai-cdk-python/cdk.json new file mode 100644 index 0000000000..b4baa10225 --- /dev/null +++ b/s3-cloudfront-oai-cdk-python/cdk.json @@ -0,0 +1,3 @@ +{ + "app": "python3 app.py" +} diff --git a/s3-cloudfront-oai-cdk-python/s3_cloudfront_oai_cdk.py b/s3-cloudfront-oai-cdk-python/s3_cloudfront_oac_cdk.py similarity index 100% rename from s3-cloudfront-oai-cdk-python/s3_cloudfront_oai_cdk.py rename to s3-cloudfront-oai-cdk-python/s3_cloudfront_oac_cdk.py From 89d240554693c29e05306b804460de0025975749 Mon Sep 17 00:00:00 2001 From: kakakakakku Date: Fri, 3 Jul 2026 12:17:39 +0900 Subject: [PATCH 3/7] s3-cloudfront-oac-cdk-python: Add sample index.html --- s3-cloudfront-oai-cdk-python/website/index.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 s3-cloudfront-oai-cdk-python/website/index.html diff --git a/s3-cloudfront-oai-cdk-python/website/index.html b/s3-cloudfront-oai-cdk-python/website/index.html new file mode 100644 index 0000000000..7027a81a49 --- /dev/null +++ b/s3-cloudfront-oai-cdk-python/website/index.html @@ -0,0 +1,12 @@ + + + + + + S3 + CloudFront OAC Sample + + +

Hello from S3 + CloudFront!

+

This page is served from a private S3 bucket through CloudFront using Origin Access Control (OAC).

+ + From a034368d486b91a0b5d8fecf76c07f447521db92 Mon Sep 17 00:00:00 2001 From: kakakakakku Date: Fri, 3 Jul 2026 12:19:38 +0900 Subject: [PATCH 4/7] s3-cloudfront-oac-cdk-python: Update aws-cdk-lib and migrate OAI to OAC --- .../{s3_cloudfront_oac_cdk.py => app.py} | 45 +++++++++++-------- 1 file changed, 26 insertions(+), 19 deletions(-) rename s3-cloudfront-oai-cdk-python/{s3_cloudfront_oac_cdk.py => app.py} (54%) diff --git a/s3-cloudfront-oai-cdk-python/s3_cloudfront_oac_cdk.py b/s3-cloudfront-oai-cdk-python/app.py similarity index 54% rename from s3-cloudfront-oai-cdk-python/s3_cloudfront_oac_cdk.py rename to s3-cloudfront-oai-cdk-python/app.py index e551c433e9..692eed15db 100644 --- a/s3-cloudfront-oai-cdk-python/s3_cloudfront_oac_cdk.py +++ b/s3-cloudfront-oai-cdk-python/app.py @@ -1,5 +1,7 @@ +import aws_cdk as cdk from constructs import Construct from aws_cdk import ( + CfnOutput, RemovalPolicy, aws_s3 as s3, aws_s3_deployment as s3deploy, @@ -7,17 +9,16 @@ aws_cloudfront_origins as origins ) -class S3CloudFrontOAI(Construct): - - def __init__(self, scope: Construct, id: str, **kwargs): - super().__init__(scope, id, **kwargs) +class S3CloudFrontOAC(Construct): + def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: + super().__init__(scope, construct_id, **kwargs) website_bucket = s3.Bucket( self, "My-Website-Bucket", removal_policy=RemovalPolicy.DESTROY, auto_delete_objects=True, - encryption=s3.BucketEncryption.KMS, + encryption=s3.BucketEncryption.S3_MANAGED, enforce_ssl=True, versioned=True ) @@ -29,25 +30,31 @@ def __init__(self, scope: Construct, id: str, **kwargs): exposed_headers=["Access-Control-Allow-Origin"] ) - oai = cloudfront.OriginAccessIdentity( - self, - "My-OAI", - comment="My OAI for the S3 Website" - ) - - website_bucket.grant_read(oai) - - - cd = cloudfront.Distribution(self, "myCloudFrontDistribution", + distribution = cloudfront.Distribution(self, "myCloudFrontDistribution", default_root_object='index.html', default_behavior=cloudfront.BehaviorOptions( - origin=origins.S3Origin(website_bucket, origin_access_identity=oai), - origin_request_policy=cloudfront.OriginRequestPolicy.CORS_S3_ORIGIN, + origin=origins.S3BucketOrigin.with_origin_access_control(website_bucket), + origin_request_policy=cloudfront.OriginRequestPolicy.CORS_S3_ORIGIN, viewer_protocol_policy=cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, response_headers_policy=cloudfront.ResponseHeadersPolicy.CORS_ALLOW_ALL_ORIGINS, cache_policy=cloudfront.CachePolicy.CACHING_OPTIMIZED, allowed_methods=cloudfront.AllowedMethods.ALLOW_ALL - ) + ) ) - \ No newline at end of file + s3deploy.BucketDeployment( + self, + "DeployWebsite", + sources=[s3deploy.Source.asset("./website")], + destination_bucket=website_bucket, + distribution=distribution, + distribution_paths=["/*"] + ) + + CfnOutput(self, "DistributionId", value=distribution.distribution_id) + CfnOutput(self, "DistributionDomainName", value=distribution.distribution_domain_name) + +app = cdk.App() +stack = cdk.Stack(app, "S3CloudFrontOACStack") +S3CloudFrontOAC(stack, "s3-hosted-website") +app.synth() From aaba399107b52ab6a820c86b337910ae273caf8c Mon Sep 17 00:00:00 2001 From: kakakakakku Date: Fri, 3 Jul 2026 12:33:51 +0900 Subject: [PATCH 5/7] s3-cloudfront-oac-cdk-python: Update README to follow the standard pattern template and OAC --- s3-cloudfront-oai-cdk-python/README.md | 77 +++++++++++++++++++------- 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/s3-cloudfront-oai-cdk-python/README.md b/s3-cloudfront-oai-cdk-python/README.md index 1b1db73630..c3badc3c1b 100644 --- a/s3-cloudfront-oai-cdk-python/README.md +++ b/s3-cloudfront-oai-cdk-python/README.md @@ -1,6 +1,6 @@ -# S3 Hosted Website Served by a CloudFront Distribution restricted by Cloudfront Origin Access Identity (OAI) +# S3 Hosted Website Served by a CloudFront Distribution restricted by CloudFront Origin Access Control (OAC) -This repo contains serverless patterns showing how to setup a S3 website hosting bucket that is served by a CloudFront distribution that also obfuscates the CloudFront Distribution domain via Cloudfront Origin Access Identity (OAI). +This repo contains serverless patterns showing how to setup a S3 website hosting bucket that is served by a CloudFront distribution that also obfuscates the CloudFront Distribution domain via CloudFront Origin Access Control (OAC). ![Demo Project Solution Architecture Diagram](diagram.PNG) @@ -11,32 +11,67 @@ Important: this application uses various AWS services and there are costs associ ## Requirements -* AWS Account -* AWS CLI already configured with Administrator permission -* [NodeJS 14.x installed](https://nodejs.org/en/download/) -* CDK v2 installed: See Getting Started With the AWS CDK -* Python CDK required libraries: (install with pip install -r requirements.txt) -* Clone this repo! +* [Create an AWS account](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html) if you do not already have one and log in. The IAM user that you use must have sufficient permissions to make necessary AWS service calls and manage AWS resources. +* [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) installed and configured +* [Git Installed](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) +* [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) (AWS CDK) Installed and account bootstrapped ## Deployment Instructions -1. Within your CDK Python module directory(where all your cdk stacks are located) create a constructs folder -2. Place the `s3_cloudfront_oai_cdk.py` file in the constructs folder you created -3. Import the construct into the desired stack you would like to use this construct (ex.`from .constructs.s3_website import S3CloudFrontOAI`) -4. Use this construct in your stack by defining it in your stack (ex. `myS3HostedWebsite = S3CloudFrontOAI(self, 's3-hosted-website')`) -5. In your terminal run `CDK Deploy` for the specified stack that uses this construct +1. Create a new directory, navigate to that directory in a terminal and clone the GitHub repository: + ```bash + git clone https://github.com/aws-samples/serverless-patterns + ``` +2. Change directory to the pattern directory: + ```bash + cd s3-cloudfront-oac-cdk-python + ``` +3. Create a virtual environment for python: + ```bash + python3 -m venv .venv + ``` +4. Activate the virtual environment: + ```bash + source .venv/bin/activate + ``` +5. Install python modules: + ```bash + python3 -m pip install -r requirements.txt + ``` +6. From the command line, use CDK to synthesize the CloudFormation template and check for errors: + ```bash + cdk synth + ``` +7. From the command line, use CDK to deploy the stack: + ```bash + cdk deploy + ``` -### Removing the resources +## How it works -1. run `CDK Destroy ` for the specified stack that used this construct +This CDK app creates a private S3 bucket, uploads a sample `index.html` to it, and creates a CloudFront distribution in front of the bucket. CloudFront reads the bucket content through Origin Access Control (OAC), so the bucket stays private and is only accessible via CloudFront. -``` -git clone https://github.com/aws-samples/serverless-patterns/s3-cloudfront-oai-cdk-python -``` +## Testing -Each subdirectory contains additional installation and usage instructions. +1. Note the `DistributionId` and `DistributionDomainName` values from the outputs of the CDK deployment process. +2. Open `https://` in your browser. You should see the sample `index.html` page saying `Hello from S3 + CloudFront!`. +3. Confirm that the distribution accesses the S3 origin via Origin Access Control (OAC). + ```bash + aws cloudfront get-distribution-config --id --query 'DistributionConfig.Origins.Items[0].OriginAccessControlId' + ``` + +## Cleanup + +1. Delete the stack + ```bash + cdk destroy + ``` +1. Confirm the stack has been deleted + ```bash + aws cloudformation list-stacks --query "StackSummaries[?contains(StackName,'S3CloudFrontOACStack')].StackStatus" + ``` ---- -Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. ----- +Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: MIT-0 From 128bd144624a47cafa50439bb6d6975f668c8fe2 Mon Sep 17 00:00:00 2001 From: kakakakakku Date: Fri, 3 Jul 2026 12:54:42 +0900 Subject: [PATCH 6/7] s3-cloudfront-oac-cdk-python: Update architecture diagram for OAC --- s3-cloudfront-oai-cdk-python/diagram.PNG | Bin 31152 -> 69767 bytes .../diagram.drawio.svg | 203 ++++++++++++++++++ 2 files changed, 203 insertions(+) create mode 100644 s3-cloudfront-oai-cdk-python/diagram.drawio.svg diff --git a/s3-cloudfront-oai-cdk-python/diagram.PNG b/s3-cloudfront-oai-cdk-python/diagram.PNG index d9ff8ca3a9e10a22c1416b7ab31dcfc0ac104835..51d0900d01647221fe91a1f2e1a4cdb81037ba40 100644 GIT binary patch literal 69767 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 + + + + + + + + + + +
+
+
+ AWS Cloud +
+
+
+
+ + AWS Cloud + +
+
+
+ + + + + + + +
+
+
+ Region +
+
+
+
+ + Region + +
+
+
+ + + + + + + + + + + + + + + + + + +
+
+
+ Amazon S3 +
+ + Bucket + +
+
+
+
+
+ + Amazon S3... + +
+
+
+ + + + + + + + + + + + + +
+
+
+ Amazon CloudFront +
+ + Distribution + +
+
+
+
+
+ + Amazon CloudFront... + +
+
+
+ + + + + + + + + + +
+
+
+ Users +
+
+
+
+
+
+
+ + Users + +
+
+
+ + + + + + + + + +
+
+
+ CloudFront +
+ + URL + +
+
+
+
+
+ + CloudFront... + +
+
+
+ + + + + + + + + +
+
+
+ S3 URL Restricted by OAC +
+
+
+
+ + S3 URL Restricted by OAC + +
+
+
+
+ + + + + Text is not SVG - cannot display + + + + From e978299e3721e8ebad035a6812468aeea555d441 Mon Sep 17 00:00:00 2001 From: kakakakakku Date: Fri, 3 Jul 2026 12:55:53 +0900 Subject: [PATCH 7/7] s3-cloudfront-oac-cdk-python: Rename pattern name to OAC --- .../README.md | 0 .../app.py | 0 .../cdk.json | 0 .../diagram.PNG | Bin .../diagram.drawio.svg | 0 .../requirements.txt | 0 .../website/index.html | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename {s3-cloudfront-oai-cdk-python => s3-cloudfront-oac-cdk-python}/README.md (100%) rename {s3-cloudfront-oai-cdk-python => s3-cloudfront-oac-cdk-python}/app.py (100%) rename {s3-cloudfront-oai-cdk-python => s3-cloudfront-oac-cdk-python}/cdk.json (100%) rename {s3-cloudfront-oai-cdk-python => s3-cloudfront-oac-cdk-python}/diagram.PNG (100%) rename {s3-cloudfront-oai-cdk-python => s3-cloudfront-oac-cdk-python}/diagram.drawio.svg (100%) rename {s3-cloudfront-oai-cdk-python => s3-cloudfront-oac-cdk-python}/requirements.txt (100%) rename {s3-cloudfront-oai-cdk-python => s3-cloudfront-oac-cdk-python}/website/index.html (100%) diff --git a/s3-cloudfront-oai-cdk-python/README.md b/s3-cloudfront-oac-cdk-python/README.md similarity index 100% rename from s3-cloudfront-oai-cdk-python/README.md rename to s3-cloudfront-oac-cdk-python/README.md diff --git a/s3-cloudfront-oai-cdk-python/app.py b/s3-cloudfront-oac-cdk-python/app.py similarity index 100% rename from s3-cloudfront-oai-cdk-python/app.py rename to s3-cloudfront-oac-cdk-python/app.py diff --git a/s3-cloudfront-oai-cdk-python/cdk.json b/s3-cloudfront-oac-cdk-python/cdk.json similarity index 100% rename from s3-cloudfront-oai-cdk-python/cdk.json rename to s3-cloudfront-oac-cdk-python/cdk.json diff --git a/s3-cloudfront-oai-cdk-python/diagram.PNG b/s3-cloudfront-oac-cdk-python/diagram.PNG similarity index 100% rename from s3-cloudfront-oai-cdk-python/diagram.PNG rename to s3-cloudfront-oac-cdk-python/diagram.PNG diff --git a/s3-cloudfront-oai-cdk-python/diagram.drawio.svg b/s3-cloudfront-oac-cdk-python/diagram.drawio.svg similarity index 100% rename from s3-cloudfront-oai-cdk-python/diagram.drawio.svg rename to s3-cloudfront-oac-cdk-python/diagram.drawio.svg diff --git a/s3-cloudfront-oai-cdk-python/requirements.txt b/s3-cloudfront-oac-cdk-python/requirements.txt similarity index 100% rename from s3-cloudfront-oai-cdk-python/requirements.txt rename to s3-cloudfront-oac-cdk-python/requirements.txt diff --git a/s3-cloudfront-oai-cdk-python/website/index.html b/s3-cloudfront-oac-cdk-python/website/index.html similarity index 100% rename from s3-cloudfront-oai-cdk-python/website/index.html rename to s3-cloudfront-oac-cdk-python/website/index.html