概要
cloudfront で配信している SPA でメンテナンスページを作成するとき、静的な HTML ファイルを S3 に置くが cloudfront からは「/maintenance.html」のように URL 直打ちだとアクセスできないようにしたい、というケースがありました。maintenance.html は URL 直打ちではなく SPA の制御によってレンダリングされます。
その際のメモです。
オリジンアクセスアイデンティティを使う
S3 のバケットポリシーでオリジンアクセスアイデンティティを使って cloudfront からのアクセスを制御することによって上記のケースを実現できます。
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity TESTTEST"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::test/*"
},
{
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity TESTTEST"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::test/maintenance.html"
}
]
}
上記のポリシーでは Deny を使って maintenance.html への直アクセスを禁止しています。