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

使用CloudFront分发S3静态内容失败,请求排查配置问题

CloudFront 搭配 S3 托管静态内容无法访问问题排查与修复

问题描述

我尝试配置CloudFront与S3来托管网站的静态内容,但目前无法正常工作,操作步骤如下:

  • 创建了禁用所有公共访问的S3存储桶men-mvc-local
  • 创建CloudFront分发,选择该S3存储桶作为源域名
  • AWS控制台提示需手动更新存储桶策略(针对OAC),于是添加了如下存储桶策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipalReadWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::men-mvc-local/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::xxxx-9609-xxxx:distribution/E1L6NWB7YV5XXX"
                }
            }
        }
  • 尝试通过CloudFront URL访问文件:https://dl2j5zcr9xpi4.cloudfront.net/my-image.png,但无法看到图片。

问题分析与修复方案

1. 修复存储桶策略语法错误

你的JSON策略存在语法不完整问题:Statement数组缺少闭合的],整个策略对象缺少闭合的},导致策略无法生效。同时,托管静态内容仅需s3:GetObject权限,可移除不必要的s3:PutObject。修正后的完整策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipalRead",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::men-mvc-local/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::xxxx-9609-xxxx:distribution/E1L6NWB7YV5XXX"
                }
            }
        }
    ]
}

2. 确认Origin Access Control (OAC) 关联状态

创建CloudFront分发时,必须确保已启用并关联OAC到S3源:

  • 进入CloudFront分发的「源」设置页面,检查是否已选择对应的OAC
  • 若创建分发时未配置OAC,需编辑源,创建新的OAC并完成关联,再重新应用上述存储桶策略

3. 验证文件路径与存在性

  • 确认S3存储桶内确实存在my-image.png,注意S3路径区分大小写,需保证文件名、层级完全匹配
  • 检查CloudFront分发的「源路径」是否留空(若设置了自定义路径,需确保访问URL与源路径匹配)

4. 刷新CloudFront缓存

修改存储桶策略或源配置后,CloudFront可能缓存旧的错误响应,需手动触发缓存刷新:

  • 进入CloudFront控制台,选择对应分发,切换到「Invalidations」标签
  • 创建新的Invalidation,路径填写/*(刷新所有内容)或/my-image.png(仅刷新目标文件),等待刷新完成(通常需1-5分钟)

5. 排查错误状态码

打开浏览器开发者工具(F12),查看网络请求的状态码:

  • 403 Forbidden:优先检查存储桶策略是否生效、OAC是否正确关联
  • 404 Not Found:确认文件路径正确性,或检查S3存储桶区域与CloudFront的同步情况

内容的提问来源于stack exchange,提问作者Wai Yan Hein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:13:18