将CloudFront从OAC改为S3网站端点后出现403错误排查
排查CloudFront切换到S3网站端点后的403错误
1. 调整S3访问权限配置
S3静态网站托管的权限逻辑和桶端点完全不同:
- 不需要通过存储桶策略给CloudFront授权,反而要检查公有访问设置:如果之前用OAC时开启了
Block all public access,需至少取消Block public access to buckets and objects granted by any access control lists (ACLs)和Block public access to buckets and objects granted by new public bucket policies。 - 给存储桶或具体对象添加桶ACL,授予
Everyone的Read权限——这是S3网站端点正常访问的必要条件,和OAC的私有桶授权逻辑完全相反。
2. 修正CloudFront源配置
- 确认源域名是S3静态网站托管的专属端点(格式如
bucket-name.s3-website-region.amazonaws.com),而非S3 REST端点(bucket-name.s3.amazonaws.com),填错会直接触发权限不匹配。 - 移除原有的**Origin Access Control (OAC)**配置:S3网站端点不支持OAC,若保留该配置,CloudFront会继续发送签名请求,而网站端点无法识别,直接返回403。
3. 检查CloudFront缓存行为设置
- 确保缓存行为允许
GET、HEAD方法,这是静态网站访问的必需方法。 - 调整Origin Request Policy:改用默认的
Managed-CORS-S3Origin或基础请求策略,避免原OAC配置的自定义签名头导致S3拒绝请求。
4. 验证对象路径与默认文档
- 确认S3根目录存在配置的默认文档(如
index.html),且CloudFront的默认根对象设置和S3网站的默认文档保持一致。 - 注意S3对象路径区分大小写,若请求路径与实际文件路径大小写不匹配,会返回403/404。
5. 核对区域一致性
确保CloudFront源配置的S3网站端点区域,与存储桶实际所在区域完全一致,区域不匹配会导致请求路由错误,触发403。
内容的提问来源于stack exchange,提问作者Kaguei Nakueka
相关产品推荐
相关产品推荐

