マネジメントコンソールで OAC を選択するとヘッダに「バケットポリシー変更しろよ!」ってお知らせ出してくれるし、そのまま使えるバケットポリシーをコピペさせてくれるんだけど、
「オリジンになる S3 を、複数の異なるドメイン付与したディストリビューションが参照している (モノリシックなコードに複数の役割がある)」
みたいな状態だと、そのままコピペすると詰むのでこうする。
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::バケット名/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": [
"arn:aws:cloudfront::アカウントID:distribution/ディストリビューションID",
"arn:aws:cloudfront::アカウントID:distribution/ディストリビューションID"
]
}
}
}
]
}
変更点
コピペしたバケットポリシーは、以下のように "AWS:SourceArn" が単一になっているはずです。
"AWS:SourceArn": [
"arn:aws:cloudfront::アカウントID:distribution/ディストリビューションID"
]
なので , で繋げて、複数書いてやるだけで解決です。
ちなみにバケットポリシーの Condition > StringEquals を利用した場合は、OR 条件になるはずです。
ここを StringNotEquals とかにすると AND 条件になるので注意しようね! ( 1 敗)
AWS のバケットポリシー、こういう所が難しくていつも敗北しているのでなんかわかりやすい形にならんか? 公式のポリシープレビューとかなんかリソースを無限に作りまくりそうでよくわからなくて安易に設定したくないんだよな。
OAI
いつの間にか非推奨になるらしく、 2023 年以降の新規リージョンで利用できなくなるっぽい? はえー。
このOACの発表とあわせて、CloudFront Developer Guide上ではこれまでのOAIによるアクセス制限方法は「legacy, not recommended」と記載されるようになりました。