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(按需)
正确选择和配置连接方案是构建灵活、高效网络的关键!