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

CloudFront访问配置重定向的S3存储桶失效问题排查

问题根因
  • 核心问题是CloudFront绑定的S3端点类型不对:你现在选的是S3原生REST API端点(就是建源的时候从自己账号下S3桶下拉列表直接挑的那个),搭配OAI做访问控制时,这个端点只认标准S3对象API请求,S3静态网站托管里配的重定向规则、首页/错误页规则在这个端点上完全不生效。你直接访问S3能正常跳转,是因为你访问的是S3给静态网站托管单独开的HTTP端点,格式一般是<桶名>.s3-website-<区域>.amazonaws.com,这个端点和CloudFront现在连的REST端点是两套完全独立的逻辑,根本走不到一块去。
  • 访问时返回ListBucketResult的XML桶列表,是因为请求打到REST端点后,桶是空的找不到根路径对应的对象,你当前的权限又没禁掉列桶操作,S3直接返回了API层面的列桶结果,从根上就没触发静态网站的重定向流程。
修复方案

两种方案选一个就行:

方案1:保留OAI私有桶配置,用CloudFront Functions做重定向(推荐)

这个方案不用改S3的私有属性,安全性更好,重定向在CloudFront边缘节点直接返回,速度比走S3重定向快:

  • 先改S3桶策略,把给OAI开的s3:ListBucket权限删掉,只留s3:GetObject,从权限层面堵死返回桶列表的可能。
  • 在对应CloudFront分发上建一个CloudFront函数,触发时机选查看器请求(Viewer Request),逻辑直接返回301跳转就行,参考代码:
function handler(event) {
    return {
        statusCode: 301,
        statusDescription: 'Moved Permanently',
        headers: {
            location: { value: 'https://my.app' }
        }
    };
}
  • 把函数绑定到分发的默认缓存行为,发布后给分发做一次/*全路径缓存失效,等部署完就正常了。

方案2:把CloudFront源换成S3静态网站端点,复用S3侧的重定向规则

如果你就是想把重定向规则放在S3侧维护,按下面改:

  • 进S3桶的「静态网站托管」配置页,复制页面上给你生成的静态网站专属端点地址。
  • 改CloudFront源配置:别从下拉列表选S3桶,选「自定义源」类型,把刚复制的静态网站端点填进去,源协议策略选仅HTTP——S3静态网站端点本身只支持HTTP访问,HTTPS由CloudFront侧负责卸载,不用在S3侧配证书。
  • 注意:OAI只支持S3 REST API端点,绑静态网站端点的时候OAI是不生效的。你这个桶本身是空的,只有重定向规则没有私有文件,直接放开静态网站端点的访问权限就行,不会有数据泄露问题。
  • 去CloudFront的错误页配置里,把403、404的缓存TTL改成0,清掉之前缓存的桶列表响应。
  • 最后给分发做一次/*全路径缓存失效,等部署完成测试就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:51:30