使用S3+CloudFront配置重定向遇“Access Denied”错误求助
问题排查与解决方案
1. 修正CloudFront与S3的权限配置
因为你禁用了S3 ACL,必须确保CloudFront通过Origin Access Control (OAC) 访问S3桶,同时桶策略要正确授权:
- 先确认CloudFront分发已关联OAC,且OAC的配置中“签名版本”选
v4,“访问类型”选“签名请求(适合无ACL的桶)”。 - 替换并应用以下桶策略(需替换
YOUR_ACCOUNT_ID和YOUR_CLOUDFRONT_DIST_ID):
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "AllowCloudFrontAccess", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::example.com/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::YOUR_ACCOUNT_ID:distribution/YOUR_CLOUDFRONT_DIST_ID" } } } ] }
注意:Resource必须包含/*,否则CloudFront无法访问桶内的重定向相关对象。
2. 确认S3静态网站托管配置
- 确保S3桶已开启静态网站托管,如果是全站重定向,选择“重定向请求到另一个主机名”,填写目标域名,并将“协议”设为
HTTPS(避免HTTP/HTTPS混合问题)。 - CloudFront的源域名必须使用S3静态网站托管的域名(格式如
example.com.s3-website-<region>.amazonaws.com),而非S3 REST API域名(example.com.s3.amazonaws.com)——后者不会触发S3的重定向规则。
3. 调整CloudFront分发的关键配置
- 备用域名(CNAME):确认
example.com和www.example.com已添加,且SSL证书包含这两个域名的SAN条目(证书必须覆盖所有备用域名)。 - 行为配置:
- 路径模式设为
/*,覆盖所有请求路径; - 源请求策略选择
Managed-CORS-S3Origin或自定义策略,确保包含Host头(S3静态网站依赖该头识别桶); - 查看器协议策略设为
Redirect HTTP to HTTPS,强制所有请求使用HTTPS; - 缓存策略避免缓存错误响应,可临时将错误页面TTL设为0,排查时避免旧缓存干扰。
- 路径模式设为
4. 定位Access Denied的具体原因
- 开启CloudFront实时日志或S3访问日志,查看请求的
Host头、请求路径、以及权限拒绝的具体细节。常见问题包括:- 桶策略的
Resource范围不匹配; - OAC未正确关联到CloudFront分发;
- S3静态网站托管未启用,导致重定向规则未生效。
- 桶策略的
内容的提问来源于stack exchange,提问作者Bmurphy
相关产品推荐
相关产品推荐

