Goal
创建一个 S3 存储桶,我的服务将向其中写入图像,并且任何人都可以从中读取图像,因为我将在我的服务的网页上显示该图像。
Problem
因此,我有一个非常通用的(我认为)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:
- "*"
尝试部署此模板总是会导致如下错误: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
但这也没有帮助。
也尝试过设置ObjectOwnership
to ObjectWriter
,检查了BlockPublicAccess
我的 AWS 账户级别的配置。没有任何迹象表明我知道问题的根本原因。
亚马逊最近开始对新存储桶的创建方式进行更改,请参阅https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html
对于此更新后创建的新存储桶,将启用所有 S3 阻止公共访问设置,并禁用 S3 访问控制列表 (ACL)。这些默认值是保护 Amazon S3 中数据的推荐最佳实践。您可以在创建存储桶后调整这些设置。
您需要添加PublicAccessBlockConfiguration
,以及设置ObjectOwnership
to ObjectWriter
- 你已经得到控制 - 同时确保你没有AccessControl
初始设置。AccessControl
只能修改after存储桶已创建。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)