CloudFront分发下S3新增页面返回403错误的解决咨询
解决CloudFront后端S3静态站新上传文件403错误的方案
1. 排查存储桶权限与文件ACL问题
你的存储桶策略仅允许CloudFront服务主体读取和写入对象,但新上传文件的默认ACL可能限制了CloudFront的访问:
- 上传新文件时,确保文件ACL设置为继承存储桶权限,或直接为CloudFront对应的访问身份(OAI/OAC)分配读取权限。
- 控制台上传时,在「权限」选项中勾选「授予对CloudFront OAC的访问权限」(若使用Origin Access Control),避免文件默认设为私有。
2. 清理CloudFront缓存
CloudFront可能缓存了旧的403响应,或新文件未被及时拉取:
- 针对新上传的HTML文件路径手动触发缓存失效操作。
- 检查缓存策略的TTL设置,确保新内容能被快速更新。
3. 修正存储桶策略的不合理配置
当前策略存在两处优化点:
- 将策略版本从
2008-10-17升级到2012-10-17,避免旧版本的IAM兼容性问题。 - 移除不必要的
s3:PutObject权限:CloudFront不会执行上传操作,该权限应分配给你的上传用户/角色,而非CloudFront服务主体。若使用OAC,策略应指定OAC的ARN作为Principal,示例如下:
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "AllowCloudFrontOACAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Control Exxxxxx" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::a-test-upload/*" } ] }
4. 检查S3静态站托管配置
- 确认新上传的HTML文件名匹配存储桶设置的默认索引文档(比如
index.html),非默认文件名需直接访问完整路径。 - 验证存储桶静态网站托管已开启,且CloudFront源站绑定的是正确的网站端点(而非REST API端点)。
5. 确保上传身份的权限
若通过IAM用户/角色上传文件,需为该身份分配s3:PutObject权限,示例IAM策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::a-test-upload/*" } ] }
内容的提问来源于stack exchange,提问作者Pavel Husakouski
相关产品推荐
相关产品推荐

