《安全静态网站入门》AWS教程创建S3BucketLogs失败
解决CloudFormation CustomResourceStack中S3BucketLogs创建失败的问题
以下是针对该错误的排查和修复步骤:
1. 确认日志桶命名唯一性
S3桶名称为全局唯一,CloudFormation尝试创建的S3BucketLogs对应的桶名可能已被占用:
- 查看CloudFormation事件详情,获取模板尝试创建的日志桶全名(通常会在基础名称后添加随机后缀或账户ID)
- 若命名冲突,修改模板中的日志桶名称参数,替换为未被使用的唯一名称。
2. 修正日志桶的权限策略
你当前将日志写入权限配置在了源桶(example.com),但日志存储的目标桶(即S3BucketLogs)才需要配置该权限:
- 若模板自动创建日志桶,确保模板包含允许日志服务写入的桶策略,示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::[你的日志桶名称]/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] } - 同时确保源桶的日志配置已正确指向该日志桶,且CloudFormation执行角色拥有源桶的
s3:PutBucketLogging权限。
3. 检查日志桶的公共访问设置
日志桶不需要公开访问,建议保持阻止所有公共访问为开启状态(AWS最佳实践):
- 查看模板中
S3BucketLogs的PublicAccessBlockConfiguration配置,确保设置为:
若模板中关闭了这些设置,可能触发权限校验失败。PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true
4. 验证CloudFormation执行角色权限
确保执行栈的IAM角色拥有足够权限创建和配置S3桶,需包含以下核心权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:PutBucketPolicy", "s3:PutBucketLogging", "s3:PutBucketPublicAccessBlock", "s3:PutBucketOwnershipControls" ], "Resource": "arn:aws:s3:::*" } ] }
5. 确认对象所有权配置
日志桶设置为桶所有者优先是合适的,但需通过桶策略的s3:x-amz-acl条件(如步骤2示例)确保日志服务写入的对象自动授予桶所有者完全控制权,避免所有权冲突。
内容的提问来源于stack exchange,提问作者Rozgonyi
相关产品推荐
相关产品推荐

