AWS API 端点为何按区域区分 - 全球服务与区域服务的设计

解析 ec2.us-east-1.amazonaws.com 这样的区域端点与 iam.amazonaws.com 这样的全球端点分离的设计原因,以及双栈端点和 FIPS 端点的存在。

区域端点的设计意图

AWS 的大多数服务拥有按区域独立的 API 端点。EC2 为 ec2.us-east-1.amazonaws.com、ec2.ap-northeast-1.amazonaws.com 等形式。这种设计的核心意图是故障隔离。如果所有区域共享一个 API 端点,该端点的故障将导致全球所有区域的服务不可用。通过按区域分离端点,即使某个区域的控制平面发生故障,其他区域也不受影响。此外,区域端点使 API 请求在地理上靠近处理该请求的基础设施,降低延迟。从 ap-northeast-1 的 EC2 实例调用 ec2.ap-northeast-1.amazonaws.com 时,请求在东京区域内完成,无需跨越太平洋。

全球服务的特殊设计

IAMRoute 53CloudFrontWAF(CloudFront 用)、STS 的全球端点使用不含区域代码的 URL(iam.amazonaws.com、route53.amazonaws.com 等)。这些服务之所以设计为全球服务,是因为其管理的资源本质上是全球性的。IAM 用户和角色在所有区域通用,Route 53 的 DNS 记录面向全球解析,CloudFront 的分发配置应用于全球所有边缘位置。全球服务的控制平面实际上托管在 us-east-1,这是 AWS 的历史性设计决策。因此 us-east-1 发生大规模故障时,全球服务的管理操作可能受到影响。但数据平面(实际的 DNS 解析、CDN 内容分发等)是分布式的,即使控制平面故障也能继续运行。

S3 端点的复杂性

S3 的端点在 AWS 服务中最为复杂。路径样式(s3.amazonaws.com/bucket-name/key)和虚拟主机样式(bucket-name.s3.amazonaws.com/key)两种 URL 格式并存。此外还有区域特定端点(bucket-name.s3.us-east-1.amazonaws.com)。这种复杂性源于 S3 的历史。S3 最初作为全球服务设计,使用单一端点。随着区域扩展,引入了区域特定端点。虚拟主机样式是为了支持静态网站托管和自定义域名而添加的。AWS 已宣布路径样式的新存储桶将不再支持,推进向虚拟主机样式的统一。S3 的双栈端点(bucket-name.s3.dualstack.us-east-1.amazonaws.com)支持 IPv4 和 IPv6 双协议访问。

FIPS 端点 - 美国政府的加密要求

AWS 为许多服务提供符合 FIPS(Federal Information Processing Standards)140-2 的端点。FIPS 端点在 TLS 通信中使用经 FIPS 140-2 验证的加密模块。美国联邦政府机构和处理政府数据的承包商在法律上必须使用 FIPS 验证的加密。FIPS 端点的 URL 格式为 service-fips.region.amazonaws.com(例:ec2-fips.us-east-1.amazonaws.com)。FIPS 端点在功能上与标准端点完全相同,区别仅在于 TLS 层使用的加密模块。非美国政府相关的一般用户无需使用 FIPS 端点。

VPC 端点 - 不经由公共互联网的 API 访问

通常从 EC2 实例调用 AWS API 时,请求经由互联网网关或 NAT Gateway 到达公共互联网,再到达 AWS 的 API 端点。VPC 端点(AWS PrivateLink)消除了这一公共互联网经由。接口型 VPC 端点在 VPC 内创建 ENI(弹性网络接口),API 请求通过 AWS 的内部网络直接到达服务端点。这带来安全性提升(流量不经过公共互联网)、延迟降低(网络路径缩短)和成本削减(无需 NAT Gateway)三重优势。网关型 VPC 端点是 S3 和 DynamoDB 专用的端点类型,通过路由表条目将流量导向服务,无需 ENI 也不产生额外费用。如果想系统学习 AWS 网络设计,专业书籍 (Amazon)可供参考。