如何更新AWS安全组,仅允许Netlify上的React应用发起入站请求?
解决AWS安全组仅允许前端React应用访问的问题
先搞懂核心误区:谁在发请求?
React是前端单页应用,最终发起API请求的是用户的浏览器,不是你的前端域名服务器。你用nslookup api.domain.tld拿到的是前端域名的服务器IP,这和实际请求的源IP完全不沾边,规则当然不会生效。
分场景给出解决方案:
场景1:前端部署在AWS CloudFront+S3
- 优先用CloudFront的Origin Access Control (OAC):配置后S3只会接受CloudFront的请求,不用维护IP段,比安全组IP限制更靠谱。
- 如果后端是EC2/ALB,要允许CloudFront的IP段:
- 用命令拉取AWS官方IP列表:
curl https://ip-ranges.amazonaws.com/ip-ranges.json - 过滤出CloudFront的IP段(找
service: CLOUDFRONT的条目),批量添加到后端安全组的入站规则,对应服务端口(比如80/443)
- 用命令拉取AWS官方IP列表:
场景2:前端用第三方CDN(比如Cloudflare)
- 去CDN官方文档找IP段列表,把这些段添加到后端安全组的入站规则。
- 更安全的方式是开启CDN的Authenticated Origin Pulls,让后端只接受带CDN专属证书的请求,避免IP段变更带来的维护麻烦。
场景3:前端是纯静态CSR(无CDN、无SSR)
这种情况用户浏览器的IP是动态的,用安全组IP限制根本不现实,建议换方案:
- 用AWS API Gateway+IAM认证,只允许带有效签名的请求访问后端。
- 或者在后端实现JWT鉴权,验证请求里的token合法性,这比网络层的IP限制更适合前端场景。
场景4:前端是SSR(服务器端渲染)
如果请求是前端服务器转发的,那才需要把前端服务器的固定IP(或IP段)添加到后端安全组的入站规则,格式要写成x.x.x.x/32(单个IP)或对应的CIDR段。
排查当前配置的常见坑
- 规则方向搞反:要给后端服务的安全组加入站规则,允许前端侧的IP访问,不是出站规则。
- 端口不匹配:后端服务监听的端口(比如3000)和安全组开放的端口(比如80)不一致。
- IP格式错误:单个IP要写成
x.x.x.x/32,不能只写x.x.x.x;CIDR段的掩码要正确。 - 本地开发代理干扰:本地用
create-react-app的代理时,请求源IP是本地IP,测试时要加本地IP,但生产环境别这么配置。
验证方法
- 发起请求后,查看后端服务器的访问日志,确认请求的源IP,对比安全组规则里是否包含这个IP。
- 开启AWS VPC Flow Logs,查看流量是否被安全组拒绝(日志里
action字段为REJECT就是被挡了)。
内容的提问来源于stack exchange,提问作者gitahi
相关产品推荐
相关产品推荐

