AWS:ELB、NAT网关与公有子网配置异常问题排查
核心误区澄清
首先明确:外部客户端(包括无服务器场景)访问公有子网EC2上的API,不需要通过NAT网关。NAT网关的核心作用是让私有子网内的实例主动访问外网(比如拉取依赖、调用第三方API),而外部流量访问EC2是通过ELB的公网IP直接进入,和NAT网关无关联。你配置NAT网关后出现403,大概率是修改了公有子网的路由表,破坏了原有正常的网络通路。
正确的ELB+NAT网关配合方案(若需NAT网关满足实例外网访问需求)
如果你的EC2实例需要主动访问外网,同时保留外部通过ELB访问EC2的能力,按以下步骤配置:
- 子网规划优化(推荐):将EC2实例迁移至私有子网,ELB保留在公有子网。这是AWS最佳实践,避免公有子网实例直接暴露公网IP,提升安全性。
- 部署NAT网关:在公有子网创建NAT网关,并绑定弹性公网IP(EIP)。
- 路由表配置:
- 公有子网路由表:默认路由(0.0.0.0/0)指向互联网网关(IGW),确保ELB能接收外部流量、NAT网关能正常访问外网。
- 私有子网路由表:默认路由指向NAT网关,让EC2实例能通过NAT网关访问外网;同时保留VPC内部路由(如10.0.0.0/16指向本地),确保ELB与EC2实例的内部通信正常。
- 安全组与NACL配置:
- ELB安全组:允许外部客户端的访问端口(如80/443)入站,允许ELB访问EC2的API端口(如8080)出站。
- EC2安全组:允许ELB安全组的流量入站(对应API端口),按需配置出站规则(可允许所有出站流量,或限制到NAT网关、特定外部服务IP)。
- NACL:确保公有子网允许外部到ELB的端口入站、ELB到私有子网EC2的端口出站;私有子网允许ELB到EC2的端口入站、EC2到NAT网关的端口出站,同时放行所有返程流量。
当前403问题的排查修复步骤
若已配置NAT网关导致访问失败,按以下步骤排查:
- 检查公有子网路由表:确保默认路由指向互联网网关(IGW),而非NAT网关。若指向NAT网关,外部流量到ELB后的返回流量会被拦截,导致无法正常响应。
- 校验安全组规则:确认ELB的入站规则允许外部客户端的IP/端口,EC2的入站规则允许ELB安全组访问API端口。
- 检查NACL配置:确保相关子网的NACL放行所需端口的双向流量(如80/443端口)。
- 验证EC2服务状态:确认API服务本身未因网络配置变化返回403(比如服务绑定了特定IP、权限验证逻辑受网络环境影响)。
内容的提问来源于stack exchange,提问作者Marlon van der Linde
相关产品推荐
相关产品推荐

