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

S3+CloudFront架构下限制仅自有网站访问负载均衡后API的问题咨询

S3+CloudFront架构下限制仅自有网站访问负载均衡后API的问题咨询

你完全猜对了!这里的流量路径确实是你后来想的那样:当用户打开xyz.com时,CloudFront只负责把S3上的静态资源(HTML、JS、CSS这些)返回给用户的浏览器;等页面加载完成后,浏览器会直接向你的API发起请求,而不是通过CloudFront中转这个API请求。这就是为什么你给负载均衡安全组配置CloudFront前缀列表后,网站反而无法访问API——因为实际的请求来源是用户的浏览器IP,根本不是CloudFront的IP段。

接下来给你几个可行的解决方案,根据你的场景选择:

  • 基础防护:验证HTTP Referer/Origin头
    在负载均衡或者后端API服务中添加逻辑,检查请求的Referer或Origin头是否匹配https://xyz.com(或者你的网站域名的相关前缀)。不过要注意,这类HTTP头是可以被篡改的,所以这只能作为基础的防护手段,适合非敏感的API场景。

  • 更可靠的防护:使用AWS WAF
    把AWS WAF关联到你的负载均衡,创建自定义规则组合来限制访问:

    1. 优先检查请求的Origin头是否严格等于你的网站域名;
    2. 辅助验证Referer头作为补充;
    3. 还可以结合IP限制、请求频率控制等规则,进一步提升安全性。WAF的规则是在负载均衡层面生效,不需要修改后端API代码,配置起来比较灵活。
  • 推荐方案:将API也纳入CloudFront分发(端到端控制)
    这是最规范的做法,能彻底解决你的访问控制问题:

    1. 在CloudFront中添加新的源,指向你的负载均衡;
    2. 创建CloudFront行为,比如把/api/*路径的请求转发到这个新源,同时设置缓存策略为“不缓存”(因为API请求通常是动态的);
    3. 此时你就可以给负载均衡的安全组只开放CloudFront的前缀列表了——因为所有API请求都会先经过CloudFront,再转发到负载均衡;
    4. 最后在CloudFront中配置**Origin Access Control(OAC)**或者使用签名Cookie,确保只有你的xyz.com网站能触发这些API请求,从根源上限制非法访问。

另外要注意,如果采用第三种方案,需要在CloudFront或者后端API配置正确的CORS响应头,允许https://xyz.com的跨域请求,避免浏览器的跨域拦截。

备注:内容来源于stack exchange,提问作者April Henig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:44:36