通过S3控制台上传至深度归档时遇options request denied upload错误如何排查修复
我之前帮团队排查过好几起S3控制台上传时的OPTIONS请求被拒问题,结合你用Safari上传到深度归档存储类的场景,给你整理了一套逐步排查的方案:
排查与修复方案
1. 先检查S3桶的CORS配置(最常见原因)
浏览器发起的OPTIONS预检请求是跨域上传的关键环节,S3桶的CORS规则如果不匹配,直接会导致请求被拒。
- 登录S3控制台,找到目标桶,进入「权限」标签页的「跨域资源共享(CORS)」
- 确保你的CORS规则包含以下核心配置(可以根据实际环境调整,但至少覆盖这些项):
[ { "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"], "AllowedOrigins": ["https://s3.console.aws.amazon.com"], "ExposeHeaders": ["ETag"] } ]
注意:如果你的S3控制台是区域专属域名(比如
https://s3-us-east-1.console.aws.amazon.com),要把AllowedOrigins改成对应的域名;另外,浏览器的OPTIONS预检请求会被AWS自动处理,但确保AllowedMethods覆盖你实际用到的上传操作(PUT/POST)。
2. 验证IAM身份的权限配置
上传到深度归档存储类需要额外的权限匹配,别忽略这一点:
- 检查你当前使用的IAM用户/控制台角色的权限策略,确认包含针对
DEEP_ARCHIVE存储类的上传权限:
{ "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::你的桶名/*", "Condition": { "StringEquals": { "s3:x-amz-storage-class": "DEEP_ARCHIVE" } } }
如果你不想限制存储类,也可以直接允许
s3:PutObject到目标桶(去掉Condition部分),避免因为存储类条件不匹配导致拒绝。另外,别忘了确保IAM身份有s3:ListBucket权限,控制台需要这个权限来确认上传结果。
3. 调整Safari的安全设置(针对性排查)
Safari的跨域安全策略比其他浏览器更严格,可能会拦截合法的预检请求:
- 打开Safari偏好设置 → 「隐私」,临时取消勾选「阻止跨站跟踪」,重启浏览器后再尝试上传
- 或者开启开发菜单(偏好设置→高级→勾选「显示开发菜单」),然后在开发菜单中选择「禁用跨域限制」(仅用于测试,不要长期开启),如果测试上传成功,说明是Safari的跨域策略导致的问题,需要回到CORS配置确保规则完全正确。
4. 重置控制台会话权限
有时候AWS控制台的临时会话会出现权限异常,试试这个简单的方法:
- 退出AWS控制台,清除浏览器中AWS相关的Cookie和缓存,然后重新登录账号,再尝试上传操作
5. 检查桶的其他限制规则
- 确认桶的「阻止公共访问」设置没有过度限制(正常来说,控制台上传依赖IAM权限,阻止公共访问不影响内部操作,但如果有特殊配置可能会冲突)
- 检查桶策略是否存在拒绝OPTIONS请求的规则,比如有些桶策略会限制特定IP或Origin,这时候需要调整策略允许S3控制台的Origin和OPTIONS方法
内容的提问来源于stack exchange,提问作者MonkeyBonkey
相关产品推荐
相关产品推荐

