CloudFormation 不断为我的 S3 存储桶模板的部署抛出 InvalidBucketAclWithBlockPublicAccessError

hps*_*smn 3 amazon-s3 amazon-web-services aws-cloudformation

目标

创建一个 S3 存储桶,我的服务将向其中写入图像,并且任何人都可以从中读取图像,因为我将在我的服务的网页上显示该图像。

问题

因此,我有一个非常通用的(我认为)S3 存储桶模板,它应该允许任何人读取其中的对象:

 SomeS3Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      BucketName: "some-bucket-name"
      AccessControl: PublicRead
      OwnershipControls:
        Rules:
          - ObjectOwnership: BucketOwnerPreferred # without it it complains about ownership being set to BucketOwnerEnforced
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: "AES256"
            BucketKeyEnabled: false
      CorsConfiguration:
        CorsRules:
          - AllowedHeaders:
              - "*"
            AllowedMethods:
              - "PUT"
              - "POST"
              - "DELETE"
              - "GET"
            AllowedOrigins:
              - "*"
Run Code Online (Sandbox Code Playgroud)

尝试部署此模板总是会导致如下错误:Bucket cannot have public ACLs set with BlockPublicAccess enabled (Service: Amazon S3; Status Code: 400; Error Code: InvalidBucketAclWithBlockPublicAccessError)

尝试从 AWS 控制台并使用aws-cli/2.6.4 Python/3.9.11 Linux/5.10.16.3-microsoft-standard-WSL2 exe/x86_64.ubuntu.20 prompt/off.

非常感谢对此的任何帮助。

尝试添加:

PublicAccessBlockConfiguration:
        BlockPublicAcls: false
        BlockPublicPolicy: false
        IgnorePublicAcls: false
        RestrictPublicBuckets: false
Run Code Online (Sandbox Code Playgroud)

但这也没有帮助。

还尝试设置ObjectOwnershipObjectWriter,检查BlockPublicAccess我的 AWS 账户级别的配置。没有任何迹象表明问题的根本原因。

the*_*uff 5

Amazon 最近开始对新存储桶的创建方式进行更改,请参阅https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html

对于此更新后创建的新存储桶,将启用所有 S3 阻止公共访问设置,并禁用 S3 访问控制列表 (ACL)。这些默认值是保护 Amazon S3 中数据的推荐最佳实践。您可以在创建存储桶后调整这些设置。

您需要添加PublicAccessBlockConfiguration, 以及设置ObjectOwnershipObjectWriter- 您已得到控制 - 并且同时确保您AccessControl最初没有该设置。仅当存储桶创建后AccessControl才能修改。