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

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

S3 对象所有权 可以通过 AWS 管理控制台、AWS Command Line Interface、AWS 开发工具包或 Amazon S3 REST API 进行配置。AWS CloudFormation 支持已计划提供,但尚未提供。

S3 对象所有权 是一个 Amazon S3 存储桶设置,您可以使用它来控制上传到存储桶的新对象的所有权。默认情况下,当其他 AWS 账户将对象上传到存储桶时,这些对象仍为上传账户所有。使用 S3 对象所有权 时,由具有 bucket-owner-full-control 标准访问控制列表 (ACL) 的其他账户写入的任何新对象都会自动归存储桶拥有者所有,这些存储桶拥有者将完全控制这些对象。您可以创建共享的数据存储,不同账户中的多个用户和团队可以写入和读取这些数据存储,并标准化存储桶中新对象的所有权,同时允许您作为存储桶拥有者通过基于资源的策略(如存储桶策略)共享和管理对这些对象的访问。S3 对象所有权 不影响现有对象。

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

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

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

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

将 S3 对象所有权 设置为首选的存储桶拥有者后,您可以添加存储桶策略,以要求所有 Amazon S3 PUT 操作都包含 bucket-owner-full-control 标准 ACL。此 ACL 授予存储桶拥有者对新对象的完全控制权,并通过 S3 对象所有权 设置将对象所有权转移给存储桶拥有者。如果上传者在上传过程中未能满足 ACL 要求,请求将失败。这使得存储桶拥有者能够在其存储桶中的所有新上传的对象之间强制实施统一的对象所有权。

以下存储桶策略指定只有当对象的 ACL 设置为 bucket-owner-full-control 时,账户 111122223333 才能将对象上传到 awsdoc-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:::awsdoc-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://awsdoc-example-bucket --acl bucket-owner-full-control

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

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

注意

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

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

S3 对象所有权 不会更改 Amazon S3 复制 的行为。在复制中,默认情况下,源对象的拥有者也拥有副本。当源存储桶和目标存储桶由不同的 AWS 账户拥有时,您可以添加可选的配置设置以更改副本所有权。要将已复制对象的所有权转移给目标存储桶拥有者,您可以使用 Amazon S3 复制 所有者覆盖选项。有关转移复制副本所有权的更多信息,请参阅更改副本拥有者