介绍
自从我们在 re:Invent 2018 上推出 VPC 共享以来,已经过去了 2 年多。我之前在一篇博客文章“VPC 共享:多账户和 VPC 管理的新方法”中写过关于此功能的文章。该博客涵盖了您需要了解的有关从哪里开始、VPC 共享的好处以及我们决定构建此功能的原因的所有信息。在 re:Invent 2019 大会上,我与 Atlassian 共同介绍了 VPC 共享。该演讲涵盖了许多生产用例以及大规模采用 VPC 共享的经验教训。在这篇博文中,我将分享使用 VPC 共享的 AWS 客户提供的关键注意事项、架构经验教训和最佳实践。在我们详细介绍这些课程之前,我想分享几个故事。
VPC 共享的实际应用
“VPC 共享以及 AWS Transit Gateway 对 FactSet 的微型 AWS 账户方法至关重要。如果没有这些,我们将需要持续管理为每个 AWS 账户预置的 IP 空间,配置 100 个 VPC 之间的互连,并确定每个 VPC 进出数据中心的路由。此外,对于 FactSet 想要运营的每个 AWS 区域,都需要重复此操作。有时,共享 VPC 方法存在一些差距,但我们发现 AWS 致力于改善体验并将共享 VPC 视为一等公民。
– 高拉夫·耆那教。FactSet云平台副总裁兼总监。 | |
“借助 VPC 共享概念,我们可以在一个 AWS 账户中创建 VPC,并在多个账户之间共享它们。其他账户能够在这些共享 VPC 上构建资源,但这些资源在该特定子账户之外不可见。其主机 AWS 账户的速率限制也适用于这些资源。这解决了我们之前由于将所有资源都放在一个 AWS 账户中而不断达到 AWS 速率限制的问题。这种方法对我们的云工程团队来说似乎非常有吸引力,因为我们可以管理 IP 空间、构建 VPC,并与我们的子账户所有者共享它们。然后,团队无需担心管理设置 VPC、路由表或网络访问控制列表的任何开销,就能够使用这些 VPC 并在其上构建资源。
– Achintha Gunasekara,Slack 高级软件工程师。 |
有关 Slack 选择的架构和迁移方法的更多详细信息,请点击博客文章“在 Slack 构建云网络的下一次演变”。
共享子网:每个子网一个 VPC 参与者,或每个子网多个 VPC 参与者
当您选择如何布局共享 VPC 时,需要考虑一些事项,包括如何使子网与 VPC 参与者保持一致。许多人为每个 VPC 参与者创建一组专用子网,通常为每个可用区 (AZ) 创建一个子网。因此,VPC 参与者在三可用区 AWS 区域中至少有三个子网。每个 VPC 参与者拥有一组专用子网可减少爆炸半径。如果 VPC 参与者要共享子网,则 VPC 参与者无法通过耗尽所有可用 IP 来影响其他 VPC 参与者。您可以根据 VPC 基础设施需求分配一组专用子网。这种方法是最佳实践,可实现最大的灵活性,如图 1 所示。
图 1.每个 VPC 参与者的专用子网
如果您受到小型 IP 分配的限制,您可以选择同时与多个 VPC 参与者共享子网。他们接受爆炸半径的影响,转而关注风险缓解。例如,通过定期检查每个子网来监视可用 IP 耗尽。无论您是否使用共享 VPC,这都是一个很好的做法,因为 IP 耗尽也会影响非共享 VPC。在共享 VPC 中,子网 IP 耗尽和其他治理检查可以在 VPC 所有者账户中集中执行。
在非生产环境中,与许多 VPC 参与者共享子网也很受欢迎。这方面的一个例子是团队可以进行实验的沙盒环境。虽然您通常希望非生产环境尽可能接近生产环境,但 IP 分配效率使此选项具有吸引力。
图2.与多个 VPC 参与者共享子网
无论您是与一个或多个参与者共享子网,我都建议您为共享 AWS 基础设施组件(如 VPC 接口终端节点、防火墙终端节点和 NAT 网关)使用专用子网。这些子网不共享,仅在 VPC 拥有者 AWS 账户中使用。
共享 VPC 中的网络分段和分区
最佳做法是,应具有多个环境来促进应用程序生命周期管理,例如:生产、暂存、开发和平台开发。您通常希望隔离不同环境之间的访问,并为每个环境提供单独的共享 VPC。VPC 拥有者使用平台开发环境来测试配置的网络和基础设施级别更改。其他环境通常由提供网络服务的平台团队视为生产环境。如果您允许工作负载在环境之间进行通信,则 AWS PrivateLink 和 AWS Transit Gateway 等服务将发挥作用。对于较小规模的环境,VPC 对等连接也适用。对于大型环境,AWS Transit Gateway 提供了灵活的路由策略的优势,并能够插入网络设备作为集中式分段实施点。(请参阅图 3,了解每个连接在一起的环境的不同共享 VPC 的示例。
图3.与 AWS Transit Gateway 连接的每个环境的共享 VPC
与我合作的许多客户都采用安全分区模型。在此模型中,每个安全区域都有特定的要求。例如,“外部区域”可能具有到 Internet 的路由,并包含外部用户访问的应用程序。“客户区域”可能托管客户数据并具有更严格的网络控制,而“内部区域”是可信的,并且可能具有更粗粒度的网络控制。我不打算在这里详细介绍设计的每个可能选项。相反,我专注于我最常看到的两个:
- 最常见的模型之一是在同一共享 VPC 中具有多个安全区域。由于 VPC 拥有者集中控制路由和网络访问控制列表 (NACL),因此即使在同一个 VPC 中也可以实施严格的安全分段。请记住,NACL 规则的数量是有限的,规则应该是粗粒度的。此外,使用此方法的客户经常配置辅助 VPC CIDR,每个 CIDR 代表不同的安全区域。这允许在流量通过 AWS Transit Gateway 流向其他 VPC 或本地网络时有效使用 NACL 和安全组配置。最后,对于流向 Internet 的流量,VPC 拥有者可以使用 AWS Network Firewall 检查和筛选来自 VPC 参与者的流量,如图 4 所示。在同一图中,NACL 配置示例保护“客户数据区域”免受“外部区域”和任何其他内部网络的影响,除非明确允许。
图4.共享 VPC 中的多个安全区域
- 另一种方法是为每个独特的安全区域和/或环境提供专用的共享 VPC。这通常由更大规模的 AWS 客户使用,并且可以进一步减小爆炸半径。它还可以与集中部署的网络安全设备协同工作。通过这种方法,客户将各种共享 VPC 与 AWS Transit Gateway 连接起来,并插入一个检查设备,以便为必须从一个安全区域到另一个安全区域的流量提供一个中央实施点。
图5.每个共享 VPC 的单个安全区域
共享和权限
VPC 共享使用 AWS Resource Access Manager (RAM) 来控制与哪些 AWS 账户共享哪些子网。启用 RAM 时,将为整个 AWS Organization 启用共享。您可能希望禁用特定 AWS 账户或组织单位 (OU) 的 RAM。服务控制策略 (SCP) 是一种 AWS Organization 策略,可用于管理组织中的权限。例如,您可以创建一个 SCP 来禁用 RAM 并链接到不应共享任何内容的 AWS 账户:
有关适用于RAM的更复杂的策略和其他SCP示例,请参阅此处的文档。您可能还会发现这篇博文 Control VPC sharing in an AWS multi-account setup with service control policies(使用服务控制策略控制 AWS 多账户设置中的 VPC 共享)很有帮助。本文更详细地讨论了 SCP 与 VPC 共享的使用。
在这种情况下,需要考虑两个事项。第一种是删除默认 VPC,第二种是拒绝 VPC 参与者创建新 VPC。我在博客文章 VPC 共享:多账户和 VPC 管理的新方法中谈到了这两个项目。
日志记录和 Amazon GuardDuty
VPC 拥有者负责启用和监控大多数与 VPC 相关的日志。例如,VPC 拥有者可以在 VPC 或子网级别启用 VPC 流日志。(注意:VPC 参与者只能在他们拥有的 ENI 上启用 VPC 流日志。还有VPC DNS查询日志。这些允许 VPC 所有者记录 VPC 内资源进行的所有查询。最佳做法是启用这些功能。
默认情况下,任何 Amazon GuardDuty 结果都仅适用于拥有检测到恶意活动的资源的 AWS 账户。例如,如果有针对 VPC 参与者拥有的 EC2 实例的调查结果,则只有该参与者的 AWS 账户才能看到这些调查结果。VPC 拥有者将无权访问与参与者资源相关的结果。如果需要在 AWS 账户之间共享结果,您可以按照此标准流程启用它。如果 VPC 参与者尚未开启 GuardDuty,但 VPC 拥有者正在运行 GuardDuty,则不会针对该 VPC 参与者的资源生成任何结果。针对 VPC 拥有者资源的任何结果仍将照常生成并发送到 VPC 拥有者账户。
DNS域名
DNS 解析由 VPC 拥有者控制。VPC 拥有者可以设置 Route 53 Resolver 终端节点、转发规则和 VPC 参与者使用的配置,而无需任何进一步配置。如果 VPC 拥有者在 VPC DHCP 设置中配置了自定义 DNS 解析器,则 VPC 参与者将使用 VPC 拥有者指定的 DHCP 设置。
Route 53 私有托管区域 (PHZ) 的工作方式与任何其他 VPC 的工作方式相同。与共享 VPC 关联的 PHZ 可由每个 VPC 参与者解析。如果 VPC 参与者有权在自己的 AWS 账户中创建 PHZ,他们也可以创建 PHZ。为此,VPC 参与者必须拥有 VPC。如果不允许 VPC 参与者创建 PHZ 或没有自己的 VPC,他们可以请求 VPC 拥有者帮助完成此过程。在 VPC 参与者的 AWS 账户中创建 PHZ 后,VPC 参与者必须与 VPC 拥有者账户共享 PHZ。这是在 AWS RAM 外部完成的。请参阅此文档以了解其工作原理。然后,VPC 拥有者可以将 PHZ 与 VPC 关联,为每个 VPC 参与者启用 DNS 名称解析。
超平面弹性网卡
AWS hyperplane 是用于 Network Load Balancer、Interface VPC 终端节点、EFS、AWS Transit Gateway、支持 VPC 的 Lambda 和 NAT Gateway 的网络功能虚拟化平台,可在您的 VPC 中创建特殊的 Hyperplane 弹性网络接口 (ENI)。您可以为每个 VPC 创建的弹性网卡数量为每个服务设置配额。这些配额适用于所有 VPC(共享或非共享)。使用共享 VPC 达到配额的可能性更高,因为 VPC 参与者可以使用 Hyperplane ENI 创建自己的资源。
您可以增加 VPC 拥有者账户中可用的 Hyperplane ENI 数量。请在发出请求时向 AWS Support 提供 VPC ID。在某些情况下,如果 VPC 消耗大量超平面 ENI,则可能需要额外的 VPC。这些 VPC 必须使用 AWS Transit Gateway 进行连接,而不能使用 VPC 对等连接。使用 VPC 对等连接意味着 Hyperplane ENI 配额在所有对等 VPC 之间共享。如果您想了解更多细节,我在 re:Invent 会议、共享 VPC、经验教训和最佳实践中讨论了这个问题和其他主题。
其他注意事项
AWS Client VPN 是一项可由 VPC 参与者部署到共享 VPC 中的服务。由于这可能是网络团队更愿意集中控制和部署的内容,因此您可能希望在 VPC 参与者 AWS 账户(AWS Organization 的特定成员账户)中使用 SCP 禁用客户端 VPN。
VPC 终端节点和 VPC 终端节点服务需要额外考虑。VPC 拥有者创建和管理 VPC 终端节点。拥有者创建 VPC 网关和接口终端节点供所有参与者使用、配置 DNS 和资源级 VPC 终端节点策略。VPC 参与者 AWS 账户无法创建 VPC 终端节点。实质上,VPC 参与者无法创建终端节点来使用 VPC 外部可用的服务。但是,参与者可以通过 AWS PrivateLink 创建 Network Load Balancer 和终端节点服务。这允许 VPC 参与者向其他 AWS 账户公开在 VPC 中运行的服务。如果您没有通过 AWS PrivateLink 提供服务的使用案例,请禁用通过 SCP 创建终端节点服务。
结论
许多客户已成功采用 VPC 共享,并使用它来简化其 AWS 环境。使用 VPC 共享时,有许多与安全性、DNS、Amazon VPC 结构相关的注意事项。VPC 共享的优势对 AWS 客户来说很有价值,遵循本文中概述的最佳实践和经验教训可以更轻松地设计和操作共享 VPC。总而言之,VPC 共享是 AWS 云联网工具箱中的一项重要工具。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/cloud/312454.html