前面已经介绍了 NAT Gateway 的作用,下面结合 AWS 的实际操作流程,说明在真实环境中应当如何使用。
一、Public Subnet 与 Private Subnet 的定义
在 AWS 中,Subnet 是否是 Public 或 Private,并不是由名称决定,而是由它所关联的路由表决定的。
-
Public Subnet
- 路由表中存在如下记录:
0.0.0.0/0 → Internet Gateway (igw-xxxx) - 表示该 Subnet 内的资源可以直接访问互联网,并且在满足条件时也可以被公网访问。
- 路由表中存在如下记录:
-
Private Subnet
- 路由表中 不存在 指向 Internet Gateway 的默认路由
- 通常会通过 NAT Gateway 间接访问互联网
- Subnet 内的资源无法被公网直接访问
二、创建 Subnet
- 进入 VPC
- 打开 Subnets 页面,点击右上角 Create subnet
- 配置以下信息:
- 选择所属的 VPC
- 设置 Subnet 的 CIDR(如
10.0.1.0/24) - 选择 Availability Zone
- 创建完成
实际生产环境中,通常会:
- 至少创建一个 Public Subnet(用于 NAT Gateway、ALB 等)
- 创建多个 Private Subnet(用于 EC2、ECS、RDS 等业务资源)
三、创建 NAT Gateway
- 进入 NAT Gateways 页面,点击 Create NAT gateway
- 配置说明:
- Connectivity type:选择
Public (Zonal) - Subnet:
- 选择一个 Public Subnet
- ⚠️ NAT Gateway 必须部署在 Public Subnet 中
- Elastic IP:
- 分配一个新的 EIP(或选择已有的)
- 该 EIP 将作为所有 Private Subnet 出网的统一出口 IP
- Connectivity type:选择
- 创建完成后,等待 NAT Gateway 状态变为
Available
四、创建 Route Table(用于 Private Subnet)
- 进入 Route Tables 页面,点击 Create route table
- 选择对应的 VPC,点击创建
- 选中新创建的 Route Table,点击 Edit routes
- 添加一条路由:
- Destination:
0.0.0.0/0 - Target:选择 NAT Gateway
- 在下拉列表中选中刚刚创建的 NAT Gateway
- Destination:
- 点击 Save changes
五、将 Route Table 关联到 Subnet
- 在刚创建的 Route Table 页面中:
- 点击右上角 Actions
- 选择 Edit subnet associations
- 勾选需要作为 Private Subnet 的 Subnet
- 点击 Save associations
六、最终效果说明
至此,一个完整的 Private Subnet + NAT Gateway 出网架构已经搭建完成:
- Subnet 内的 EC2 / ECS / Lambda(ENI):
- ✅ 可以访问互联网(如
apt / yum / pip / docker pull) - ✅ 所有出网流量统一从 NAT Gateway 的 EIP 发出
- ✅ 可以访问互联网(如
- Subnet 内的资源:
- ❌ 无法被公网直接访问
- 整体效果:
- ✅ 大幅降低服务器的攻击面
- ✅ 提升整体网络安全性
如果将 EC2 部署在该 Private Subnet 中,即使安全组或 NACL 配置失误,也不会被公网直接扫描或访问。
总结
通过 NAT Gateway + Private Subnet 的方式,可以实现:
- 统一、固定的出口 IP
- 内网资源安全地访问外网
- 有效隔离公网访问入口
这是 AWS 中构建安全网络架构的标准实践之一。