为现有存储桶设置对象所有权
您可以在现有 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 操作所需的权限。
-
登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在 Buckets(存储桶)列表中,请选择要将 S3 对象所有权设置应用到的存储桶的名称。
-
选择 Permissions(权限)选项卡。
-
在 Object Ownership(对象所有权)下方,请选择 Edit(编辑)。
-
在 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 授予其他用户访问该对象的权限。
-
-
请选择保存。
要为现有存储桶应用 Object Ownership 设置,请使用带有 --ownership-controls
参数的 put-bucket-ownership-controls
命令。所有权的有效值为 BucketOwnerEnforced
、BucketOwnerPreferred
或 ObjectWriter
。
下面的例子使用 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。