AWS CloudFront图片无法公开访问,请求排查配置问题
问题描述
我有一个私有S3存储桶,配置如下:
存储桶策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EXXXXXXXXXXXXN" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::XXX-XXXXXXX-documents/*" } ] }
CORS配置
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "PUT", "POST" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]
CloudFront源配置

通过浏览器访问图片链接时收到错误:
This XML file does not appear to have any style information associated with it. The document tree is shown below. <Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>BY11XVSCM74Q27NJ</RequestId> <HostId>J7+//zcA0p86d5atEkTcE/j0u7amfjVSB431p1mKRIEPvVVEM8uDP+mRZW1cP/Zj3C0nhEtw2gk=</HostId> </Error>
请问哪里配置出错了?
排查方案
核对CloudFront源的OAI关联
桶策略已授权指定OAI,需确认CloudFront源配置中确实启用了该OAI:- 检查源配置截图,确认选择了「Origin Access Identity」(或新版「Origin Access Control」),且选中的OAI ARN与桶策略中的
arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EXXXXXXXXXXXXN完全一致。 - 若源配置未使用OAI/OAC,直接允许用户访问S3,私有桶会直接拒绝请求。
- 检查源配置截图,确认选择了「Origin Access Identity」(或新版「Origin Access Control」),且选中的OAI ARN与桶策略中的
验证桶策略的Resource路径
桶策略中Resource为arn:aws:s3:::XXX-XXXXXXX-documents/*,需确认:- 访问的图片对象确实属于该桶,且桶名拼写完全正确(大小写、字符无错误)。该路径已覆盖桶内所有对象,若访问根目录文件无需调整。
检查S3对象权限冲突
即使桶策略授权了OAI,若对象自身ACL设置了拒绝该OAI的规则,也会触发报错。可查看对象权限面板,确认无冲突的拒绝策略。清理CloudFront缓存并检查行为配置
- 手动触发CloudFront缓存失效(Invalidation),避免旧错误响应被缓存。
- 检查CloudFront行为配置,确认路径模式匹配图片访问路径,且允许
GET方法(图片访问为GET请求)。
确认S3 Block Public Access设置
进入S3桶权限页面,查看「Block Public Access」选项。OAI作为AWS服务主体通常不受影响,但需确认未开启会完全阻断服务访问的极端配置(如「Block all public access」且无例外)。核对CloudFront源的S3域名
源配置中的S3域名必须准确,例如XXX-XXXXXXX-documents.s3.amazonaws.com或区域专属域名(如XXX-XXXXXXX-documents.s3.us-east-1.amazonaws.com),域名错误会导致请求发送至无关桶,触发权限拒绝。
内容的提问来源于stack exchange,提问作者CrazyCoder
相关产品推荐
相关产品推荐

