在CloudFront和S3上部署Gatsby多语言站点出现AccessDenied错误如何解决
CloudFront访问S3静态托管站点AccessDenied问题修复方案
1. 最高频错误:源站类型配置错误
你当前S3已经开启静态网站托管模式,但是CloudFront配置源站时大概率选择了控制台默认下拉的S3 REST API端点(格式为<bucket-name>.s3.<region>.amazonaws.com),该端点不支持静态托管的默认索引映射、重定向规则等特性,哪怕文件全公开也会出现AccessDenied错误。
- 修复方法:手动填入S3静态托管对外提供的访问域名
our-site.s3-website.eu-central-1.amazonaws.com作为源站地址,源站协议选择HTTP即可(S3静态托管仅支持HTTP作为源站协议)。
2. 权限配置验证
你已经将存储桶所有文件设为公开权限,源站配置正确后无需额外权限配置。如果后续需要取消文件公开配置,可通过以下方式配置权限:
- 配置CloudFront源站访问控制(OAC)
- 在S3存储桶策略中添加授权,允许CloudFront服务主体读取存储桶内所有资源
3. 子路径索引映射配置
Gatsby生成的多语言站点结构为每个语言路径下对应index.html文件(如/en/对应/en/index.html):
- 源站配置为S3静态托管端点时,S3会自动将末尾带
/的路径请求映射到对应目录下的index.html,无需额外配置 - 若后续使用S3 REST API作为源站,需要额外配置CloudFront函数,在viewer request阶段自动为路径末尾带
/的请求追加index.html
4. 配置生效验证
修改完CloudFront配置后需要等待5-10分钟让配置全球生效,同时建议触发一次缓存失效,清除之前的错误响应缓存后再测试访问。
内容的提问来源于stack exchange,提问作者Luca Rasconi
相关产品推荐
相关产品推荐

