故障排除
在应用 S3 对象所有权的强制存储桶拥有者设置时,访问控制列表(ACL)将被禁用,作为存储桶拥有者的您将自动拥有存储桶中的所有对象。ACL 不再影响存储桶中对象的权限。您可使用策略授予权限。所有 S3 PUT
请求都必须指定 bucket-owner-full-control
标准 ACL 或不指定 ACL,否则这些请求将失败。有关更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。。
如果指定了无效的 ACL 或存储桶 ACL 权限授予 AWS 账户 外部的访问权限,您可能会看到以下错误响应。
AccessControlListNotSupported
为对象所有权应用强制存储桶拥有者设置之后,将禁用 ACL。设置 ACL 或更新 ACL 的请求失败,并显示 400
错误,并返回 AccessControlListNotSupported
错误代码。仍然支持读取 ACL 的请求。读取 ACL 的请求始终返回一个响应,显示对存储桶拥有者的完全控制权。在 PUT
操作中,您必须指定存储桶拥有者完全控制 ACL 或不指定 ACL。否则,您的 PUT
操作将失败。
以下示例 put-object
AWS CLI 命令包括 public-read
标准 ACL。
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keyobject-key-name
--bodydoc-example-body
--acl public-read
如果存储桶使用强制存储桶拥有者设置来禁用 ACL,则此操作将失败,上传者会收到以下错误消息:
调用 PutObject 操作时发生错误(AccessControlListNotSupported):存储桶不允许 ACL
InvalidBucketAclWithObjectOwnership
如果您想应用强制存储桶拥有者设置来禁用 ACL,则存储桶 ACL 必须仅向存储桶拥有者提供完全控制权。您的存储桶 ACL 无法访问外部 AWS 账户 或任何其他团体。例如,如果您的 CreateBucket
请求设置强制存储桶拥有者并指定一个存储桶 ACL,用于提供对外部 AWS 账户的访问权限,您的请求会失败并显示 400
错误,并且返回 InvalidBucketAclWithObjectOwnership
错误代码。同样,如果您的 PutBucketOwnershipControls
请求对于具有存储桶 ACL(可向其他人授予权限)的存储桶设置强制存储桶拥有者,请求将失败。
例 :授予存储桶 ACL 公有读取访问权限。
例如,如果现有存储桶 ACL 授予公共读取访问权限,则在将这些 ACL 权限迁移到存储桶策略并将存储桶 ACL 重置为默认私有 ACL 之前,您无法对于对象所有权应用强制存储桶拥有者设置。有关更多信息,请参阅 禁用 ACL 的先决条件。
此示例存储桶 ACL 授予公共读取访问权限:
{ "Owner": { "ID": "
852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
" }, "Grants": [ { "Grantee": { "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" } ] }
以下示例 put-bucket-ownership-controls
AWS CLI 命令对于对象所有权应用强制存储桶拥有者设置:
aws s3api put-bucket-ownership-controls --bucket
amzn-s3-demo-bucket
--ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]
由于存储桶 ACL 授予公共读取访问权限,因此请求失败并返回以下错误代码:
调用 PutBucketOwnershipControls 操作时发生错误(InvalidBucketAclWithObjectOwnership):存储桶不能含有带有 ObjectOwnership's BucketOwnerEnforced 设置的 ACL