为现有存储桶设置对象所有权 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

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

S3 对象所有权是 Amazon S3 存储桶级设置,您可以使用它禁用 access control lists (ACLs)(访问控制列表 ACL),并获取存储桶中每个对象的所有权,从而简化了对存储在 Amazon S3 中的数据的访问管理。我们建议您禁用 ACL,除非您需要在单个对象级别控制访问权限。

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

已禁用 ACL

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

已启用 ACL

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

  • 对象写入器(原定设置)— 该 Amazon Web Services 账户 上载对象拥有该对象,对其拥有完全控制权,并且可以通过 ACL 授予其他用户访问该对象的权限。

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

Permissions(权限):要使用此操作,您必须拥有 s3:PutBucketOwnershipControls 权限。有关 Amazon S3 权限的更多信息,请参阅 Amazon S3 的操作、资源和条件键

  1. 登录到 Amazon Web Services 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 或 Amazon Organizations 策略借助禁用的 ACL 要求创建所有新的存储桶,请参阅 禁用所有新存储桶的 ACL(强制执行存储桶拥有者)

    已启用 ACL

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

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

    • 对象写入器— 该 Amazon Web Services 账户 上载对象拥有该对象,对其拥有完全控制权,并且可以通过 ACL 授予其他用户访问该对象的权限。

  6. 选择保存

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

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

aws s3api put-bucket-ownership-controls --bucket DOC-EXAMPLE-BUCKET --ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]

下面的例子使用 Amazon 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 S3 s3client.putBucketOwnershipControls(putBucketOwnershipControlsRequest);

要使用 Amazon CloudFormation 以便为现有存储桶应用 Object Ownership 设置,请参阅 Amazon CloudFormation 用户指南中的 AWS::S3::Bucket OwnershipControls

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

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

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

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