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

标签 amazon-web-services amazon-s3 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:
              - "*"

尝试部署此模板始终会导致如下错误:存储桶无法在启用 BlockPublicAccess 的情况下设置公共(public) ACL(服务:Amazon S3;状态代码:400;错误代码:InvalidBucketAclWithBlockPublicAccessError)

尝试从AWS控制台并使用aws-cli/2.6.4 Python/3.9.11 Linux/5.10.16.3-microsoft-standard-WSL2 exe/x86_64.ubuntu.20提示/关闭创建堆栈.

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

尝试添加:

PublicAccessBlockConfiguration:
        BlockPublicAcls: false
        BlockPublicPolicy: false
        IgnorePublicAcls: false
        RestrictPublicBuckets: false

但这也没有帮助。

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

最佳答案

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

For new buckets created after this update, all S3 Block Public Access settings will be enabled, and S3 access control lists (ACLs) will be disabled. These defaults are the recommended best practices for securing data in Amazon S3. You can adjust these settings after creating your bucket.

您需要添加 PublicAccessBlockConfiguration,并将 ObjectOwnership 设置为 ObjectWriter - 您已经在控制之下 - 并且在同时确保您最初没有设置AccessControlAccessControl 只能在创建存储桶之后进行修改。

关于amazon-web-services - CloudFormation 不断为我的 S3 存储桶模板的部署抛出 InvalidBucketAclWithBlockPublicAccessError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76026251/

相关文章:

amazon-web-services - AWS Cloudwatch 指标警报在第一次后未触发

mysql - AWS数据管道-"Full copy of rds mysql table to s3"参数中没有连接字符串?

amazon-s3 - 使用 s3 连接和 s3 Hook 在 Airflow 上创建 boto3 s3 客户端

amazon-web-services - AWS Codebuild - 执行命令时出错 : python -m pip install --upgrade --force pip. 原因:退出状态 1

amazon-web-services - AWS CloudFormation 配置... UserData 与 Ansible 之类的?

amazon-web-services - 我的Amazon S3存储桶中出现了很多文件

ios - 等待 AWSS3TransferManagerDownloadRequest 完成(iOS、Objective-C)

javascript - Meteor:显示来自 aws s3 的图像

amazon-web-services - 使用 Cloudformation 创建触发器来启动 lambda 函数,并验证当我在 S3 存储桶中上传文件时哪个区域可用

amazon-web-services - 如果所有架构组件都是 AWS 特定产品,那么选择 Terraform 而不是 AWS CloudFormation 的正当理由是什么?