通过CloudFront访问KMS加密S3静态托管桶时出现KMS.UnrecognizedClientException
S3+CloudFront访问出现403 Forbidden的原因及解决建议
常见原因与对应解决方法
1. S3存储桶权限配置问题
- CloudFront源访问身份(OAI)未获授权:
若使用OAI限制S3访问,必须在S3桶策略中为该OAI添加读取对象的权限。示例策略如下,替换YOUR_OAI_ID和YOUR_BUCKET_NAME为实际值:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity YOUR_OAI_ID" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*" } ] } - 桶ACL或公共访问限制冲突:
使用OAI时,直接在S3 ACL中给OAI分配读取权限即可;若需开放公共访问(不推荐生产环境),需先关闭桶的“阻止公共访问”设置,再给Everyone配置对象读取权限。 - 公共访问被强制阻止:
进入S3桶的“权限”页面,检查账户级和桶级的“阻止公共访问”开关,根据访问模式调整——使用OAI无需开启公共访问,需直接公开则关闭对应阻止项。
2. CloudFront分发配置错误
- 源设置不正确:
确认CloudFront的源域名是正确的S3桶域名(如your-bucket.s3.amazonaws.com),且在源配置中启用“源访问控制”并关联正确的OAI;未使用OAI时,需确保S3允许CloudFront访问。 - 缓存行为或策略问题:
检查缓存行为的路径模式(如默认/*)是否覆盖所有需访问的资源;同时确认缓存策略未设置错误的权限规则,避免请求被拦截。 - 自定义错误页面配置失效:
若配置了自定义403页面,需确保该页面存在于S3桶中且路径正确,否则会因找不到错误页面返回嵌套的403。
3. 资源路径或索引页问题
- 路径大小写不匹配或资源不存在:
S3对象键区分大小写,例如Index.html和index.html是两个不同文件,需检查请求URL路径与S3对象路径完全一致,同时确认请求的文件确实存在于桶内。 - 索引文档未正确配置:
需同时在S3“静态网站托管”设置中把索引文档设为index.html(或实际使用的文件名),并在CloudFront分发的“默认根对象”中设置相同文件名,确保访问根路径时能正确返回首页。
内容的提问来源于stack exchange,提问作者Secure Blob
相关产品推荐
相关产品推荐

