配置S3 Bucket策略授予文件夹公网访问权限失败排查求助
我创建了一个用于存放待售数字产品(当前为数字艺术作品)的S3 Bucket,Bucket下有两个文件夹,分别存储带水印和无水印的图片。之前靠ACLs实现文件夹权限控制,现在想用Bucket Policy限制部分文件夹访问,同时给指定文件夹开放公网访问权限。已经禁用ACLs、开启公网访问权限,也给目标文件夹配置了如下策略,但策略始终不生效,请问我遗漏了什么配置?
当前配置的Bucket Policy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::-----/-----/*" } ] }
相关配置截图说明
- S3 阻止公网访问配置截图
- S3 对象所有权编辑配置截图
排查及修复建议
资源ARN正确性检查
务必把Resource字段里的占位符-----替换成真实的Bucket名称和目标文件夹前缀,比如Bucket名为my-art-store、目标文件夹是watermarked-arts,正确ARN应为arn:aws:s3:::my-art-store/watermarked-arts/*。S3没有真实文件夹概念,前缀路径必须完全匹配才能生效。阻止公网访问(Block Public Access)全项验证
确认以下四项设置全部为关闭状态:- 阻止新的公网Bucket策略
- 阻止所有公网和跨账户访问(无论哪种权限方式)
- 阻止新的公网ACLs
- 忽略公网ACLs
只要其中一项开启,就会直接覆盖Bucket Policy的公网访问许可。
对象所有权设置确认
既然已禁用ACLs,需确保对象所有权设置为Bucket所有者强制控制,这样所有上传的对象会自动归Bucket所有者所有,避免因对象归属不一致导致策略权限不生效。策略应用层级验证
Bucket Policy必须直接绑定到整个Bucket上,而不是所谓的"文件夹"——S3的文件夹是前缀模拟的,策略仅在Bucket层级配置才会生效。权限冲突排查
检查是否存在其他生效的Bucket Policy、IAM用户/角色策略,或是组织级的SCP(服务控制策略),这些策略如果包含Deny语句,会优先覆盖当前的Allow规则。可以用S3的访问分析器检测权限冲突点。测试方式优化
测试时使用浏览器隐身窗口(避免缓存旧权限状态),或是用AWS CLI执行匿名下载命令:aws s3 cp s3://<bucket-name>/<folder-path>/test-image.jpg ./ --no-sign-request,根据返回的错误信息定位问题。
内容的提问来源于stack exchange,提问作者eric0012

