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

在创建存储桶时设置对象所有权

创建存储桶时,您可以配置 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 写入存储桶的新对象。

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

权限:要应用 Bucket owner enforced(强制存储桶拥有者)设置或 Bucket owner preferred(首选存储桶拥有者)设置,必须有以下权限:s3:CreateBuckets3:PutBucketOwnershipControls。在应用了 Object writer(对象编写者)设置的情况下创建存储桶时,不需要额外的权限。有关 Amazon S3 权限的更多信息,请参阅《Service Authorization Reference》中的 Actions, resources, and condition keys for Amazon S3

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

重要

Amazon S3 中的大多数现代使用案例不再需要使用 ACL,我们建议您禁用 ACL,除非在需要单独控制每个对象的访问的异常情况下。使用对象所有权,您可以禁用 ACL 并依赖策略进行访问控制。禁用 ACL 时,您可以轻松维护具有通过不同的 Amazon 账户上传的对象的存储桶。作为存储桶拥有者,您拥有存储桶中的所有对象,并可以使用策略管理对它们的访问。

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

  2. 在页面顶部的导航栏中,选择当前所显示 Amazon Web Services 区域的名称。接下来,选择要在其中创建存储桶的区域。

    注意

    要最大程度地减少延迟和成本以及满足法规要求,请选择一个靠近您的区域。在某一区域存储的对象将一直留在该区域,除非您特意将其转移到其他区域。有关 Amazon S3 Amazon Web Services 区域的列表,请参阅《Amazon Web Services 一般参考》中的 Amazon Web Services 服务 端点

  3. 在左侧导航窗格中,选择存储桶

  4. 选择创建存储桶

    此时将打开创建存储桶页面。

  5. 常规配置下,查看将在其中创建存储桶的 Amazon Web Services 区域。

  6. 存储桶类型下,选择通用

  7. 对于存储桶名称,请输入存储桶的名称。

    存储桶名称必须满足以下要求:

    • 在分区中是唯一的。分区是一组区域。Amazon 目前有三个分区:aws(标准区域)、aws-cn(中国区域)和 aws-us-gov(Amazon GovCloud (US) Regions)。

    • 长度必须介于 3 到 63 个字符之间。

    • 只能由小写字母、数字、句点(.)和连字符(-)组成。为了获得最佳兼容性,我们建议您避免在存储桶名称中使用句点(.),但仅用于静态网站托管的存储桶除外。

    • 以字母或数字开头和结尾。

    创建存储桶后,便无法再更改其名称。创建存储桶的 Amazon Web Services 账户 拥有该存储桶。有关给存储桶命名的更多信息,请参阅存储桶命名规则

    重要

    避免在存储桶名称中包含敏感信息,如账号。存储桶名称会显示在指向存储桶中的对象的 URL 中。

  8. Amazon Web Services Management Console可让您将现有存储桶的设置复制到新存储桶。如果您不想复制现有存储桶的设置,请跳到下一步。

    注意

    此选项:

    • 在 Amazon CLI 中不可用,仅在控制台中可用

    • 不可用于目录存储桶

    • 不会将存储桶策略从现有存储桶复制到新存储桶

    要复制现有存储桶的设置,请在从现有存储桶复制设置下,选择选择存储桶。将打开选择存储桶窗口。找到包含您要复制的设置的存储桶,然后选择选择存储桶选择存储桶窗口关闭,创建存储桶窗口重新打开。

    从现有存储桶复制设置下,您现在将看到所选存储桶的名称。您还将看到还原默认值选项,您可以使用该选项移除复制的存储桶设置。在创建存储桶页面上查看其余存储桶设置。您将看到它们现在与您选择的存储桶的设置相匹配。您可以跳到最后一步。

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

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

      默认情况下,ACL 处于禁用状态。Amazon S3 中的大多数现代使用案例不再需要使用 ACL。我们建议您将 ACL 保持为禁用状态,除非有必须单独控制每个对象的访问权限的特殊情况。有关更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。

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

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

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

    注意

    默认设置为强制存储桶拥有者。要应用默认设置并将 ACL 保持为禁用状态,只需要 s3:CreateBucket 权限。要启用 ACL,您必须具有 s3:PutBucketOwnershipControls 权限。

  10. 此存储桶的屏蔽公共访问权限设置中,请选择要应用于存储桶的屏蔽公共访问权限设置。

    默认情况下,启用所有四个“屏蔽公共访问权限”设置。我们建议您将所有设置保持为启用状态,除非您知道您需要为您的特定使用案例关闭其中一个或多个设置。有关屏蔽公共访问权限的更多信息,请参阅阻止对您的 Amazon S3 存储的公有访问

    注意

    要启用所有“屏蔽公共访问权限”设置,只需要 s3:CreateBucket 权限。要关闭任何“屏蔽公共访问权限”设置,您必须拥有 s3:PutBucketPublicAccessBlock 权限。

  11. (可选)在 Bucket Versioning(存储桶版本控制)下,您可以选择是否要在存储桶中保留对象的变体。有关版本控制的更多信息,请参阅使用 S3 版本控制保留对象的多个版本

    要在存储桶上禁用或启用版本控制,请选择 Disable(禁用)或 Enable(启用)。

  12. (可选)在 Tags(标签)下,您可以选择向存储桶添加标签。标签是用于对存储进行分类的键/值对。

    要添加存储桶标签,请输入 Key(键),并(可选)输入 Value(值),然后选择 Add Tag(添加标签)。

  13. 默认加密下,请选择编辑

  14. 要配置默认加密,请在加密类型下,选择以下选项之一:

    • Amazon S3 托管密钥(SSE-S3)

    • Amazon Key Management Service 密钥(SSE-KMS)

      重要

      如果您将 SSE-KMS 选项用于默认加密配置,则您将受到 Amazon KMS 的每秒请求数(RPS)限额限制。有关 Amazon KMS 限额以及如何请求增加限额的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的限额

    存储桶和新对象使用具有 Amazon S3 托管密钥的服务器端加密进行加密,作为加密配置的基本级别。有关默认加密的更多信息,请参阅为 Amazon S3 存储桶设置默认服务器端加密行为

    有关使用 Amazon S3 服务器端加密对数据进行加密的更多信息,请参阅使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)

  15. 如果选择了 Amazon Key Management Service 密钥(SSE-KMS),则执行以下操作:

    1. Amazon KMS 密钥下,通过以下方式之一指定您的 KMS 密钥:

      • 要从可用的 KMS 密钥列表中进行选择,请选择从您的 Amazon KMS keys 密钥中进行选择,并从可用密钥的列表中选择您的 KMS 密钥

        Amazon 托管式密钥 (aws/s3) 和您的客户自主管理型密钥都显示在此列表中。有关客户自主管理型密钥的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的客户密钥和 Amazon 密钥

      • 要输入 KMS 密钥 ARN,请选择输入 Amazon KMS key ARN,然后在显示的字段中输入您的 KMS 密钥 ARN。

      • 要在 Amazon KMS 控制台中创建新的客户自主管理型密钥,请选择创建 KMS 密钥

        有关创建 Amazon KMS key 的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建密钥

      重要

      您只能使用与存储桶所在相同的 Amazon Web Services 区域中可用的 KMS 密钥。Amazon S3 控制台仅列出与存储桶位于同一区域中的前 100 个 KMS 密钥。要使用未列出的 KMS 密钥,您必须输入 KMS 密钥 ARN。如果您希望使用其他账户拥有的 KMS 密钥,则必须首先有权使用该密钥,然后必须输入相应的 KMS 密钥 ARN。有关 KMS 密钥的跨账户权限的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的创建其他账户可以使用的 KMS 密钥。有关 SSE-KMS 的更多信息,请参阅使用 Amazon KMS (SSE-KMS) 指定服务器端加密

      在 Amazon S3 中使用 Amazon KMS key 进行服务器端加密时,您必须选择对称加密 KMS 密钥。Amazon S3 仅支持对称加密 KMS 密钥,而不支持非对称 KMS 密钥。有关更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的确定对称和非对称 KMS 密钥

      有关创建 Amazon KMS key 的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的创建密钥。有关将 Amazon KMS 与 Amazon S3 结合使用的更多信息,请参阅使用具有 Amazon KMS 密钥的服务器端加密(SSE-KMS)

    2. 将存储桶配置为使用 SSE-KMS 进行默认加密时,您还可以启用 S3 存储桶密钥。S3 存储桶密钥可通过减少从 Amazon S3 到 Amazon KMS 的请求流量,降低加密成本。有关更多信息,请参阅 使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本

      要使用 S3 存储桶密钥,请在 Bucket Key(存储桶密钥)下,选择 Enable(启用)。

  16. (可选)如果要启用 S3 对象锁定,请执行以下操作:

    1. 选择高级设置

      重要

      启用对象锁定还会启用存储桶的版本控制。启用后,必须配置对象锁定默认保留和法律保留设置,以保护新对象不被删除或覆盖。

    2. 如果要启用对象锁定,请选择 Enable(启用),阅读出现的警告,并予以确认。

    有关更多信息,请参阅 使用对象锁定以锁定对象

    注意

    要创建启用对象锁定的存储桶,您必须具有以下权限:s3:CreateBuckets3:PutBucketVersionings3:PutBucketObjectLockConfiguration

  17. 请选择创建存储桶

要在创建新存储桶时设置对象所有权,请使用带有 --object-ownership 参数的 create-bucket Amazon CLI 命令。

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

aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1 --object-ownership BucketOwnerEnforced
重要

如果您在使用 Amazon CLI 创建存储桶时未设置对象所有权,则默认设置将为 ObjectWriter(启用 ACL)。

下面的例子使用 Amazon SDK for Java 为新存储桶设置了强制存储桶拥有者设置:

// Build the ObjectOwnership for CreateBucket CreateBucketRequest createBucketRequest = CreateBucketRequest.builder() .bucket(bucketName) .objectOwnership(ObjectOwnership.BucketOwnerEnforced) .build() // Send the request to Amazon S3 s3client.createBucket(createBucketRequest);

要在创建新存储桶时使用 AWS::S3::Bucket Amazon CloudFormation 资源以设置对象所有权,请参阅《Amazon CloudFormation 用户指南》中的 AWS::S3::Bucket 中的 OwnershipControls

要为 S3 对象所有权应用强制存储桶拥有者设置,请使用 x-amz-object-ownership 请求标头设置为 BucketOwnerEnforcedCreateBucket API 操作。有关信息和示例,请参阅《Amazon Simple Storage Service API 参考》中的 CreateBucket

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

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

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