禁用所有新桶的 ACL 并强制执行 Object Ownership - Amazon Simple Storage Service

禁用所有新桶的 ACL 并强制执行 Object Ownership

建议禁用 Amazon S3 桶上的 ACL。可以通过为 S3 Object Ownership 应用桶所有者强制设置来实现这一点。应用此设置时,ACL 将被禁用,并且您自动拥有并完全控制桶中的所有对象。您可以通过使用 AWS Identity and Access Management(IAM)策略或 AWS Organizations 服务控制策略(SCP)来要求在禁用 ACL 的情况下创建所有新桶,如下一节所述。

要在不禁用 ACL 的情况下强制对新对象的 Object Ownership,您可以应用桶拥有者首选设置。当您应用此设置时,我们强烈建议您更新桶策略,要求对桶中的所有 PUT 请求使用 bucket-owner-full-control 标准 ACL。还应更新客户端以将 bucket-owner-full-control 标准 ACL 从其他账户发送至桶。

禁用所有新桶的 ACL(强制执行桶拥有者)

下面的例子 IAM policy 拒绝特定 IAM 用户或角色的 s3:CreateBucket 权限,除非 Object Ownership 应用了桶拥有者强制设置。Condition 块中的键值对指定 s3:x-amz-object-ownership 为其密钥,并将 BucketOwnerEnforced 设为其值。换句话说,只有在 IAM 用户为 Object Ownership 设置桶拥有者强制设置并禁用 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 操作使用桶拥有者完全控制的标准 ACL(首选桶拥有者)

通过将桶拥有者首选设置为 Object Ownership,您作为桶拥有者,拥有并完全控制其他账户使用 bucket-owner-full-control 标准的 ACL 向桶写入的新对象。但是,如果其他账户在没有 bucket-owner-full-control 标准 ACL 的情况下将对象写入桶,对象写入器将保持完全控制访问权限。作为桶拥有者,只有指定了 bucket-owner-full-control 标准的 ACL,才能实现允许写入的桶策略。

注意

如果在桶拥有者强制设置的情况下禁用了 ACL,则作为桶拥有者,您将自动拥有并完全控制桶中的所有对象。您无需使用此部分来更新桶策略来强制执行桶拥有者的对象所有权。

以下桶策略指定只有当对象的 ACL 设置为 111122223333 时,账户 DOC-EXAMPLE-BUCKET 才能将对象上传到 bucket-owner-full-control。请务必将 111122223333 替换为您的账户,DOC-EXAMPLE-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:::DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET --acl bucket-owner-full-control

桶策略生效之后,如果客户端不包含 bucket-owner-full-control 标准 ACL,则操作将失败,上传者将收到以下错误:

调用 PutObject 操作时发生错误 (AccessDenied):访问被拒绝

注意

如果客户端在上传后需要访问对象,则必须向上传账户授予其他权限。有关授予账户对资源的访问权限的信息,请参阅 示例演练:管理对 Amazon S3 资源的访问