Amazon S3 バケットで ACL を無効にすることをお勧めします。これを行うには、S3 オブジェクトの所有権に [バケット所有者の強制] 設定を適用します。この設定を適用すると、ACL が無効になり、バケット内のすべてのオブジェクトを自動的に所有し、完全に制御できるようになります。ACL を無効にしてすべての新しいバケットを作成するように要求するには、次のセクションで説明するように、AWS Identity and Access Management (IAM) ポリシーまたは AWS Organizations サービスコントロールポリシー (SCP) を使用します。
ACL を無効にせずに新しいオブジェクトのオブジェクト所有権を強制するには、バケット所有者の優先設定を適用できます。この設定を適用する場合は、バケットポリシーを更新して、バケットへのすべての PUT
リクエストに bucket-owner-full-control
既定 ACL を要求することを強くお勧めします。bucket-owner-full-control
既定 ACL を他のアカウントのバケットに送信するように、クライアントも更新してください。
トピック
すべての新しいバケットの ACL を無効にします (バケット所有者の強制)
次の例の IAM ポリシーは、[バケット所有者の強制] 設定がオブジェクト所有権に適用されていない限り、特定の IAM ユーザーまたはロールの s3:CreateBucket
アクセス許可を拒否します。Condition
ブロック内のキーバリューのペアは、キーには s3:x-amz-object-ownership
を、値には BucketOwnerEnforced
設定を指定します。つまり、IAM ユーザーは、オブジェクト所有権に[バケット所有者の強制] 設定を設定し、ACL を無効にした場合にのみ、バケットを作成できます。このポリシーは、AWS 組織の境界 SCP として使用することもできます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireBucketOwnerFullControl",
"Action": "s3:CreateBucket",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-object-ownership": "BucketOwnerEnforced"
}
}
}
]
}
Amazon S3 PUT
オペレーションで bucket-owner-full-control 既定 ACL を要求する (バケット所有者の優先)
オブジェクト所有権に対するバケット所有者の優先設定を使用すると、バケット所有者は、他のアカウントが bucket-owner-full-control
既定 ACL を使用してバケットに書き込む新しいオブジェクトを所有し、完全に制御できます。ただし、他のアカウントが bucket-owner-full-control
規定 ACL なしでバケットにオブジェクトを書き込む場合、オブジェクトライターは完全制御アクセスを維持します。バケット所有者は、bucket-owner-full-control
既定 ACL を指定した場合にのみ書き込みを許可するバケットポリシーを実装できます。
注記
[バケット所有者の強制] 設定で ACL を無効にすると、バケット所有者として、バケット内のすべてのオブジェクトを自動的に所有し、完全に制御できます。このセクションを使用してバケットポリシーを更新して、バケット所有者にオブジェクトの所有権を適用する必要はありません。
次のバケットポリシーでは、オブジェクトの ACL が bucket-owner-full-control
に設定されている場合にのみ、アカウント
が 111122223333
にオブジェクトをアップロードできるように指定しています。お客様のアカウントで、amzn-s3-demo-bucket
を、お客様のバケット名で111122223333
を置き換えてください。amzn-s3-demo-bucket
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Only allow writes to my bucket with bucket owner full control
",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333
:user/ExampleUser
"
]
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
次に、AWS Command Line Interface (AWS CLI) を使用した bucket-owner-full-control
既定 ACL を含むコピーオペレーションの例を示します。
aws s3 cp
file.txt
s3://amzn-s3-demo-bucket
--acl bucket-owner-full-control
バケットポリシーが有効になった後、クライアントに bucket-owner-full-control
既定 ACL が含まれていない場合、オペレーションは失敗し、アップローダーは次のエラーを受け取ります。
PutObject オペレーションを呼び出すときにエラー (AccessDenied) が発生しました: アクセスが拒否されました
。
注記
アップロード後にクライアントがオブジェクトにアクセスする必要がある場合は、アップロードアカウントに追加のアクセス権限を付与する必要があります。アカウントにリソースへのアクセス許可を付与する方法については、チュートリアル: ポリシーを使用した Amazon S3 リソースへのアクセスの管理 を参照してください。