Skip to content

终端节点

文档属性说明
难度中级
预计时间20-40 分钟
演示环境AWS VPC / 私有子网
最后验证请参考 AWS 官方文档获取最新信息

完成本指南后,你将能够:

  • 理解 Gateway Endpoint 和 Interface Endpoint 的区别与适用场景
  • 为私有子网中的资源创建 VPC Endpoint
  • 配置安全组和 DNS 解析
  • 一个已存在的 VPC,包含至少一个私有子网
  • VPC 已启用 DNS 解析和 DNS 主机名
  • 具有 VPC 和 EC2 权限的 IAM 用户或 Role

VPC Endpoint 的典型应用场景:

场景说明推荐方案
私有子网访问 AWS 服务EC2、Lambda、ECS 等资源需要访问 S3、SSM、CloudWatch 等服务Gateway Endpoint(S3/DynamoDB)+ Interface Endpoint(其他服务)
合规与安全要求金融、医疗等行业要求流量不经过公网Interface Endpoint,流量完全在 AWS 骨干网内
混合云架构本地数据中心通过 Direct Connect/VPN 访问 AWS 服务Interface Endpoint + Route 53 Resolver
多 VPC 共享服务(同区域)同区域多个 VPC 需要访问同一组 AWS 服务集中式 Endpoint + Transit Gateway + PHZ
多账号共享服务多个 AWS 账号的 VPC 共享 Endpoint集中式 Endpoint + Transit Gateway(RAM 共享)+ PHZ 跨账号关联
跨区域访问 AWS 服务从一个区域访问另一个区域的 AWS 服务远端区域创建 Endpoint + VPC/TGW Peering + PHZ
SaaS 服务集成访问第三方通过 PrivateLink 发布的服务Interface Endpoint(支持原生跨区域访问)

VPC Endpoint 相比 NAT Gateway

维度VPC EndpointNAT Gateway
安全性流量不经过公网,完全在 AWS 网络内流量经过公网,需额外安全措施
费用(S3/DynamoDB)Gateway Endpoint 免费$0.045/小时 + $0.045/GB
费用(其他服务)Interface Endpoint 约 $0.01/小时/AZ + $0.01/GB$0.045/小时 + $0.045/GB
带宽无限制(Gateway)/ 10 Gbps(Interface)最高 100 Gbps
访问范围仅限配置的 AWS 服务任意互联网地址
配置复杂度每个服务需单独创建一次配置,访问所有服务

Gateway Endpoint

优势劣势
完全免费仅支持 S3 和 DynamoDB
无带宽限制不支持跨 VPC 访问
配置简单,仅需路由表条目不支持从本地网络访问
高可用,无需多 AZ 部署无法通过安全组控制
-不支持跨账号共享
-不支持跨区域访问

Interface Endpoint

优势劣势
支持 200+ AWS 服务及第三方 SaaS按小时和数据量收费
支持跨 VPC 共享(通过 Transit Gateway + PHZ)每个 AZ 单独计费
支持从本地网络通过 Direct Connect 访问需配置安全组和 DNS
可通过安全组和 Endpoint Policy 精细控制带宽上限 10 Gbps
支持 Private DNS 透明替换公网端点大规模部署成本较高
支持跨区域访问(2024年新功能)跨区域仅限 NLB 服务,不含 AWS 托管服务

跨账号访问

端点类型跨账号支持实现方式
Gateway Endpoint不支持每个账号的 VPC 需独立创建(免费,无需共享)
Interface Endpoint支持(间接)通过 Transit Gateway + Route 53 Private Hosted Zone 共享

Interface Endpoint 的跨账号共享架构:

  1. 在中心网络账号创建 Interface Endpoint(不启用 Private DNS)
  2. 创建 Route 53 Private Hosted Zone,指向 Endpoint 的私有 IP
  3. 通过 RAM 共享 Transit Gateway 给其他账号
  4. 将 PHZ 关联到其他账号的 VPC(需跨账号授权)

这种架构可显著降低成本,但增加了配置复杂度。适合多账号的企业环境。

跨区域访问

端点类型跨区域支持说明
Gateway Endpoint不支持仅在创建的区域内可用
Interface Endpoint(访问 AWS 服务)不支持原生跨区域需通过 VPC Peering 或 Transit Gateway Peering 间接实现
Interface Endpoint(访问 PrivateLink 服务)支持(2024年12月新功能)仅限基于 NLB 的自定义 Endpoint Service

跨区域访问 AWS 服务的间接方案

%%{init: {"elk": true}}%%
flowchart LR
    subgraph Region_A["区域 A(消费者)"]
        EC2_A["EC2 实例"]
    end
    
    subgraph Region_B["区域 B(服务所在区域)"]
        EP["Interface Endpoint"]
        SSM["SSM 服务"]
    end
    
    EC2_A -->|VPC Peering<br>或 TGW Peering| EP
    EP --> SSM

步骤概要:

  1. 在服务所在区域(Region B)创建 Interface Endpoint
  2. 建立跨区域 VPC Peering 或 Transit Gateway Peering
  3. 配置 Route 53 Private Hosted Zone,将服务域名解析到 Endpoint 私有 IP
  4. 配置路由表,使流量通过 Peering 连接到达 Endpoint

跨区域访问会产生跨区域数据传输费用(约 $0.02/GB),需评估成本效益。

PrivateLink 原生跨区域(2024年12月新功能)

AWS 新推出了 Interface Endpoint 的原生跨区域连接能力,但目前仅支持基于 Network Load Balancer 的自定义 Endpoint Service,不支持 AWS 托管服务(如 SSM、CloudWatch)。

适用场景:

  • 跨区域访问企业内部的 PrivateLink 服务
  • 跨区域访问 AWS Marketplace 中支持跨区域的 SaaS 服务

定价:标准 PrivateLink 费用 + 跨区域数据传输费用($0.02/GB)

费用说明

以下价格基于 us-east-1 区域(2024年),实际价格请查阅 AWS PrivateLink 定价Amazon VPC 定价。其他区域价格可能高 10-20%。

各方案单价对比

方案小时费用数据处理费用月度固定成本(单 AZ)
Gateway Endpoint免费免费$0
Interface Endpoint$0.01/AZ$0.01/GB(首 1 PB)~$7.30/AZ
NAT Gateway$0.045$0.045/GB~$32.85

Interface Endpoint 数据处理费用采用阶梯定价:首 1 PB $0.01/GB,1-5 PB $0.006/GB,5 PB 以上 $0.004/GB。

场景成本估算

以下假设:单 VPC、2 个可用区、每月 100 GB 数据传输。

场景使用方案月度成本估算
EC2 访问 S3Gateway Endpoint$0(免费)
EC2 访问 S3NAT Gateway(2 AZ)~$67($32.85×2 + $4.50 数据处理)
EC2 使用 SSM2× Interface Endpoint(ssm + ssmmessages)~$30($7.30×2×2 AZ + $2 数据处理)
EC2 使用 SSMNAT Gateway(2 AZ)~$67(同上)
完整私有子网方案Gateway(S3)+ 3× Interface(SSM 全套)~$45

大规模环境成本对比

假设:3 个 VPC、3 个可用区、5 个 Interface Endpoint(SSM + CloudWatch Logs)。

架构计算方式月度成本
分布式(每 VPC 独立 Endpoint)5 端点 × 3 AZ × 3 VPC × $7.30~$329
集中式(Transit Gateway 共享)5 端点 × 3 AZ × 1 VPC × $7.30 + TGW 附加费~$153

集中式架构可节省约 50% 以上成本,但需要额外的 Transit Gateway 费用(约 $0.05/小时/附加 + $0.02/GB)。当 VPC 数量超过 3 个时,集中式架构通常更经济。

成本优化建议

  • S3/DynamoDB 始终使用 Gateway Endpoint(100% 节省)
  • 开发/测试环境使用单 AZ 部署(节省 50-67%)
  • 多 VPC 环境考虑集中式架构(节省 50%+)
  • 监控 Interface Endpoint 数据处理量,高流量服务评估是否必要
  • 定期审查未使用的 Endpoint 并删除

在创建终端节点之前,理解以下关键决策点:

Gateway Endpoint vs Interface Endpoint

特性Gateway EndpointInterface Endpoint
支持的服务仅 S3 和 DynamoDB大多数 AWS 服务
费用免费按小时和数据量计费
工作原理路由表条目子网内的 ENI
跨 VPC 访问不支持支持(通过 Transit Gateway)

最佳实践:对于 S3 和 DynamoDB,优先使用 Gateway Endpoint(免费)。其他服务使用 Interface Endpoint。

为什么需要 VPC Endpoint?

私有子网中的资源默认无法访问 AWS 服务的公网端点。传统方案是通过 NAT Gateway,但这会产生数据处理费用且流量需经过公网。VPC Endpoint 使流量完全在 AWS 网络内部传输,更安全且通常更便宜。

Interface Endpoint 的 AZ 规划

每个 Interface Endpoint 需要在子网中创建 ENI。建议在多个可用区创建以实现高可用,但每个 AZ 都会产生费用。对于非关键环境,单 AZ 可降低成本。

%%{init: {"elk": true}}%%
flowchart TB
    subgraph VPC["VPC"]
        subgraph Private["私有子网"]
            EC2["EC2 实例"]
        end
        
        subgraph Endpoints["VPC Endpoints"]
            GW["Gateway Endpoint<br>(S3)"]
            IF["Interface Endpoint<br>(SSM/CloudWatch)"]
        end
        
        RT["路由表"]
    end
    
    subgraph AWS["AWS 服务"]
        S3["S3"]
        SSM["Systems Manager"]
    end
    
    EC2 --> RT
    RT -->|前缀列表路由| GW
    GW --> S3
    EC2 -->|私有 IP| IF
    IF --> SSM

[图片占位符:创建 Gateway Endpoint]

在 AWS Console 中操作:

  1. 打开 VPC Console
  2. 选择 终端节点 > 创建终端节点
    1. 导航到终端节点
  3. 输入名称(如 s3-gateway-endpoint
  4. 服务类别 选择 AWS se服务rvices
  5. 搜索并选择 com.amazonaws..s3,Type 为 Gateway
    1. 选择服务
  6. 选择目标 VPC
  7. 选择需要访问 S3 的子网所关联的路由表
  8. Policy 保持 Full access(或按需配置)
    1. 配置网络
  9. 点击 创建终端节点

创建后,所选路由表会自动添加一条指向 S3 前缀列表的路由。

DynamoDB 的 Gateway Endpoint 创建流程相同,服务名为 com.amazonaws.<region>.dynamodb

2. 创建 Interface Endpoint(以 SSM 为例)

Section titled “2. 创建 Interface Endpoint(以 SSM 为例)”

[图片占位符:创建 Interface Endpoint]

Systems Manager 需要以下 Interface Endpoint:

服务端点服务名用途必需性
ssmcom.amazonaws..ssmSSM API必需
ssmmessagescom.amazonaws..ssmmessagesSession Manager / Run Command必需
ec2messagescom.amazonaws..ec2messagesRun Command(旧版)可选*

以下以 ssm 为例,其他端点操作相同:

  1. 打开 VPC Console
  2. 选择 终端节点 > 创建终端节点
  3. 输入名称(如 ssm-interface-endpoint
  4. 选择类别 选择 AWS 服务
  5. 搜索并选择 com.amazonaws..ssm,Type 为 Interface
    1. 终端节点设置
  6. 选择目标 VPC
  7. 子网:选择需要部署 ENI 的子网(建议至少 2 个 AZ)
  8. 安全组:选择允许 HTTPS 入站的安全组
  9. 启用DNS名称:保持勾选(推荐)
    1. 网络设置
  10. 点击 创建终端节点

全部终端节点

Interface Endpoint 的 ENI 需要安全组控制入站流量。

创建或修改安全组,添加入站规则:

类型协议端口来源
HTTPSTCP443VPC CIDR(如 10.0.0.0/16)

来源可以更精细,如仅允许特定子网 CIDR 或引用其他安全组。

验证DNS

确保 VPC 的 DNS 设置正确:

  1. 在 VPC Console 选择目标 VPC
  2. 点击 操作 > 编辑 VPC 设置
  3. 确认以下两项已启用:
    • 启用 DNS 解析
    • 启用 DNS 主机名

验证端点 DNS 解析(从 VPC 内的实例执行):

选择DNS名称

nslookup ssm.<region>.amazonaws.com

验证DNS解析

如果 Private DNS 已启用,应返回 VPC 内的私有 IP 地址。

[图片占位符:验证连通性]

步骤 1:确认命令可以执行

aws s3 ls

步骤 2:验证流量确实通过 Endpoint

仅命令成功不能证明使用了 Endpoint(也可能走公网)。需要验证路由配置:

# 1. 查看 Gateway Endpoint 关联的路由表
aws ec2 describe-vpc-endpoints \
--filters "Name=vpc-endpoint-type,Values=Gateway" \
--query 'VpcEndpoints[*].[VpcEndpointId,ServiceName,RouteTableIds]' \
--output table
# 2. 确认路由表中存在指向 Endpoint 的路由
# 将 <route-table-id> 替换为上一步返回的路由表 ID
aws ec2 describe-route-tables \
--route-table-ids <route-table-id> \
--query 'RouteTables[0].Routes[?DestinationPrefixListId!=`null`]' \
--output table

预期输出:

DestinationPrefixListId GatewayId Origin State
pl-xxxxxxxx vpce-xxxxxxxxxxxxxxxxx CreateRoute active
# 3. 确认实例所在子网使用该路由表
# 查看 VPC 中所有路由表及其关联情况
aws ec2 describe-route-tables \
--query 'RouteTables[*].[RouteTableId,Associations[*].[SubnetId,Main]]' \
--output text

输出示例:

rtb-0db4db3c3e9bca185
None True
  • Main: True 表示这是 VPC 的主路由表
  • SubnetId: None 表示没有显式关联子网

如果 Endpoint 关联的路由表是主路由表(Main: True),则 VPC 中所有未显式关联其他路由表的子网都会通过 Endpoint 访问 S3。

步骤 1:验证 DNS 解析到私有 IP

nslookup ssm.<region>.amazonaws.com

如果启用了 Private DNS,应返回 VPC 内的私有 IP(如 172.31.x.x10.x.x.x)而非公网 IP。

步骤 2:确认服务可用

aws ssm describe-instance-information --region <region>

如果命令成功执行且 DNS 解析到私有 IP,说明端点配置正确。

私有子网运行 EC2 + SSM 管理

  • Gateway Endpoint: S3(免费)
  • Interface Endpoint: ssm, ssmmessages(ec2messages 可选,部分区域不支持)

私有子网运行 ECS Fargate

  • Gateway Endpoint: S3
  • Interface Endpoint: ecr.api, ecr.dkr, logs

私有子网运行 Lambda(VPC 模式)

  • Gateway Endpoint: S3, DynamoDB(如需要)
  • Interface Endpoint: 按 Lambda 访问的服务添加

端点创建后服务仍无法访问

按以下顺序排查:

检查项排查方法
安全组确认允许 HTTPS 443 入站
DNS 设置确认 VPC 启用了 DNS resolution 和 DNS hostnames
Private DNS对于 Interface Endpoint,确认已启用 Enable DNS name
路由表Gateway Endpoint 需关联正确的路由表
子网选择Interface Endpoint 的 ENI 需要与资源在同一 AZ

Gateway Endpoint 还是 Interface Endpoint for S3?

S3 同时支持两种类型。选择建议:

  • VPC 内部访问 S3:使用 Gateway Endpoint(免费)
  • 从本地网络通过 Direct Connect/VPN 访问 S3:使用 Interface Endpoint

Interface Endpoint 费用较高怎么办?

降低成本的方法:

  • 仅在必要的 AZ 创建 ENI
  • 对于多 VPC 环境,考虑集中式端点架构(通过 Transit Gateway 共享)
  • 评估是否所有服务都需要端点,部分低频服务可通过 NAT Gateway

nslookup 返回公网 IP 而非私有 IP

确认:

  1. VPC 已启用 DNS hostnames 和 DNS resolution
  2. Interface Endpoint 的 Private DNS 选项已启用
  3. 从正确的 VPC 内执行测试

架构师建议配置

场景推荐方案
单 VPC / 学习环境Gateway (S3/DynamoDB) + 按需 Interface Endpoint,单 AZ
生产环境 / 单 VPCGateway (S3/DynamoDB) + Interface Endpoint,多 AZ(至少 2 个)
多 VPC 环境集中式端点架构 + Transit Gateway,显著降低成本
混合云(本地 + AWS)Interface Endpoint + Route 53 Resolver 实现本地 DNS 解析

核心原则:

  1. S3/DynamoDB 始终优先使用 Gateway Endpoint(免费)
  2. Interface Endpoint 按需创建,避免不必要的费用
  3. 生产环境多 AZ 部署确保高可用
  4. 大规模环境考虑集中式架构优化成本