私は以下の方針を持っています:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "Stmt1395852960432",
"Action": "s3:*",
"Effect": "Deny",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": [
"*"
]
}
},
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1IYJC432545JN"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
ただし、これにより、Cloudfrontを含むすべてのリクエスターからのリクエストが拒否されます。これを行う正しい方法は何ですか?
問題は、オブジェクトがパブリック読み取りでクライアントによって作成されることです。現在、この設定を変更するためにクライアントを直接制御することはできません。だから私が欲しいのは、個々のオブジェクトのACLを上書きするポリシーを持つことです。つまりdefault denyここでは機能しません。
S3ポリシーは次のようになります。
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YYYYYYYYYYYYY.com/*"
}
]
}
しかし、私はこれを手動で生成しませんでした。 cloudfrontにオリジン(S3)を追加する場合、「バケットアクセスを制限する」オプションがあります。ここで「はい」と伝え、次に進みます。 Cloudfront構成は、残りを自動的に行います。
詳細はこちら: オリジンアクセスIDを使用してAmazon S3コンテンツへのアクセスを制限する-Amazon CloudFront 。
これはあなたが探しているものです。 XXXXXXXXXXXXXXをOriginのアクセスIDに置き換えます
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your.bucket.com/*"
},
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your.bucket.com/*"
}
]
}