AWS公网子网到私网子网流量控制配置咨询
架构理解正误判断
首先你做的公私有子网分层的大方向是对的:
- 将面向公网提供REST API的
public-service相关资源(EC2实例、负载均衡、监听器、目标组、绑定的安全组)部署在公网子网,将仅对内提供服务的private-services、RDS MySQL实例部署在私网子网,完全符合VPC公私有子网架构的标准设计思路。
但你对NAT网关作用的认知存在偏差:
NAT网关的核心作用是让私网子网内没有公网IP的资源主动发起对外网的访问(比如下载系统更新、拉取公网第三方依赖),同时阻断公网主动发起的对私网资源的连接。
公网子网的public-service和私网子网的private-services之间的通信属于VPC内部流量,根本不需要经过NAT网关。只要基础网络配置正确,私网服务的响应会直接通过VPC内部路由回传给公网子网的服务,不存在需要NAT维持连接的情况。
额外提一句更安全的实践:你可以把负载均衡单独放在公网子网,实际承载public-service的EC2实例也放到私网子网,只让负载均衡承担公网流量入口的角色,能进一步缩小公网暴露面,当然你当前的方案也是可正常运行的。
公私网服务通信所需配置
你不需要做太复杂的配置,按以下清单核对即可:
- 路由表配置
- 公网子网关联的路由表:添加
0.0.0.0/0路由指向互联网网关(IGW),保证公网流量正常进出;VPC对应网段的本地路由是创建VPC时自动生成的,默认就会把发往同VPC内其他子网的流量直接内部转发,不需要手动修改。 - 私网子网关联的路由表:默认自带的VPC本地路由已经足够响应公网子网发来的内部请求;如果你的私网资源需要主动访问公网,再添加
0.0.0.0/0路由指向公网子网内的NAT网关即可,这条路由和公私网内部通信没有关系。
- 公网子网关联的路由表:添加
- 安全组配置(核心访问控制手段,有状态)
- 给
private-services绑定的安全组添加入站规则:允许来源为public-service绑定安全组的内部服务端口(比如内部API用8080端口就放行8080的TCP流量),直接指定对端安全组ID即可,不需要写公网子网的CIDR段,安全性更高。 public-service绑定的安全组默认放行所有出站流量、公网入站的API端口,不需要额外改动就能主动访问私网服务。- RDS实例绑定的安全组添加入站规则:仅放行
private-services(以及需要直连数据库的public-service节点)绑定安全组的3306端口访问,禁止所有公网来源的请求。
- 给
- 网络ACL(NACL)配置说明
NACL是子网级别的无状态访问控制规则,AWS默认给所有子网关联的默认NACL会放行所有入站、出站流量。你这个场景完全不需要自定义修改NACL规则,靠路由表+安全组就可以实现正常通信和足够精细的访问控制。
只有当你需要做子网级别的粗粒度流量封禁(比如明确屏蔽某个IP段对整个子网所有端口的访问)时,才需要自定义NACL规则。普通业务场景下不建议随意修改NACL,它的无状态特性很容易因为规则遗漏(比如开了入站端口忘了放行对应临时端口的出站)导致连接异常。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

