S3 对象所有权:强制执行存储桶所有者 - 文档错误?

Sam*_*Sam 5 acl amazon-s3 amazon-web-services aws-cloudformation

我最近遇到了一个“错误”,即使有S3FullAccess,我仍然会得到

An error occurred (403) when calling the HeadObject operation: Forbidden
Run Code Online (Sandbox Code Playgroud)

跑步时aws s3api head-object --bucket cool-bucket --key my/key/to/file.png。

经过一番研究,结果发现该文件my/key/to/file.png是匿名上传的,因此我(经过身份验证的用户)不是该对象的合法所有者,因此拒绝了我的 HEAD 请求。

解决方案似乎是使用 ACL 或将“对象所有权”更改为“禁用 ACL(强制执行存储桶所有者)”。

AWS控制台设置S3存储桶的对象所有权

这确实是解决方案,因此我尝试更改我的 CloudFormation 模板以将对象所有权设置为“强制执行存储桶所有者”,但文档是谎言。

事实上,文档只指定了这一点Allowed values: ObjectWriter | BucketOwnerPreferred,但是当运行aws s3api get-bucket-ownership-controls --bucket bucketname到我手动调整的存储桶上时,我得到了以下 JSON:

An error occurred (403) when calling the HeadObject operation: Forbidden
Run Code Online (Sandbox Code Playgroud)

清楚地表明这BucketOwnerEnforced是 CloudFormation 属性的有效且允许的值OwnershipControls.Rules.[].ObjectOwnership。在文档的其他地方,我没有看到允许我将对象所有权设置为“强制执行存储桶所有者”的属性,从而禁用 ACL。

为什么没有记录下来?我认为 CloudFormation 文档是自动生成的,并且可能不完整/过时。

Sam*_*Sam 10

该属性有一个秘密允许的值,OwnershipControls.Rules.[].ObjectOwnership称为BucketOwnerEnforced。

它可以这样使用:

  MyCoolBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: MyCoolBucket
      OwnershipControls:
        Rules:
          - ObjectOwnership: BucketOwnerEnforced
Run Code Online (Sandbox Code Playgroud)

我于 2021 年 12 月 2 日测试并部署了此模板,CloudFormation 没有抱怨它不是“允许的值”。

  • 我不会称其为“秘密”。它只是看起来文档尚未更新以反映全新的选项(昨天引入)。 (2认同)