A. static website hostingのエンドポイントをOrigin Domain Nameに指定する#
1.S3でStatic website hostingを公開する##
バケットポリシーは以下のように設定。
{
"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 を指定する###
これで、CloudFrontのエンドポイントでアクセスすることができる。
しかし、このようにS3のstatic website hostingのエンドポイントを指定した場合、cloud frontからのみアクセスするといったことができない。
そこで、Origin Custom Headersに特定の文字列を送り、S3バケットでその特定のHeaderがある場合のみGetObjectできるといったバケットポリシーを設定する。
3 Origin Custom Headersをつける##
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を設定します。)
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のエンドポイント → アクセスできる