Amazon ANS-C01: 内容分发与边缘网络 — 学习指南
属于 AWS Advanced Networking Specialty ANS-C01 — 学习指南. 使用经过验证的答案练习: Amazon 考试中心, 或参加限时模拟考试: ExamRoll.io.
核心概念
内容分发和边缘网络分离了两个相关的职责:以低延迟传输客户端流量,以及作为靠近最终用户的分布式缓存/计算层。CloudFront 是一个 HTTP(S) CDN 和边缘计算平台,它可以缓存 HTTP 响应,在边缘终止 TLS,并可以使用 Lambda@Edge(复制到区域的完整 Lambda 运行时)或 CloudFront Functions(用于在查看器请求/响应时运行轻量级 JavaScript)在边缘站点运行代码。CloudFront 的行为由通过
undefined
创建的分发配置对象驱动,并使用
undefined
和
undefined
对象进行调整。缓存策略字段(如
undefined
、
undefined
和
undefined
)以及包含在缓存键中的一组标头、Cookie 和查询字符串,共同决定了缓存命中率和源站负载。源站控制包括用于私有 S3 源的 S3 OAC/OAI (
undefined
),以及用于保护私有内容的签名 URL 或签名 Cookie (
undefined
、
undefined
及签名 URL 签署过程)。
Global Accelerator 和 Anycast 在 HTTP 层之下运行。Global Accelerator 从 AWS 边缘网络宣告两个静态任播 IP 地址,并将 TCP/UDP 流量路由到健康的区域终端节点(Network Load Balancers、Application Load Balancers、EC2 实例或 Elastic IPs)。由于 Global Accelerator 工作在 L3/L4,当配置为 TCP 穿透时,它会保留端到端 TLS,并通过使用 AWS 内部骨干网络作为到区域终端节点的“最后一公里”来改善全局路由。对于非 HTTP 协议,或者当客户端和后端之间必须保留真正的端到端加密和双向 TLS (mTLS) 时,使用 Global Accelerator 置于 Network Load Balancer (NLB) 前方的 TCP 穿透路径是典型模式:NLB 在 L4 运行,可扩展至数百万个连接,并可以为 Amazon EKS 中的 Pod 或节点注册 IP 目标。
Lambda@Edge 函数与 CloudFront 行为相关联,必须先部署(使用 Publish 的
undefined
)然后关联到分发的
undefined
中,用于 viewer-request、origin-request、origin-response 和 viewer-response 触发器。由于 Lambda@Edge 会复制到多个边缘区域,版本和发布语义非常重要;应使用带版本的 Lambda 对象并仔细管理部署,以避免在更新期间出现不一致的行为。
关键服务与配置
CloudFront 分发配置依赖于三个紧密耦合的对象:分发本身 (
undefined
/
undefined
)、决定缓存键和 TTL 的
undefined
对象 (
undefined
),以及决定哪些标头/Cookie/查询字符串发送到源站的
undefined
对象 (
undefined
)。对于私有 S3 内容,使用
undefined
或旧版的源访问身份 (origin access identity),并使用
undefined
和
undefined
通过签名 URL / 签名 Cookie 进一步保护访问;SDK 或 cloudfront-signing 实用工具会生成签名 URL 或策略文档及 RSA 签名。失效操作通过
undefined
执行,以选择性地清除缓存的对象。
Global Accelerator 配置通过
undefined
、
undefined
和
undefined
API 调用创建。侦听器可以是用于 gRPC 的 TCP:443 或任何 TCP 端口,它会将流量转发到指向区域 NLB 或 ALB 的终端节点组。当使用 Global Accelerator 进行 TCP 穿透以保留端到端 TLS 和 mTLS 时,请将其与一个 Network Load Balancer 配对,该 NLB 在 443 端口上具有 TCP 侦听器,并且其目标组注册了 Pod IP(目标类型为 ip)或节点端口。在 Kubernetes EKS 中,这通常通过创建一个类型为 LoadBalancer 的 Service 并附带注解(例如
undefined
和
undefined
)来实现,或者通过使用 AWS Load Balancer Controller 创建一个目标类型为 ip 的 NLB 来实现。通过在 Service 上设置
undefined
或使用保留原始源 IP 的 NLB 穿透,来为日志记录保留客户端源 IP。
Global Accelerator 和区域终端节点之间的网络级强制执行使用 AWS 托管的前缀列表来减少管理开销。AWS CLI 调用
undefined
会列出托管的前缀列表;其中名为
undefined
的列表可以在安全组规则中引用 (使用
undefined
并附带
undefined
),以仅允许源自加速器的流量到达 ALB/NLB。在 ALB 终止 TLS 的情况下,使用
undefined
标头记录客户端 IP;当使用 Global Accelerator 进行 NLB 穿透时,客户端 IP 会被原生保留,后端必须处理 TLS 终止/mTLS。
设计模式与权衡
当需求是内容缓存、边缘计算和低延迟 HTTP 响应时,CloudFront 是正确的工具。当不需要源站机密性时,CloudFront 应该在边缘终止 TLS;使用 CachePolicy 和 OriginRequestPolicy,在安全的情况下从缓存键中排除标头和 Cookie,以最大限度地减少对源站的请求。对于仍能从缓存中受益的动态个性化内容,应使用缓存键规范化(基于一小部分标头或签名 Cookie 进行区分),并通过版本化的对象键来设计缓存失效策略,而不是频繁调用 CreateInvalidation。
对于需要端到端 TLS 的协议、以及必须在到达后端(用于 mTLS)之前不得解密的 HTTP/2 和 gRPC 流量,应在前端使用 Global Accelerator + NLB 并启用 TLS 直通来构建 TCP/L4 路径。这样做的权衡是失去了 CloudFront 的 HTTP 缓存和边缘计算能力;然而,Global Accelerator 提供了任播静态 IP、改进的路由和区域故障转移功能。当 ALB 终止 TLS 时,它支持 HTTP/2 和 gRPC,这使得应用层路由(基于主机/路径)和 WAF 集成成为可能,但在 ALB 上终止 TLS 会破坏端到端的 mTLS,并将证书管理放在了负载均衡器层面。对于海量并发连接,NLB 在 L4 上的扩展性更好——NLB 针对连接速率进行了优化并保留源 IP,而 ALB 则专为 HTTP 级别的路由和特性而设计,例如用于主机/路径级别路由的侦听器规则以及与 Cognito/OIDC 的集成。
安全控制和区域隔离模式要求在共享 VPC 对等连接、Transit Gateway、PrivateLink 和负载均衡器终端节点之间进行仔细选择。PrivateLink 提供精细的服务级访问控制,并且由于每个使用者都在其 VPC 中创建一个接口终端节点,因此可以很好地为众多使用者进行扩展。Transit Gateway 适用于高带宽的集中化场景,但缺乏 PrivateLink 终端节点所能提供的按服务划分的精细控制和 SNI/主机级别的可见性。设计必须考虑路由限制、跨账户权限以及在服务边界应用安全组的能力。
常见陷阱与决策标准
一个常见的错误是错误地混合使用缓存控制:让源站设置的 Cache-Control 标头驱动边缘缓存,同时又应用 CloudFront 缓存策略,这可能会产生意想不到的 TTL;除非是刻意为之,否则应优先使用显式的 CachePolicy 对象,而不是仅仅依赖源站标头。另一个陷阱是在需要端到端 TLS 或数百万并发 TCP 连接时选择 ALB;ALB 终止 TLS 会妨碍 mTLS,并且在连接并发性非常高时可能成为瓶颈。试图限制对面向互联网的 ALB 的访问的安全配置,常常忘记使用 Global Accelerator 前缀列表或 WAF 规则来锁定访问;如果没有明确的允许规则,该 ALB 仍可通过其公共 DNS 访问。最后,不使用版本化 Lambda 函数的 Lambda@Edge 部署在发布期间可能会导致行为不一致,因为分发中的关联是绑定到特定的已发布版本的。
实践问题:用例场景
公司:AcmeTelemetrics — 挑战:全球范围的物联网自动售货机群组使用 gRPC over TCP:443 连接到在 us-east-1 区域 Amazon EKS 上运行的后端;要求是实现端到端双向 TLS (mTLS) 以确保流量在传输过程中永不被解密,支持数千个并发连接,并且必须将静态 IP 编程到设备中。
方法:
- 创建一个 Global Accelerator (aws globalaccelerator create-accelerator),为其分配两个静态任播 IP,并在 443 端口上创建一个 TCP 侦听器 (create-listener)。配置一个终端节点组 (create-endpoint-group),该组的目标是位于 us-east-1 区域的一个 Network Load Balancer。
- 在 us-east-1 中配置一个 NLB,使其在 443 端口上拥有一个 TCP 侦听器和一个类型为 ip 的目标组。在 Kubernetes 中,创建一个类型为 LoadBalancer 的 Service,并附上注解
undefined
和
undefined
,设置
undefined
,并将 Pod IP 注册为目标,以便 TLS 直接透传到 Pod。 3) 在 EKS 中部署 gRPC 服务器,并在 Pod 进程中终止 TLS/mTLS。将证书和信任材料存储在 Kubernetes Secrets 中;配置服务器要求进行客户端证书验证以实现双向 TLS。 4) 锁定对 NLB 的直接访问,只允许 Global Accelerator 访问它。方法是更新 NLB 的安全组,使其仅允许来自 AWS 管理的 Global Accelerator 前缀列表的入站流量(通过
undefined
发现并在安全组规则中引用该前缀列表),从而防止设备绕过加速器直接访问 NLB。 5) 通过配置 Kubernetes HorizontalPodAutoscaler 和 Cluster Autoscaler 来监控连接并发性和扩展情况,并确保 NLB 目标组的慢启动和取消注册延迟已针对平滑缩容进行了调整 (modify-target-group-attributes)。使用来自 Global Accelerator、NLB 和 EKS 的 CloudWatch 指标来观察连接数和健康状况。
AWS 理由: Global Accelerator 提供了自动售货机所需的静态任播 IP,并通过 AWS 骨干网络将 TCP 流量路由到区域 NLB,从而提高了可靠性并降低了延迟。NLB 保留了原始客户端 TCP 连接和源 IP,并支持海量并发连接,使 Pod 能够在没有中间 TLS 终止的情况下执行 mTLS 终止。在安全组规则中使用 Global Accelerator 托管的前缀列表可以防止直接绕过加速器,并强制流量只能通过任播 IP 到达。这种组合满足了端到端加密、mTLS、高并发、静态 IP 以及在 EKS 中自动扩展的要求。
练习这些题目 → · 在 ExamRoll.io 上限时练习 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
通过考试 →