问题排查 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

问题排查

当您为S3对象所有权应用桶所有者强制设置时,访问控制列表(ACL)将被禁用,作为桶拥有者的您将自动拥有桶中的所有对象。ACL 不再影响桶中对象的权限。您可使用策略授予权限。所有 S3 PUT 请求都必须指定 bucket-owner-full-control 标准 ACL 或不指定 ACL,否则这些请求将失败。有关更多信息,请参阅为您的桶控制对象所有权和禁用 ACL。

如果指定了无效的 ACL 或存储桶 ACL 权限授予 Amazon Web Services 账户 外部的访问权限,您可能会看到以下错误响应。

AccessControlListNotSupported

为对象所有权应用强制桶拥有者设置之后,将禁用 ACL。设置 ACL 或更新 ACL 的请求失败,并显示 400 错误,并返回 AccessControlListNotSupported 错误代码。仍然支持读取 ACL 的请求。读取 ACL 的请求始终返回一个响应,显示对桶拥有者的完全控制权。在 PUT 操作中,您必须指定桶拥有者完全控制 ACL 或不指定 ACL。否则,您的 PUT 操作将失败。

以下示例 put-object Amazon CLI 命令包括 public-read 标准 ACL。

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key object-key-name --body doc-example-body --acl public-read

如果桶使用强制桶拥有者设置来禁用 ACL,则此操作将失败,上传者会收到以下错误消息:

调用 PutObject 操作时发生错误 (AccessControlListNotSupported):存储桶不允许 ACL

InvalidBucketAclWithObjectOwnership

如果您想应用强制桶拥有者设置来禁用 ACL,则桶 ACL 必须仅向桶拥有者提供完全控制权。您的桶 ACL 无法访问外部 Amazon Web Services 账户 或任何其他团体。例如,如果您的 CreateBucket 请求设置“强制桶拥有者”并指定一个桶 ACL,用于提供对外部 Amazon Web Services 账户的访问权限,您的请求会失败并显示 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 Amazon CLI 命令对于对象所有权应用“强制桶拥有者”设置:

aws s3api put-bucket-ownership-controls --bucket DOC-EXAMPLE-BUCKET --ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]

由于桶 ACL 授予公共读取访问权限,因此请求失败并返回以下错误代码:

调用 PutBucketOwnershipControls 操作时发生错误(InvalidBucketAclWithObjectOwnership):桶不能含有带有 ObjectOwnership's BucketOwnerEnforced 设置的 ACL