AWS S3桶Referer策略始终返回403问题求助
排查AWS S3桶Referer策略导致的403问题
我来帮你一步步排查这个403的问题,咱们从常见的坑开始梳理:
1. 先确认浏览器是否真的发送了Referer头
这是最容易忽略的关键点!很多浏览器隐私设置、插件或者页面场景会阻止发送Referer:
- 打开浏览器开发者工具(按F12),切换到Network面板
- 点击链接触发PNG请求,找到对应的请求项,查看Request Headers里的
Referer字段- 如果没有这个字段,说明浏览器没发送Referer,策略自然会拒绝请求
- 如果有这个字段,确认值是否匹配你策略里的规则(比如如果是
https://blue.mywebsite.io/test.html,你的/*规则是可以匹配的)
2. 检查S3桶的「阻止公共访问」设置细节
你提到已经禁用了这个功能,但要确认四个子选项全部关闭:
- 进入S3桶的「权限」标签页,找到「阻止公共访问(桶设置)」
- 确保以下四个选项都是关闭状态:
- 阻止所有公共访问
- 阻止新的公共桶策略
- 阻止公共和跨账户访问的桶策略
- 限制公共桶策略
如果后两个选项处于开启状态,你的桶策略会被强制失效,哪怕语法完全正确也没用。
3. 验证桶策略的语法和匹配规则
虽然你的策略看起来没问题,但可以用AWS自带工具做个验证:
- 在桶策略编辑页面,点击「验证策略」按钮,检查是否存在语法错误
- 另外,注意
StringLike是区分路径大小写的,不过你已经覆盖了http/https和www的情况,这部分应该没问题
如果想先快速测试策略是否生效,可以临时把Referer规则改得宽松一点:
"StringLike": { "aws:Referer": "*blue.mywebsite.io*" }
测试能访问后,再逐步缩小到你需要的精确规则。
4. 用curl模拟请求排除浏览器干扰
用命令行直接模拟带Referer的请求,排除浏览器端的影响:
curl -v -H "Referer: https://blue.mywebsite.io/" https://mywebsiteso.s3.ap-south-1.amazonaws.com/403.PNG
- 如果返回200,说明策略本身是有效的,问题出在浏览器端的Referer发送逻辑
- 如果还是403,说明策略或者公共访问设置存在问题
5. 清除缓存或用无痕模式测试
浏览器可能缓存了之前的403响应,或者隐私模式下插件不会干扰Referer发送,试试用无痕窗口访问,看是否能正常加载资源。
其他可能的小细节
- 对象ACL:虽然桶策略优先级高于对象ACL,但如果对象的ACL设置了完全私有,偶尔会出现冲突?不过一般桶策略允许访问的话就没问题,可以临时给对象加个「公共读」ACL测试(测试完记得改回私有)
- 区域匹配:确认资源URL里的
ap-south-1和桶实际所在区域一致,你的URL看起来是匹配的,这个大概率不是问题
内容的提问来源于stack exchange,提问作者Divyang Desai
相关产品推荐
相关产品推荐

