为现有存储桶设置对象所有权
您可以在现有 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 的操作、资源和条件键。
-
登录到 Amazon Web Services 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 或 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 授予其他用户访问该对象的权限。
-
-
选择保存。
要为现有存储桶应用 Object Ownership 设置,请使用带有 --ownership-controls 参数的 put-bucket-ownership-controls 命令。
下面的例子使用 Amazon CLI 为现有的存储桶应用了存储桶拥有者的强制设置:
aws s3api put-bucket-ownership-controls --bucketDOC-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。