7
1

More than 3 years have passed since last update.

S3静的webサイトへのアクセスをCloudFront経由のみに制限する

Last updated at Posted at 2021-07-21

CloudFrontのOrigin Custom HeaderとS3バケットポリシーを設定していきます。
CloudFront経由時のみに付加されるヘッダーを利用してバケットポリシーで制御する、という仕組みです。

前提条件

今回の記事は、CloudFrontのOriginをS3の静的ホスティングエンドポイントに設定している場合について言及しておりますのでご注意ください。URLに「website」がついてる方です。

CloudFrontのOriginの指定先

○ http://bucket-name.s3-website.Region.amazonaws.com
× http://bucket-name.s3.Region.amazonaws.com

単なるS3オブジェクトの場合はこちらの記事が役に立つと思います。

CloudFrontにOrigin Custom Headersを設定する

該当DistributionでOrigins and Origin Groupsを選択

スクリーンショット 2021-07-21 19.07.16.png

Origin Custom Headersにヘッダー情報を入力

スクリーンショット 2021-06-29 18.09.27.png

Header Name:Referer
Value:cf(任意の値)

バケットポリシー

「パブリックアクセスをすべてブロック」がオフになっていることを確認してください。オフになっていないとバケットポリシーが適用されません。
スクリーンショット 2021-06-29 18.29.12.png

バケットポリシーの例

Refererヘッダーに"cf"が入っている場合のみアクセス許可

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "Referer-Allow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::(バケット名)/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": "cf"
                }
            }
        },
        {
            "Sid": "Referer-Deny",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::(バケット名)/*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": "cf"
                }
            }
        }
    ]
}

この設定をしている状態で、各アクセスしてみると、

・bucket-name.s3-website.Region.amazonaws.com
→403エラー
・xxxxxxx.cloudfront.net
→アクセス可能

となるはずです。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1