You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接S3存储桶的AWS CloudFront出现Access Denied问题求助

排查CloudFront访问S3返回403 Access Denied的常见问题

以下是针对你场景的逐一排查步骤:

1. 核对S3桶策略的正确性

确保桶策略是通过CloudFront OAC生成的正确版本,重点检查:

  • Principal为cloudfront.amazonaws.com,且Condition中的AWS:SourceArn完全匹配你的CloudFront分发ARN(格式为arn:aws:cloudfront::你的AWS账号ID:distribution/分发ID)
  • Action包含s3:GetObject,Resource设置为arn:aws:s3:::你的桶名/*(必须带/*,仅写桶ARN会导致无法访问桶内对象)
  • 示例正确策略:
{
  "Version": "2008-10-17",
  "Id": "PolicyForCloudFrontPrivateContent",
  "Statement": [
    {
      "Sid": "AllowCloudFrontServicePrincipal",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::mybucket/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/ABCDEFG123456"
        }
      }
    }
  ]
}

2. 确认OAC与CloudFront源的绑定关系

  • 进入CloudFront分发的「源」配置页面,检查当前源使用的OAC是否是你创建的目标OAC
  • 验证OAC的配置:类型为「S3」,且勾选了「签署请求(推荐)」,未修改过关联的分发ARN

3. 检查S3对象的所有权与权限

因为开启了「存储桶所有者强制」,需确保:

  • 所有对象的所有者是桶的拥有者(若对象由其他AWS账号上传,需在上传时设置acl: bucket-owner-full-control,或通过桶策略强制获取所有权)
  • 单个对象的权限中,桶所有者拥有s3:GetObject权限,无拒绝类规则

4. 验证CloudFront缓存行为设置

  • 检查缓存行为的「允许的HTTP方法」是否包含GET和HEAD(静态文件访问必备)
  • 确认缓存行为的路径模式覆盖了你请求的文件路径(如默认/*可匹配所有路径,若自定义路径需确保匹配正确)
  • 若使用了原点请求策略,检查是否添加了会导致S3无法识别的请求头部或参数

5. 核对请求路径的准确性

  • S3对象路径区分大小写,确保CloudFront请求的路径(如index.html)与S3中对象的路径完全一致
  • 若请求根域名(如https://xxx.cloudfront.net/),需在CloudFront分发设置中指定「默认根对象」为index.html,否则S3会返回403(无默认首页跳转)

6. 确认CloudFront配置已部署完成

CloudFront修改配置后需等待5-15分钟完成全局部署,若刚修改完就测试,可能仍在使用旧配置导致403

内容的提问来源于stack exchange,提问作者user873592

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:13:22