在 AWS 中,一个经常遇到但又非常麻烦的问题是 固定公网 IP 的限制。
AWS 中的很多服务(例如 EC2、Lambda、ECS 等)默认并不具备固定公网 IP;即便使用 Elastic IP,在同一个 Region 内 默认也只能申请 5 个(虽然可以通过工单申请提升,但并不是无限制)。
这在一些 对安全要求较高的 API 对接场景 中尤为棘手。
常见问题包括:
- 对方 API 要求 设置固定出口 IP 白名单
- 多台 EC2 / 服务实例都需要访问同一个外部 API
- 一批 EC2 不希望暴露在公网,但仍需要访问互联网(下载软件、抓取网页、调用第三方接口等)
如果为每台 EC2 单独分配公网 IP,不仅会迅速耗尽 IP 配额,还会显著增加攻击面和运维复杂度。
NAT Gateway 正是为了解决这些问题而存在的
在介绍 NAT Gateway 之前,先简单回顾一下 AWS VPC 的基本概念。
VPC 与 Subnet 的基本概念
VPC(Virtual Private Cloud) 可以理解为你在 AWS 中创建的一张私有局域网。
在一个 Region 中通常包含多个 Availability Zone(AZ),最佳实践是:
- 在每个 AZ 中创建至少一个 Public Subnet
- 同时创建一个或多个 Private Subnet
AWS 中的大部分计算和数据库服务(如 EC2、RDS、Lambda(VPC 模式)等),本质上都是运行在某个 Subnet 内。
Public Subnet 与 Private Subnet 的区别
-
Public Subnet
- 通过 Internet Gateway 直接访问互联网
- 通常用于放置 ALB、NAT Gateway、Bastion Host 等
-
Private Subnet
- 默认无法直接访问互联网
- 无法被公网主动访问
- 通常用于放置业务 EC2、ECS、RDS 等核心资源
Private Subnet 的限制
Private Subnet 的安全性很好,但有一个天然限制:
默认情况下,Private Subnet 中的资源无法访问互联网
然而在实际使用中,以下需求几乎不可避免:
- 使用
yum / apt安装系统依赖 - 拉取 Docker 镜像
- 调用第三方 API
- 抓取网页或访问外部服务
这就需要一个 安全、可控的统一互联网出口。
什么是 NAT Gateway?
AWS NAT Gateway 可以理解为:
部署在 VPC 中的一个统一互联网出口路由器
它的核心能力包括:
- 允许 Private Subnet 中的资源访问互联网
- 阻止 互联网主动访问 Private Subnet 中的资源
- 所有出站流量 统一从 NAT Gateway 绑定的 Elastic IP 发出
这与家庭网络非常类似:
- 家庭设备使用内网 IP(如
192.168.x.x) - 路由器拥有公网 IP
- 外部网络只能看到路由器,而无法直接访问内网设备
使用 NAT Gateway 的好处
1. 统一出口 IP,解决固定 IP 不够用的问题
- 多台 EC2 / ECS / Lambda 共享少量 Elastic IP
- 对外系统只需要配置 一个或少数几个 IP 白名单
- 避免为每个实例单独分配公网 IP
2. Private Subnet 不暴露公网,显著提升安全性
- Private Subnet 中的实例 没有公网 IP
- 无法被互联网主动连接
- 大多数来自公网的扫描和攻击都会被阻挡在 NAT Gateway 之外
3. 网络架构更清晰,符合 AWS 最佳实践
常见的 VPC 结构如下:
-
Public Subnet
- Internet Gateway
- NAT Gateway
- Application Load Balancer(ALB)
-
Private Subnet
- 业务 EC2 / ECS
- 内部服务
- RDS / Cache 等数据层组件
通过 Route Table 精确控制不同子网的流量走向,使整体网络结构更加清晰、可控。
一句话总结
AWS NAT Gateway 就像是 VPC 中的“统一上网出口路由器”
它让私有子网中的服务器可以安全地访问互联网,同时避免被公网直接访问,并有效解决固定出口 IP 不足的问题。