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

AWS S3+CloudFront托管静态网站子路径刷新报AccessDenied求助

问题排查与解决方案

1. 修复CloudFront路径重写逻辑

直接访问example.cloudfront.net/about/时,CloudFront默认会向S3请求about/资源,但S3中不存在这个“文件夹”实体,实际对应文件是about/index.html。需通过CloudFront函数重写路径:

  • 创建CloudFront函数,代码如下:
    function handler(event) {
        const request = event.request;
        const uri = request.uri;
        if (uri.endsWith('/')) {
            request.uri = uri + 'index.html';
        }
        return request;
    }
    
  • 将函数关联到CloudFront分发的查看器请求阶段,路径模式设为/*,确保所有末尾带斜杠的路径都会被重写为对应index.html文件的请求。

2. 验证S3桶策略的权限范围

确认CloudFront原点访问身份(OAI)拥有访问S3所有对象的权限,桶策略需包含以下语句(替换占位符为你的实际信息):

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "AllowCloudFrontOAI",
            "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/*"
        }
    ]
}

注意Resource必须是arn:aws:s3:::YOUR_BUCKET_NAME/*(覆盖所有子对象),而非仅桶本身,否则嵌套路径的文件会被拒绝访问。

3. 检查CloudFront原点配置

  • 确保CloudFront的原点指向S3的REST端点(格式如your-bucket.s3.amazonaws.com),而非S3静态网站托管的HTTP端点(这类端点要求桶公开,不符合你的需求)。
  • 关闭S3端的静态网站托管功能,避免路径解析逻辑冲突,所有路由逻辑由CloudFront处理。

4. 清除CloudFront缓存残留

重新搭建服务后可能存在旧缓存,手动触发缓存失效:

  • 在CloudFront控制台找到对应分发,进入缓存失效页面,添加路径/about/和/about/index.html,提交失效请求,强制CloudFront获取最新配置与内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:55:15