LoginSignup
6
5

More than 3 years have passed since last update.

CloudFrontとS3のエンドポイント

Posted at

A. static website hostingのエンドポイントをOrigin Domain Nameに指定する

1.S3でStatic website hostingを公開する

image.png

バケットポリシーは以下のように設定。

{
    "Version": "2012-10-17",
    "Id": "Policy1557901682108",
    "Statement": [
        {
            "Sid": "Stmt1557901670604",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::leomaro.tk/*"
        }
    ]
}

2.Origin Domain Name にS3のstatic website hosting を指定する

image.png

これで、CloudFrontのエンドポイントでアクセスすることができる。

しかし、このようにS3のstatic website hostingのエンドポイントを指定した場合、cloud frontからのみアクセスするといったことができない。

そこで、Origin Custom Headersに特定の文字列を送り、S3バケットでその特定のHeaderがある場合のみGetObjectできるといったバケットポリシーを設定する。

3 Origin Custom Headersをつける

image.png

4 S3のバケットポリシーを変更する

name に test がある場合は、Allow、ない場合は Deny。

{
    "Version": "2008-10-17",
    "Id": "http referer policy",
    "Statement": [
        {
            "Sid": "Referer-Allow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::leomaro.tk/*",
            "Condition": {
                "StringLike": {
                    "aws:name": "test"
                }
            }
        },
        {
            "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::leomaro.tk/*",
            "Condition": {
                "StringNotLike": {
                    "aws:name": "test"
                }
            }
        }
    ]
}

5 テストしてみる

curl --header 'name:test' website hosting Endpoint URL
#→アクセスできる

curl --header 'name:test' website hosting Endpoint URL
#→アクセスできない(403エラー)

B. S3のエンドポイントをOrigin Domain Nameに指定する

1 Origin Domain Name にS3のエンドポイントを指定する

このとき設定は以下のようにします。

  • Restrict Bucket Access :Yes(CloudFrontからしかS3にアクセスできないようにできます)
  • Origin Access Identity:Create a New Identity(S3にアクセスするこのCloudFrontの接続子です)
  • Grant Read Permissions on Bucket:Yes(S3に対してCloudFrontからのBucketPolicyを設定します。)

image.png

2 S3側のバケットポリシーを覗いてみる

先程、Grant Read Permissions on Bucket で設定したものが反映されています。

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E3UEIDRYVURC48"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::leomaro.tk/*"
        }
    ]
}

3 アクセスしてみる

S3のエンドポイント → アクセスできない
CloudFrontのエンドポイント → アクセスできる

6
5
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
6
5