使用Chrome打开AWS S3存储桶对象URL报AccessDenied如何修复
S3访问PDF返回AccessDenied错误修复方案
页面提示XML无样式信息只是Chrome直接展示S3错误响应的默认表现,核心问题是当前请求没有目标PDF的访问权限,按以下优先级排查即可解决:
- 核对公有访问配置
若需要公网直接访问该PDF,先确认存储桶层级的阻止所有公有访问开关没有全部开启,再配置对应权限:要么给单个PDF对象设置public-read的ACL,要么在存储桶策略中添加允许匿名用户执行s3:GetObject操作的规则,规则中的资源路径要精确匹配到该PDF的对象键。如果存储桶开了默认加密,要确认加密配置没有拦截公有读请求。 - 排查对象所有权与权限继承问题
如果PDF是通过其他IAM账号、跨角色上传的,要确认上传时没有强制设置私有对象ACL:S3默认对象权限归上传身份所有,跨账号上传的对象如果没做显式授权,哪怕是存储桶所有者也可能没有读取权限,这种情况直接用高权限账号重新给对象授予读权限,或者覆盖上传一次文件重置权限即可。 - 校验访问规则与路径正确性
首先确认访问的URL和对象键完全匹配,对象键包含中文、空格、特殊符号时要确认URL经过正确编码;如果存储桶用了自定义KMS密钥加密,要确认请求方有对应KMS密钥的解密权限;如果配置了IP白名单、Referer防盗链、CloudFront源站访问控制,要确认当前客户端的IP、请求头符合规则要求,被规则拦截时也会直接返回AccessDenied。 - 预签名URL场景的专项检查
如果是通过预签名URL访问,先确认URL没有超过有效期,生成预签名URL所用的IAM身份本身持有该对象的s3:GetObject权限,且签名计算时填写的区域、对象键和文件实际存储信息完全一致,任意一项不匹配都会触发权限拒绝。
测试时可以先用curl发起请求验证,返回状态码200且
Content-Type为application/pdf时,再用浏览器打开就能正常预览PDF,不会再弹出XML错误页。
内容的提问来源于stack exchange,提问作者IU Kottahchchi
相关产品推荐
相关产品推荐

