

# 问题排查
<a name="object-ownership-error-responses"></a>

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

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

## AccessControlListNotSupported
<a name="object-ownership-error-responses-acl-not-supported"></a>

为对象所有权应用强制存储桶拥有者设置之后，将禁用 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 --key object-key-name --body doc-example-body --acl public-read
```

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

调用 PutObject 操作时发生错误（AccessControlListNotSupported）：存储桶不允许 ACL

## InvalidBucketAclWithObjectOwnership
<a name="object-ownership-error-responses-invalid-acl"></a>

如果您想应用强制存储桶拥有者设置来禁用 ACL，则存储桶 ACL 必须仅向存储桶拥有者提供完全控制权。您的存储桶 ACL 无法访问外部 AWS 账户 或任何其他团体。例如，如果您的 `CreateBucket` 请求设置强制存储桶拥有者并指定一个存储桶 ACL，用于提供对外部 AWS 账户的访问权限，您的请求会失败并显示 `400` 错误，并且返回 InvalidBucketAclWithObjectOwnership 错误代码。同样，如果您的 `PutBucketOwnershipControls` 请求对于具有存储桶 ACL（可向其他人授予权限）的存储桶设置强制存储桶拥有者，请求将失败。

**Example ：授予存储桶 ACL 公有读取访问权限。**  
例如，如果现有存储桶 ACL 授予公共读取访问权限，则在将这些 ACL 权限迁移到存储桶策略并将存储桶 ACL 重置为默认私有 ACL 之前，您无法对于对象所有权应用强制存储桶拥有者设置。有关更多信息，请参阅 [禁用 ACL 的先决条件](object-ownership-migrating-acls-prerequisites.md)。  
此示例存储桶 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