为现有存储桶设置对象所有权 - Amazon Simple Storage Service

为现有存储桶设置对象所有权

您可以在现有 S3 存储桶上配置 S3 对象所有权。要在创建存储桶时应用对象所有权,请参阅 在创建存储桶时设置对象所有权

S3 对象所有权是 Amazon S3 存储桶级设置,您可以使用它禁用 access control lists(ACLs)(访问控制列表 ACL),并获取存储桶中每个对象的所有权,从而简化了对存储在 Amazon S3 中的数据的访问管理。默认情况下,S3 对象所有权设为强制存储桶拥有者设置,并且对于新存储桶禁用 ACL。禁用 ACL 后,存储桶拥有者拥有存储桶中的每个对象,并使用访问管理策略来专门管理对数据的访问权限。我们建议您将 ACL 保持为禁用状态,除非有必须单独控制每个对象的访问权限的特殊情况。

对象所有权有三个设置,您可以使用它来控制上传到存储桶的对象的所有权,并禁用或启用 ACL:

已禁用 ACL
  • 强制存储桶拥有者(默认)– ACL 已禁用,存储桶拥有者自动拥有并完全控制存储桶中的每个对象。ACL 不再影响 S3 存储桶中对数据的权限。存储桶使用策略来定义访问控制。

已启用 ACL
  • Bucket owner preferred(首选存储桶拥有者)— 存储桶拥有者拥有并完全控制其他账户使用 bucket-owner-full-control 标准 ACL 写入存储桶的新对象。

  • 对象编写者— 该 AWS 账户上传对象拥有该对象,对其拥有完全控制权,并且可以通过 ACL 授予其他用户访问该对象的权限。

先决条件:在应用强制存储桶拥有者设置以禁用 ACL 之前,您必须将存储桶 ACL 权限迁移到存储桶策略并将存储桶 ACL 重置为默认私有 ACL。我们还建议您将对象 ACL 权限迁移到存储桶策略,并编辑需要存储桶拥有者完全控制 ACL 以外的 ACL 的存储桶策略。有关更多信息,请参阅 禁用 ACL 的先决条件

Permissions(权限):要使用此操作,您必须拥有 s3:PutBucketOwnershipControls 权限。有关 Amazon S3 权限的更多信息,请参阅《Service Authorization Reference》中的 Actions, resources, and condition keys for Amazon S3

有关按 S3 资源类型对 S3 API 操作的权限的更多信息,请参阅 Amazon S3 API 操作所需的权限

  1. 登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets(存储桶)列表中,请选择要将 S3 对象所有权设置应用到的存储桶的名称。

  3. 选择 Permissions(权限)选项卡。

  4. Object Ownership(对象所有权)下方,请选择 Edit(编辑)。

  5. Object Ownership(对象所有权)下方,要禁用或启用 ACL,并控制上传到存储桶中的对象的所有权,请选择以下设置之一:

    已禁用 ACL
    • Bucket owner enforced(强制存储桶拥有者)— ACL 被禁用,存储桶拥有者自动拥有并完全控制存储桶中的每个对象。ACL 不再影响 S3 存储桶中对数据的权限。存储桶使用策略来定义访问控制。

      要通过使用 IAM 或 AWS Organizations 策略借助禁用的 ACL 要求创建所有新的存储桶,请参阅 禁用所有新存储桶的 ACL(强制存储桶拥有者)

    已启用 ACL
    • Bucket owner preferred(首选存储桶拥有者)— 存储桶拥有者拥有并完全控制其他账户使用 bucket-owner-full-control 标准 ACL 写入存储桶的新对象。

      如果应用首选存储桶拥有者设置,以要求所有的 Amazon S3 上传都包含 bucket-owner-full-control 存储的 ACL,可以 add a bucket policy(添加存储桶策略),该策略只允许对象使用此 ACL 上传。

    • 对象编写者— 该 AWS 账户上传对象拥有该对象,对其拥有完全控制权,并且可以通过 ACL 授予其他用户访问该对象的权限。

  6. 请选择保存

要为现有存储桶应用 Object Ownership 设置,请使用带有 --ownership-controls 参数的 put-bucket-ownership-controls 命令。所有权的有效值为 BucketOwnerEnforcedBucketOwnerPreferredObjectWriter

下面的例子使用 AWS CLI 为现有的存储桶应用强制存储桶拥有者设置:

aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"

有关 put-bucket-ownership-controls 的信息,请参阅《AWS Command Line Interface 用户指南》中的 put-bucket-ownership-controls

此示例使用 AWS SDK for Java 对现有存储桶应用了存储桶拥有者的 BucketOwnerEnforced 设置:

// Build the ObjectOwnership for BucketOwnerEnforced OwnershipControlsRule rule = OwnershipControlsRule.builder() .objectOwnership(ObjectOwnership.BucketOwnerEnforced) .build(); OwnershipControls ownershipControls = OwnershipControls.builder() .rules(rule) .build() // Build the PutBucketOwnershipControlsRequest PutBucketOwnershipControlsRequest putBucketOwnershipControlsRequest = PutBucketOwnershipControlsRequest.builder() .bucket(BUCKET_NAME) .ownershipControls(ownershipControls) .build(); // Send the request to Amazon S3 s3client.putBucketOwnershipControls(putBucketOwnershipControlsRequest);

要使用 AWS CloudFormation 以便为现有存储桶应用对象所有权设置,请参阅《AWS CloudFormation 用户指南》中的 AWS::S3::Bucket OwnershipControls

要使用 REST API 将 Object Ownership 设置应用于现有 S3 存储桶,请使用 PutBucketOwnershipControls。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 PutBucketOwnershipControls

后续步骤:在应用对象所有权的强制存储桶拥有者或首选存储桶拥有者设置后,您可以进一步执行以下步骤:

  • Bucket owner enforced(强制存储桶拥有者)—通过使用 IAM 或企业策略借助禁用的 ACL 要求创建所有新的存储桶。

  • Bucket owner preferred(首选存储桶拥有者)—添加 S3 存储桶策略,要求将所有对象上传到存储桶中都需要 bucket-owner-full-control 预定义 ACL。