VPC 连接方案

深入学习 VPC 的各种连接方式:VPC Peering、Transit Gateway、VPN、Direct Connect 和 VPC Endpoints。

VPC Peering

Peering 基础

什么是 VPC Peering:

VPC Peering 连接:
├─ 在两个 VPC 之间建立私有网络连接
├─ 使用 AWS 内部网络
├─ 流量不经过公网
├─ 支持跨区域和跨账户
└─ 点对点连接(非传递)

特性:
├─ 低延迟
├─ 高带宽
├─ 加密传输
├─ 无单点故障
└─ 按数据传输收费(跨区域)

非传递性:

VPC Peering 不支持传递路由:

场景:
VPC-A ←→ VPC-B ←→ VPC-C

VPC-A 和 VPC-B 有 Peering
VPC-B 和 VPC-C 有 Peering

结果:
✓ VPC-A 可以访问 VPC-B
✓ VPC-B 可以访问 VPC-C
✗ VPC-A 不能通过 VPC-B 访问 VPC-C

解决方案:
├─ 创建 VPC-A 到 VPC-C 的直接 Peering
└─ 或使用 Transit Gateway

创建 VPC Peering

同区域 Peering:

# 1. 创建 Peering 连接
PEER_ID=$(aws ec2 create-vpc-peering-connection \
  --vpc-id $VPC_A_ID \
  --peer-vpc-id $VPC_B_ID \
  --tag-specifications 'ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=VPC-A-to-VPC-B}]' \
  --query 'VpcPeeringConnection.VpcPeeringConnectionId' \
  --output text)

echo "Peering Connection ID: $PEER_ID"

# 2. 接受 Peering 请求(同账户自动接受,跨账户需手动)
aws ec2 accept-vpc-peering-connection \
  --vpc-peering-connection-id $PEER_ID

# 3. 等待 Peering 激活
aws ec2 wait vpc-peering-connection-exists \
  --vpc-peering-connection-ids $PEER_ID

# 4. VPC-A 添加到 VPC-B 的路由
aws ec2 create-route \
  --route-table-id $VPC_A_RTB \
  --destination-cidr-block $VPC_B_CIDR \
  --vpc-peering-connection-id $PEER_ID

# 5. VPC-B 添加到 VPC-A 的路由
aws ec2 create-route \
  --route-table-id $VPC_B_RTB \
  --destination-cidr-block $VPC_A_CIDR \
  --vpc-peering-connection-id $PEER_ID

echo "VPC Peering 配置完成"

跨区域 Peering:

# 1. 在 us-east-1 创建 Peering 请求
PEER_ID=$(aws ec2 create-vpc-peering-connection \
  --vpc-id $VPC_EAST_ID \
  --peer-vpc-id $VPC_WEST_ID \
  --peer-region us-west-2 \
  --tag-specifications 'ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=East-to-West}]' \
  --region us-east-1 \
  --query 'VpcPeeringConnection.VpcPeeringConnectionId' \
  --output text)

# 2. 在 us-west-2 接受 Peering
aws ec2 accept-vpc-peering-connection \
  --vpc-peering-connection-id $PEER_ID \
  --region us-west-2

# 3. 配置路由(两端都需要)
# us-east-1 路由
aws ec2 create-route \
  --route-table-id $EAST_RTB \
  --destination-cidr-block $VPC_WEST_CIDR \
  --vpc-peering-connection-id $PEER_ID \
  --region us-east-1

# us-west-2 路由
aws ec2 create-route \
  --route-table-id $WEST_RTB \
  --destination-cidr-block $VPC_EAST_CIDR \
  --vpc-peering-connection-id $PEER_ID \
  --region us-west-2

跨账户 Peering:

# 账户 A(请求方)
PEER_ID=$(aws ec2 create-vpc-peering-connection \
  --vpc-id $VPC_A_ID \
  --peer-vpc-id $VPC_B_ID \
  --peer-owner-id 999999999999 \
  --peer-region us-east-1 \
  --query 'VpcPeeringConnection.VpcPeeringConnectionId' \
  --output text)

# 账户 B(接受方)- 需要切换到账户 B 的凭证
aws ec2 accept-vpc-peering-connection \
  --vpc-peering-connection-id $PEER_ID

# 后续路由配置与同账户相同

Peering 限制和最佳实践

限制:

CIDR 块限制:
├─ 两个 VPC 的 CIDR 不能重叠
├─ 例如:10.0.0.0/16 和 10.1.0.0/16 可以
├─ 但 10.0.0.0/16 和 10.0.1.0/24 不可以
└─ 规划时需要提前考虑

数量限制:
├─ 每个 VPC 最多 125 个活动 Peering
├─ 可申请增加配额
└─ 大规模互联建议使用 Transit Gateway

性能限制:
├─ 同区域:无带宽限制
├─ 跨区域:受网络容量限制
└─ 但通常能满足大多数需求

最佳实践:

1. CIDR 规划
   ├─ 提前规划不重叠的 CIDR
   ├─ 为未来扩展预留空间
   ├─ 使用标准化的地址分配
   └─ 文档化所有 VPC 的 CIDR

2. 命名和标签
   ├─ 使用描述性名称
   ├─ 标明连接的两端
   ├─ 添加用途标签
   └─ 示例:Production-to-Shared-Services

3. 安全组配置
   ├─ Peering 后更新安全组
   ├─ 允许来自对端 VPC 的流量
   ├─ 使用对端 CIDR 块作为源
   └─ 定期审查规则

4. 监控
   ├─ 监控 Peering 状态
   ├─ 设置 CloudWatch 告警
   ├─ 检查路由表配置
   └─ 使用 VPC Flow Logs 分析流量

Transit Gateway

Transit Gateway 概述

什么是 Transit Gateway:

AWS Transit Gateway:
├─ 区域级别的网络中心
├─ 连接多个 VPC 和本地网络
├─ 简化网络拓扑
├─ 集中管理路由
└─ 支持跨区域 Peering

优势对比 VPC Peering:
VPC Peering:         Transit Gateway:
VPC-A ←→ VPC-B       VPC-A
VPC-A ←→ VPC-C         ↓
VPC-B ←→ VPC-C       TGW ← VPC-B
需要 3 个连接           ↓
                     VPC-C
                    需要 1 个中心

当 VPC 数量增加:
N 个 VPC 的 Peering:N*(N-1)/2 个连接
N 个 VPC 的 TGW:N 个连接

Transit Gateway 特性:

核心功能:
├─ 路由表管理
├─ 路由传播
├─ 关联和传播
├─ 跨账户共享
└─ 跨区域 Peering

容量:
├─ 每个 TGW 最多 5,000 个 VPC
├─ 最大带宽:50 Gbps per VPC
├─ 支持 ECMP(等价多路径)
└─ 自动扩展

高可用性:
├─ 区域级别的冗余
├─ 跨 AZ 部署
├─ 无单点故障
└─ AWS 托管服务

创建 Transit Gateway

基础配置:

# 1. 创建 Transit Gateway
TGW_ID=$(aws ec2 create-transit-gateway \
  --description "Main Transit Gateway" \
  --options \
    AmazonSideAsn=64512,\
    AutoAcceptSharedAttachments=disable,\
    DefaultRouteTableAssociation=enable,\
    DefaultRouteTablePropagation=enable,\
    DnsSupport=enable,\
    VpnEcmpSupport=enable \
  --tag-specifications 'ResourceType=transit-gateway,Tags=[{Key=Name,Value=Main-TGW}]' \
  --query 'TransitGateway.TransitGatewayId' \
  --output text)

echo "Transit Gateway ID: $TGW_ID"

# 2. 等待 Transit Gateway 可用
aws ec2 wait transit-gateway-available \
  --transit-gateway-ids $TGW_ID

# 3. 附加 VPC-A
TGW_ATTACH_A=$(aws ec2 create-transit-gateway-vpc-attachment \
  --transit-gateway-id $TGW_ID \
  --vpc-id $VPC_A_ID \
  --subnet-ids $VPC_A_SUBNET_1 $VPC_A_SUBNET_2 \
  --tag-specifications 'ResourceType=transit-gateway-attachment,Tags=[{Key=Name,Value=VPC-A-Attachment}]' \
  --query 'TransitGatewayVpcAttachment.TransitGatewayAttachmentId' \
  --output text)

# 4. 附加 VPC-B
TGW_ATTACH_B=$(aws ec2 create-transit-gateway-vpc-attachment \
  --transit-gateway-id $TGW_ID \
  --vpc-id $VPC_B_ID \
  --subnet-ids $VPC_B_SUBNET_1 $VPC_B_SUBNET_2 \
  --tag-specifications 'ResourceType=transit-gateway-attachment,Tags=[{Key=Name,Value=VPC-B-Attachment}]' \
  --query 'TransitGatewayVpcAttachment.TransitGatewayAttachmentId' \
  --output text)

# 5. 附加 VPC-C
TGW_ATTACH_C=$(aws ec2 create-transit-gateway-vpc-attachment \
  --transit-gateway-id $TGW_ID \
  --vpc-id $VPC_C_ID \
  --subnet-ids $VPC_C_SUBNET_1 $VPC_C_SUBNET_2 \
  --tag-specifications 'ResourceType=transit-gateway-attachment,Tags=[{Key=Name,Value=VPC-C-Attachment}]' \
  --query 'TransitGatewayVpcAttachment.TransitGatewayAttachmentId' \
  --output text)

# 6. 等待所有 attachment 可用
aws ec2 wait transit-gateway-attachment-available \
  --transit-gateway-attachment-ids $TGW_ATTACH_A $TGW_ATTACH_B $TGW_ATTACH_C

# 7. VPC 路由表配置(每个 VPC)
aws ec2 create-route \
  --route-table-id $VPC_A_RTB \
  --destination-cidr-block 10.0.0.0/8 \
  --transit-gateway-id $TGW_ID

aws ec2 create-route \
  --route-table-id $VPC_B_RTB \
  --destination-cidr-block 10.0.0.0/8 \
  --transit-gateway-id $TGW_ID

aws ec2 create-route \
  --route-table-id $VPC_C_RTB \
  --destination-cidr-block 10.0.0.0/8 \
  --transit-gateway-id $TGW_ID

网络隔离配置:

# 场景:生产和开发环境隔离

# 1. 创建生产路由表
PROD_RTB=$(aws ec2 create-transit-gateway-route-table \
  --transit-gateway-id $TGW_ID \
  --tag-specifications 'ResourceType=transit-gateway-route-table,Tags=[{Key=Name,Value=Production-RTB}]' \
  --query 'TransitGatewayRouteTable.TransitGatewayRouteTableId' \
  --output text)

# 2. 创建开发路由表
DEV_RTB=$(aws ec2 create-transit-gateway-route-table \
  --transit-gateway-id $TGW_ID \
  --tag-specifications 'ResourceType=transit-gateway-route-table,Tags=[{Key=Name,Value=Development-RTB}]' \
  --query 'TransitGatewayRouteTable.TransitGatewayRouteTableId' \
  --output text)

# 3. 关联生产 VPC
aws ec2 associate-transit-gateway-route-table \
  --transit-gateway-route-table-id $PROD_RTB \
  --transit-gateway-attachment-id $PROD_VPC_ATTACH

# 4. 关联开发 VPC
aws ec2 associate-transit-gateway-route-table \
  --transit-gateway-route-table-id $DEV_RTB \
  --transit-gateway-attachment-id $DEV_VPC_ATTACH

# 5. 配置路由传播(生产环境仅传播生产 VPC)
aws ec2 enable-transit-gateway-route-table-propagation \
  --transit-gateway-route-table-id $PROD_RTB \
  --transit-gateway-attachment-id $PROD_VPC_ATTACH

# 开发环境可以传播所有 VPC(根据需求)
aws ec2 enable-transit-gateway-route-table-propagation \
  --transit-gateway-route-table-id $DEV_RTB \
  --transit-gateway-attachment-id $DEV_VPC_ATTACH

架构示意:

             ┌─────────────────┐
             │ Transit Gateway │
             │   (Regional)    │
             └────────┬────────┘
                      │
      ┌───────────────┼───────────────┐
      │               │               │
┌─────▼────┐    ┌────▼─────┐   ┌────▼─────┐
│  VPC-A   │    │  VPC-B   │   │  VPC-C   │
│10.0.0.0  │    │10.1.0.0  │   │10.2.0.0  │
│  /16     │    │  /16     │   │  /16     │
└──────────┘    └──────────┘   └──────────┘

成本(us-east-1):
├─ TGW 小时费:$0.05/小时 = $36/月
├─ 每个 Attachment:$0.05/小时 = $36/月
├─ 3 个 VPC:3 x $36 = $108/月
├─ 数据处理:$0.02/GB
└─ 总计:$144/月 + 数据费用

Transit Gateway vs VPC Peering

对比分析:

场景 1:3 个 VPC 互联

VPC Peering:
├─ 需要 3 个 Peering 连接
├─ 成本:数据传输费(同区域免费)
├─ 管理:3 组路由配置
└─ 扩展:每增加 1 个 VPC 需要 N 个新 Peering

Transit Gateway:
├─ 需要 3 个 Attachment
├─ 成本:$144/月 + 数据费
├─ 管理:集中化路由
└─ 扩展:每增加 1 个 VPC 只需 1 个 Attachment

场景 2:10 个 VPC 互联

VPC Peering:
├─ 需要 45 个 Peering 连接(10*9/2)
├─ 管理复杂度:O(N²)
└─ 不推荐

Transit Gateway:
├─ 需要 10 个 Attachment
├─ 管理复杂度:O(N)
└─ 推荐

选择建议:
├─ ≤3 个 VPC:VPC Peering
├─ 3-5 个 VPC:考虑未来扩展
└─ >5 个 VPC:Transit Gateway

VPN 连接

Site-to-Site VPN

VPN 组件:

AWS Site-to-Site VPN 包括:
├─ 客户网关(Customer Gateway, CGW)
│   └─ 代表本地端的 VPN 设备
├─ 虚拟私有网关(Virtual Private Gateway, VGW)
│   └─ AWS 端的 VPN 端点
└─ VPN 连接(VPN Connection)
    ├─ 2 个 IPsec 隧道(高可用)
    └─ 静态或动态路由(BGP)

创建 VPN 连接:

# 1. 创建客户网关
CGW_ID=$(aws ec2 create-customer-gateway \
  --type ipsec.1 \
  --public-ip 203.0.113.12 \
  --bgp-asn 65000 \
  --tag-specifications 'ResourceType=customer-gateway,Tags=[{Key=Name,Value=OnPrem-CGW}]' \
  --query 'CustomerGateway.CustomerGatewayId' \
  --output text)

# 2. 创建虚拟私有网关
VGW_ID=$(aws ec2 create-vpn-gateway \
  --type ipsec.1 \
  --amazon-side-asn 64512 \
  --tag-specifications 'ResourceType=vpn-gateway,Tags=[{Key=Name,Value=VPC-VGW}]' \
  --query 'VpnGateway.VpnGatewayId' \
  --output text)

# 3. 附加到 VPC
aws ec2 attach-vpn-gateway \
  --vpn-gateway-id $VGW_ID \
  --vpc-id $VPC_ID

# 4. 创建 VPN 连接
VPN_ID=$(aws ec2 create-vpn-connection \
  --type ipsec.1 \
  --customer-gateway-id $CGW_ID \
  --vpn-gateway-id $VGW_ID \
  --options "StaticRoutesOnly=false,TunnelOptions=[{TunnelInsideCidr=169.254.10.0/30,PreSharedKey=MySecretKey123},{TunnelInsideCidr=169.254.11.0/30,PreSharedKey=MySecretKey456}]" \
  --tag-specifications 'ResourceType=vpn-connection,Tags=[{Key=Name,Value=OnPrem-VPN}]' \
  --query 'VpnConnection.VpnConnectionId' \
  --output text)

# 5. 启用路由传播
aws ec2 enable-vgw-route-propagation \
  --route-table-id $VPC_RTB \
  --gateway-id $VGW_ID

# 6. 下载配置文件
aws ec2 describe-vpn-connections \
  --vpn-connection-ids $VPN_ID \
  --query 'VpnConnections[0].CustomerGatewayConfiguration' \
  --output text > vpn-config.xml

VPN 架构:

本地数据中心                    AWS VPC
┌──────────────┐             ┌──────────────┐
│   VPN Device │             │     VGW      │
│  203.0.113.12│◄═══════════►│   (AWS端)    │
│   (CGW)      │  IPsec VPN  │              │
└──────────────┘             └──────┬───────┘
                                    │
                            ┌───────▼───────┐
                            │   Private     │
                            │   Subnet      │
                            └───────────────┘

特性:
├─ 2 个 IPsec 隧道(主备)
├─ 加密传输
├─ 支持 BGP 动态路由
└─ 按小时计费

Transit Gateway VPN

集中式 VPN 架构:

# 1. 创建 Transit Gateway VPN Attachment
TGW_VPN=$(aws ec2 create-vpn-connection \
  --type ipsec.1 \
  --customer-gateway-id $CGW_ID \
  --transit-gateway-id $TGW_ID \
  --options "StaticRoutesOnly=false" \
  --tag-specifications 'ResourceType=vpn-connection,Tags=[{Key=Name,Value=TGW-VPN}]' \
  --query 'VpnConnection.VpnConnectionId' \
  --output text)

# 2. Transit Gateway 自动创建 Attachment 并传播路由

优势:

Transit Gateway VPN vs VGW VPN:

TGW VPN:
├─ 单个 VPN 连接所有 VPC
├─ 更高带宽(支持 ECMP)
├─ 集中管理
└─ 易于扩展

VGW VPN:
├─ 每个 VPC 需要独立 VPN
├─ 带宽限制:1.25 Gbps per隧道
├─ 分散管理
└─ 管理复杂

选择:
├─ 多 VPC:Transit Gateway VPN
└─ 单 VPC:VGW VPN 即可

AWS Direct Connect

Direct Connect 概述

什么是 Direct Connect:

AWS Direct Connect (DX):
├─ 本地到 AWS 的专用网络连接
├─ 绕过公网
├─ 更稳定的网络性能
├─ 降低数据传输成本
└─ 支持 1 Gbps 或 10 Gbps

优势:
├─ 更低延迟
├─ 更稳定的带宽
├─ 更高的吞吐量
├─ 更安全(专线)
└─ 成本节省(大流量)

连接类型:

1. 专用连接(Dedicated Connection):
   ├─ 1 Gbps、10 Gbps、100 Gbps
   ├─ 物理端口专用
   ├─ 直接连接到 AWS
   └─ 适合大流量

2. 托管连接(Hosted Connection):
   ├─ 50 Mbps 到 10 Gbps
   ├─ 通过 APN 合作伙伴
   ├─ 共享物理连接
   └─ 适合中小流量

3. Direct Connect Gateway:
   ├─ 连接多个区域的 VPC
   ├─ 单个 DX 连接多个 VPC
   └─ 简化架构

架构示意:

本地数据中心
    │
    ▼
┌─────────────┐
│ 本地路由器  │
└──────┬──────┘
       │ 专线(1Gbps/10Gbps)
       ▼
┌─────────────┐
│ DX Location │ ◄─── AWS Direct Connect 位置
└──────┬──────┘
       │
       ▼
┌─────────────┐
│     VIF     │ ◄─── 虚拟接口
│ (Virtual    │
│ Interface)  │
└──────┬──────┘
       │
   ┌───▼────┐
   │  VGW   │ ◄─── 可以连接到 VGW 或 TGW
   └────┬───┘
        │
   ┌────▼────┐
   │   VPC   │
   └─────────┘

Direct Connect配置

创建虚拟接口:

# 1. 创建私有虚拟接口(Private VIF)
VIF_ID=$(aws directconnect create-private-virtual-interface \
  --connection-id $DX_CONNECTION_ID \
  --new-private-virtual-interface \
    virtualInterfaceName=PrivateVIF-to-VPC,\
    vlan=100,\
    asn=65000,\
    amazonAddress=169.254.1.1/30,\
    customerAddress=169.254.1.2/30,\
    virtualGatewayId=$VGW_ID \
  --query 'virtualInterfaceId' \
  --output text)

# 2. 创建公有虚拟接口(Public VIF)- 访问 AWS 公共服务
PUBLIC_VIF=$(aws directconnect create-public-virtual-interface \
  --connection-id $DX_CONNECTION_ID \
  --new-public-virtual-interface \
    virtualInterfaceName=PublicVIF,\
    vlan=200,\
    asn=65000,\
    amazonAddress=175.45.176.1/30,\
    customerAddress=175.45.176.2/30,\
    routeFilterPrefixes=[{cidr=203.0.113.0/24}] \
  --query 'virtualInterfaceId' \
  --output text)

Direct Connect Gateway:

# 1. 创建 DX Gateway
DXGW_ID=$(aws directconnect create-direct-connect-gateway \
  --direct-connect-gateway-name Main-DXGW \
  --amazon-side-asn 64512 \
  --query 'directConnectGateway.directConnectGatewayId' \
  --output text)

# 2. 关联多个 VGW
aws directconnect create-direct-connect-gateway-association \
  --direct-connect-gateway-id $DXGW_ID \
  --virtual-gateway-id $VGW_US_EAST

aws directconnect create-direct-connect-gateway-association \
  --direct-connect-gateway-id $DXGW_ID \
  --virtual-gateway-id $VGW_US_WEST

# 3. 创建虚拟接口连接到 DX Gateway
aws directconnect create-private-virtual-interface \
  --connection-id $DX_CONNECTION_ID \
  --new-private-virtual-interface \
    virtualInterfaceName=VIF-to-DXGW,\
    vlan=100,\
    asn=65000,\
    amazonAddress=169.254.1.1/30,\
    customerAddress=169.254.1.2/30,\
    directConnectGatewayId=$DXGW_ID

冗余和高可用

高可用架构:

推荐架构:

主用 Direct Connect:
本地DC → DX Location A → us-east-1

备用 Direct Connect:
本地DC → DX Location B → us-east-1

VPN 备份:
本地DC → Internet → VPN → us-east-1

优先级:
1. 主用 DX(BGP AS-PATH 短)
2. 备用 DX(BGP AS-PATH 长)
3. VPN(BGP AS-PATH 最长或更低优先级)

成本:
├─ 2x DX:$0.30/小时 x 2 = $432/月
├─ VPN:$0.05/小时 = $36/月
├─ 数据传输:根据流量
└─ 总计:$468/月 + 数据费用

VPC Endpoints

VPC Endpoints 概述

什么是 VPC Endpoints:

VPC Endpoints 让 VPC 私有访问 AWS 服务:
├─ 流量不经过 Internet
├─ 流量不经过 NAT Gateway
├─ 更安全
├─ 更低延迟
└─ 降低成本(无 NAT 费用)

类型:
├─ Gateway Endpoints(免费)
│   ├─ S3
│   └─ DynamoDB
└─ Interface Endpoints(按小时计费)
    ├─ 大多数 AWS 服务
    └─ 使用 PrivateLink 技术

Gateway Endpoints

S3 Gateway Endpoint:

# 1. 创建 S3 Gateway Endpoint
S3_ENDPOINT=$(aws ec2 create-vpc-endpoint \
  --vpc-id $VPC_ID \
  --service-name com.amazonaws.us-east-1.s3 \
  --route-table-ids $PRIVATE_RTB_1 $PRIVATE_RTB_2 \
  --tag-specifications 'ResourceType=vpc-endpoint,Tags=[{Key=Name,Value=S3-Gateway-Endpoint}]' \
  --query 'VpcEndpoint.VpcEndpointId' \
  --output text)

# 2. Endpoint 自动在路由表中添加路由
# 目的地:pl-xxxxx (S3 prefix list)
# 目标:vpce-xxxxx

# 3. 配置 Endpoint 策略(可选)
cat > s3-endpoint-policy.json <<EOF
{
  "Statement": [{
    "Effect": "Allow",
    "Principal": "*",
    "Action": [
      "s3:GetObject",
      "s3:PutObject"
    ],
    "Resource": "arn:aws:s3:::my-bucket/*"
  }]
}
EOF

aws ec2 modify-vpc-endpoint \
  --vpc-endpoint-id $S3_ENDPOINT \
  --policy-document file://s3-endpoint-policy.json

DynamoDB Gateway Endpoint:

# 创建 DynamoDB Gateway Endpoint
DDB_ENDPOINT=$(aws ec2 create-vpc-endpoint \
  --vpc-id $VPC_ID \
  --service-name com.amazonaws.us-east-1.dynamodb \
  --route-table-ids $PRIVATE_RTB_1 $PRIVATE_RTB_2 \
  --tag-specifications 'ResourceType=vpc-endpoint,Tags=[{Key=Name,Value=DynamoDB-Gateway-Endpoint}]' \
  --query 'VpcEndpoint.VpcEndpointId' \
  --output text)

成本节省示例:

场景:私有子网 EC2 访问 S3

不使用 Endpoint:
EC2 → NAT Gateway → Internet → S3
成本:
├─ NAT:$0.045/GB
└─ 如果 100GB/月:$4.5

使用 Gateway Endpoint:
EC2 → S3 Gateway Endpoint → S3
成本:
└─ $0(免费)

节省:$4.5/月(仅 100GB)

Interface Endpoints

创建 Interface Endpoint:

# 1. 创建 Interface Endpoint(以 EC2 为例)
EC2_ENDPOINT=$(aws ec2 create-vpc-endpoint \
  --vpc-id $VPC_ID \
  --service-name com.amazonaws.us-east-1.ec2 \
  --vpc-endpoint-type Interface \
  --subnet-ids $PRIVATE_SUBNET_1 $PRIVATE_SUBNET_2 \
  --security-group-ids $ENDPOINT_SG \
  --private-dns-enabled \
  --tag-specifications 'ResourceType=vpc-endpoint,Tags=[{Key=Name,Value=EC2-Interface-Endpoint}]' \
  --query 'VpcEndpoint.VpcEndpointId' \
  --output text)

# 2. 创建 Endpoint 安全组
ENDPOINT_SG=$(aws ec2 create-security-group \
  --group-name endpoint-sg \
  --description "Security group for VPC endpoints" \
  --vpc-id $VPC_ID \
  --query 'GroupId' \
  --output text)

# 3. 允许来自 VPC 的 HTTPS 流量
aws ec2 authorize-security-group-ingress \
  --group-id $ENDPOINT_SG \
  --protocol tcp \
  --port 443 \
  --cidr $VPC_CIDR

常用 Interface Endpoints:

# EC2 API
com.amazonaws.region.ec2

# Systems Manager
com.amazonaws.region.ssm
com.amazonaws.region.ssmmessages
com.amazonaws.region.ec2messages

# ECR (Docker)
com.amazonaws.region.ecr.api
com.amazonaws.region.ecr.dkr

# CloudWatch
com.amazonaws.region.logs
com.amazonaws.region.monitoring

# Secrets Manager
com.amazonaws.region.secretsmanager

# Lambda
com.amazonaws.region.lambda

成本(us-east-1):
├─ Interface Endpoint:$0.01/小时 per AZ
├─ 2 AZ 部署:$14.4/月
├─ 数据处理:$0.01/GB
└─ 适合需要高安全性的场景

连接方案对比

完整对比:

┌──────────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│    方案      │ VPC      │Transit   │Site-to-  │Direct    │VPC       │
│              │ Peering  │Gateway   │Site VPN  │Connect   │Endpoints │
├──────────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 用途         │VPC互联   │多VPC中心 │本地连AWS │专线连接  │访问AWS   │
│              │          │          │          │          │服务      │
├──────────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 带宽         │无限制    │50Gbps    │1.25Gbps  │1-100Gbps │取决于EC2 │
├──────────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 延迟         │很低      │低        │中等      │很低      │很低      │
├──────────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 成本(月)     │数据费    │$144+数据 │$36+数据  │$216+数据 │Gateway免 │
│              │(跨区域)  │费        │费        │费        │费/接口收 │
├──────────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 设置时间     │分钟      │分钟      │分钟-小时 │周-月     │分钟      │
├──────────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 复杂度       │低        │中        │中        │高        │低        │
└──────────────┴──────────┴──────────┴──────────┴──────────┴──────────┘

选择决策树:

需要连接什么?

├─ VPC 之间
│   ├─ ≤3 个 VPC → VPC Peering
│   └─ >3 个 VPC → Transit Gateway
│
├─ 本地到 AWS
│   ├─ 测试/小流量 → Site-to-Site VPN
│   ├─ 生产/大流量 → Direct Connect
│   └─ 多 VPC → Transit Gateway + VPN/DX
│
└─ AWS 服务
    ├─ S3/DynamoDB → Gateway Endpoints(免费)
    └─ 其他服务 → Interface Endpoints(按需)

正确选择和配置连接方案是构建灵活、高效网络的关键!