使用 S3 对象所有权控制已上传对象的所有权 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 S3 对象所有权控制已上传对象的所有权

S3 对象所有权是一个 Amazon S3 存储桶设置,您可以使用它来控制上传到存储桶的新对象的所有权。默认情况下,当其他 Amazon Web Services 账户 将对象上传到存储桶时,这些对象仍为上传账户所有。使用 S3 对象所有权时,由具有 bucket-owner-full-control 标准访问控制列表 (ACL) 的其他账户写入的任何新对象都会自动归存储桶拥有者所有,然后由存储桶拥有者完全控制对象。

您可以创建共享数据存储,不同账户中的多个用户和团队可以从中写入和读取数据,并标准化存储桶中新对象的所有权。作为存储桶拥有者,您可以通过基于资源的策略(例如存储桶策略)共享和管理对这些对象的访问。S3 对象所有权不影响现有对象。

S3 对象所有权有两个设置:

  • 对象写入器 – 上传账户将拥有该对象。

  • 首选的存储桶拥有者 – 如果使用 bucket-owner-full-control 标准 ACL 上传对象,则存储桶拥有者将拥有该对象。如果没有此设置和标准 ACL,则上传对象并保持为上传账户所拥有。有关强制实施对象所有权的信息,请参阅 如何确保我拥有新对象的所有权?

设置 S3 对象所有权

本节提供了有关如何启用 S3 对象所有权的示例。您可以使用 Amazon Web Services Management Console,该控制台提供了一个用于管理权限的 UI 且无需编写任何代码。

将 S3 对象所有权设置为 Amazon Web Services Management Console 中的首选存储桶拥有者

S3 对象所有权使您能够获得其他 Amazon Web Services 账户 使用 bucket-owner-full-control 标准访问控制列表 (ACL) 上传到存储桶的新对象的所有权。本节介绍如何使用控制台设置对象所有权。

在 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. 选择 Bucket owner preferred (首选的存储桶拥有者),然后选择 Save (保存)

通过上述步骤,对象所有权将取得由其他账户使用 bucket-owner-full-control 标准 ACL 写入的任何新对象的所有权。有关强制实施对象所有权的更多信息,请参阅 如何确保我拥有新对象的所有权?

如何确保我拥有新对象的所有权?

将 S3 对象所有权设置为首选的存储桶拥有者后,您可以添加存储桶策略,以要求所有 Amazon S3 PUT 操作都包含 bucket-owner-full-control 标准 ACL。此 ACL 授予存储桶拥有者完全控制新对象的权限。通过 S3 对象所有权设置,将对象所有权转移给存储桶拥有者。如果上传者在上传过程中未满足 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" } } } ] }

以下是一个复制操作示例,其中包括使用 bucket-owner-full-control (Amazon Command Line Interface) 的 Amazon CLI 标准 ACL。

aws s3 cp file.txt s3://DOC-EXAMPLE-BUCKET --acl bucket-owner-full-control

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

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

注意

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

将 S3 对象所有权与 Amazon S3 复制结合使用

S3 对象所有权不会改变 Amazon S3 复制的行为。在复制中,默认情况下,源对象的拥有者也拥有副本。当源存储桶和目标存储桶由不同的 Amazon Web Services 账户 拥有时,您可以添加可选的配置设置以更改副本所有权。

要将已复制对象的所有权转移给目标存储桶拥有者,您可以使用 Amazon S3 复制所有者覆盖选项。有关转移复制副本所有权的更多信息,请参阅 更改副本拥有者