第 4 章

VPC 实战指南

⏱️ 50 分钟
📝 20 题练习
备考助手

📌 核心知识点

网络架构设计子网规划安全组 vs NACLVPN 和 Direct Connect

VPC 实战指南

📖 VPC 基础知识

Amazon Virtual Private Cloud (VPC) 是 AWS 的虚拟化网络层,让您在 AWS 云中创建逻辑隔离的网络环境。

📒 官方文档用户指南FAQ定价

🖼️ VPC 图解补充

AWS Regions 全球分布示意(AWS 官方)

看图重点:多区域架构决策会先影响 VPC 的 CIDR 与互联策略。

AWS Availability Zones 结构示意(AWS 官方)

看图重点:VPC 子网设计一般按 AZ 复制,保证故障隔离。

EC2 Security Group 基础示意(AWS 官方)

看图重点:VPC 安全治理里 SG 是实例级边界,和路由/子网职责不同。

ECS 公网出站模式(AWS 官方)

看图重点:公网子网模式简单但暴露面更大,适合边缘入口层。

ECS 私网出站模式(AWS 官方)

看图重点:私网部署结合 NAT/Endpoint 是更常见的生产网络模式。

ECS 通过 NAT Gateway 访问外部服务(AWS 官方)

看图重点:大流量出网时 NAT 会成为成本和带宽关键点。

ECS 通过 VPC Endpoint 访问 AWS 服务(AWS 官方)

看图重点:访问 AWS 托管服务可走私网 Endpoint,减少公网路径依赖。

VPC 是什么?

VPC 是您在 AWS 中的虚拟数据中心。每个 AWS 用户都应该对 VPC 概念有基本的了解,但只有少数人需要深入了解所有细节。VPC 配置可以非常简单或极其复杂,取决于您的网络和安全需求。

所有现代 AWS 账户(2013-12-04 之后创建)都是 "EC2-VPC" 账户,支持 VPC,所有实例都会在默认 VPC 中运行。

VPC 架构示例 (10.0.0.0/16)
├── 公有子网 (10.0.1.0/24) - 面向互联网
│   ├── Internet Gateway - 互联网出入口
│   ├── NAT Gateway - 私有子网的出站代理
│   └── ALB/ELB - 负载均衡器
├── 私有子网 (10.0.10.0/24) - 应用层
│   ├── EC2 应用服务器
│   └── Lambda (VPC 内)
├── 数据库子网 (10.0.20.0/24) - 数据层
│   ├── RDS 实例
│   └── ElastiCache
├── 路由表 (Route Tables)
├── 安全组 (Security Groups)
└── 网络 ACL (NACLs)

VPC 基础网络架构(AWS 官方)

看图重点:先看子网分层,再看路由路径,最后看 SG/NACL 的流量控制边界。

Public NAT Gateway 流量路径(AWS 官方)

看图重点:私有子网出网通常走 NAT Gateway,入站不能反向直连私有实例。

子网规划

CIDR 块设计

生产环境推荐 (10.0.0.0/16 = 65,536 个 IP):
├── 公有子网 AZ-a: 10.0.1.0/24 (251 个可用 IP)
├── 公有子网 AZ-b: 10.0.2.0/24 (251 个可用 IP)
├── 公有子网 AZ-c: 10.0.3.0/24 (251 个可用 IP)
├── 私有子网 AZ-a: 10.0.10.0/24 (251 个可用 IP)
├── 私有子网 AZ-b: 10.0.11.0/24 (251 个可用 IP)
├── 私有子网 AZ-c: 10.0.12.0/24 (251 个可用 IP)
├── 数据库子网 AZ-a: 10.0.20.0/24 (251 个可用 IP)
├── 数据库子网 AZ-b: 10.0.21.0/24 (251 个可用 IP)
└── 数据库子网 AZ-c: 10.0.22.0/24 (251 个可用 IP)

# 注意:每个子网 AWS 保留 5 个 IP 地址
# .0 = 网络地址
# .1 = VPC 路由器
# .2 = DNS 服务器
# .3 = 预留
# .255 = 广播地址(VPC 不支持广播,但保留)

多可用区设计

为了高可用,每种子网类型应跨多个可用区:

子网类型AZ-aAZ-bAZ-c用途
公有子网10.0.1.0/2410.0.2.0/2410.0.3.0/24ALB, NAT GW
私有子网10.0.10.0/2410.0.11.0/2410.0.12.0/24应用服务器
数据库子网10.0.20.0/2410.0.21.0/2410.0.22.0/24RDS 子网组

安全组 vs NACL

安全组 (Security Groups)

安全组是您服务器的第一道防线。使用 CLB、ALB 或其他负载均衡时,通常只需要开放 22 端口(SSH)和应用端口。安全组默认拒绝所有入站流量。

  • 有状态: 出站响应自动允许
  • 实例级别: 绑定到 ENI(网络接口)
  • 只允许规则: 不能添加拒绝规则
  • 全部评估: 所有规则都会被评估
# Terraform 示例 - Web 服务器安全组
resource "aws_security_group" "web" {
  name        = "web-sg"
  vpc_id      = aws_vpc.main.id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port       = 443
    to_port         = 443
    protocol        = "tcp"
    cidr_blocks     = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

💡 最佳实践: 使用其他安全组作为源,而不是 CIDR。这样只有源安全组中的主机被允许访问:

# 允许来自 ALB 安全组的流量
ingress {
  from_port       = 8080
  to_port         = 8080
  protocol        = "tcp"
  security_groups = [aws_security_group.alb.id]
}

网络 ACL (NACLs)

  • 无状态: 需要同时配置入站和出站规则
  • 子网级别: 应用于整个子网的所有流量
  • 允许和拒绝规则: 可以明确拒绝流量
  • 按序号评估: 从小到大,第一个匹配的规则生效

对比总结

特性安全组NACL
级别实例/ENI子网
状态有状态无状态
规则类型只允许允许+拒绝
规则评估全部评估按序号顺序
默认行为拒绝入站,允许出站允许所有

端口卫生

好习惯是为每种服务选择不同的非常规端口:

# 示例端口分配
Web 前端:    3010
后端服务 A:  3020
后端服务 B:  3021
PostgreSQL:  5432 (标准端口)

# 优点:
# 1. 明确服务清单
# 2. 防止意外暴露(如默认 80 端口的 Apache)

VPC Flow Logs

VPC Flow Logs 允许您监控 VPC 的网络流量,用于安全监控、性能评估和取证调查。

# 创建 Flow Logs
aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-xxx \
  --traffic-type ALL \
  --log-destination-type cloud-watch-logs \
  --log-group-name /vpc/flow-logs

# 或发送到 S3
aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-xxx \
  --traffic-type ALL \
  --log-destination-type s3 \
  --log-destination arn:aws:s3:::my-flow-logs-bucket

VPN 和 Direct Connect

Site-to-Site VPN

适用于快速部署、中小规模连接:

本地数据中心 <---> VPN 隧道 <---> AWS VPC
                    |
            加密的 IPsec 连接
            带宽上限约 1.25 Gbps
            延迟较高(通过互联网)

AWS Direct Connect

适用于大型企业,需要稳定高带宽和低延迟:

本地数据中心 <---> Direct Connect <---> AWS VPC
                       |
              专用物理连接
              1 Gbps 或 10 Gbps
              延迟低且稳定

选择建议

场景推荐方案
快速启动、低成本Site-to-Site VPN
高带宽、低延迟Direct Connect
高可用混合架构Direct Connect + VPN 备份

VPC 端点

Gateway 端点 (免费)

用于 S3 和 DynamoDB:

aws ec2 create-vpc-endpoint \
  --vpc-id vpc-xxx \
  --service-name com.amazonaws.ap-southeast-2.s3 \
  --route-table-ids rtb-xxx

Interface 端点 (PrivateLink,收费)

用于其他 AWS 服务,在子网中创建 ENI:

aws ec2 create-vpc-endpoint \
  --vpc-id vpc-xxx \
  --vpc-endpoint-type Interface \
  --service-name com.amazonaws.ap-southeast-2.ec2 \
  --subnet-ids subnet-xxx

IPv6 支持

VPC 支持 IPv6,但有一些注意事项:

  • AWS 分配 IPv6 CIDR 块,不能使用自己的
  • 使用 Egress-Only Internet Gateway 实现仅出站的 IPv6 流量
  • 安全组和路由表需要为 IPv4 和 IPv6 分别配置
# 为 VPC 分配 IPv6 CIDR
aws ec2 associate-vpc-cidr-block \
  --vpc-id vpc-xxx \
  --amazon-provided-ipv6-cidr-block

⚠️ 常见陷阱

1. CIDR 冲突

# ❌ 错误:与本地网络或其他 VPC 重叠
VPC A: 10.0.0.0/16
VPC B: 10.0.0.0/16  # 无法对等连接!
本地网络: 10.0.0.0/8  # 冲突!

# ✅ 正确:规划不重叠的 CIDR
VPC A: 10.0.0.0/16
VPC B: 10.1.0.0/16
VPC C: 10.2.0.0/16

2. VPC Peering 数据传输费用

VPC 对等连接的数据传输费用可能很高!某些工作负载可能导致成本过高。

3. 安全组绑定到 VPC

安全组绑定到特定 VPC。如果在多个 VPC 中使用基础设施,确保配置/部署工具考虑到这一点。

4. RDS 需要子网组

新建 RDS 实例需要至少两个跨 AZ 的子网。如果使用自定义 VPC,确保提前创建子网组。

5. 删除默认 VPC

如果删除了默认 VPC,可以通过 CLI 或控制台重新创建:

aws ec2 create-default-vpc

6. VPN 凭证泄露

如果 VPN 凭证丢失或泄露,必须删除并重建 VPN 端点。无法仅更换凭证。

7. NAT Gateway 费用

托管 NAT Gateway 很方便,但按 GB 收费。如果传输大量数据(TB 级别),考虑:

  • 使用自建 NAT 实例
  • 使用 VPC 端点直接访问 AWS 服务(如 S3)
# 创建 S3 端点,避免 NAT Gateway 费用
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-xxx \
  --service-name com.amazonaws.ap-southeast-2.s3 \
  --route-table-ids rtb-xxx

💡 最佳实践

1. 使用多个 AZ

# 至少跨 2-3 个可用区部署
availability_zones:
  - ap-southeast-2a
  - ap-southeast-2b
  - ap-southeast-2c

2. 私有子网优先

  • 数据库、应用服务器放在私有子网
  • 只有 ALB、NAT Gateway、Bastion Host 放在公有子网

3. 最小权限安全组

# ❌ 不要这样做
0.0.0.0/0 -> 所有端口

# ✅ 应该这样做
10.0.0.0/16 -> 端口 443
sg-alb-xxx -> 端口 8080

4. 使用 VPC 端点

为 S3、DynamoDB 等服务创建 VPC 端点,既安全又省钱。

5. 规划 CIDR

VPC 创建后 CIDR 不能修改(只能添加)。建议使用 /16 网段,为未来扩展预留空间。

6. Bastion Host

通过 VPN 或 Bastion Host 访问私有资源,不要直接暴露服务:

互联网 → VPN/Bastion → 私有子网服务

📚 本章小结

  • VPC 是 AWS 网络的基础,每个 AWS 用户都需要基本了解
  • 合理规划子网 CIDR,避免与其他网络冲突
  • 安全组(有状态)和 NACL(无状态)配合使用
  • 多可用区设计是高可用的关键
  • 使用 VPC 端点减少 NAT Gateway 费用
  • 启用 VPC Flow Logs 进行安全监控和故障排查
📝 章节练习 (20 题)
开始练习