AWS VPC 共享:多账户和 VPC 管理的新方法

我与 AWS 的第一次互动是在 6 年前亚太地区(悉尼)AWS 区域推出之后。当时,AWS 管理控制台的服务较少,我很快就找到了 Amazon Virtual Private Cloud (VPC)。在不到 10 分钟的时间内,我可以定义一个新的 VPC,其中包含子网、路由和 Internet 网关。这太神奇了。在使用 Amazon VPC 之前,使用防火墙和交换机等一些网络设备打开箱子需要 10 多分钟。在此之前,我们花了几个月的时间弄清楚网络拓扑结构,查找规格,查看报价,订购,并希望您需要的一切都能及时到达。固件升级、初始配置的几次迭代,几天后,您可能拥有类似于 VPC 的东西。随着 Amazon VPC 的出现,我感受到了软件定义网络的强大功能,它超越了熟悉的网络接口的服务器虚拟化。

快进到今天,大多数 AWS 客户使用多个 AWS 账户。从安全和爆炸半径的角度来看,这是绝对有意义的。作为额外的好处,计费是按帐户计费的,因此一些客户使用它来分配成本。多年来,AWS 使管理多账户 AWS 环境变得更加容易。我们引入了整合账单、AWS Organizations、跨账户 IAM 角色委派以及各种共享资源(如快照、AMI 等)的方式。

有一点是不变的,即 VPC 始终是每个账户的。这意味着必须对网络进行分区,并且每个新账户必须在每个区域拥有自己的 VPC。拥有隔离网络意味着客户现在需要一种从一个 VPC 连接到另一个 VPC 的方法。为此,我们构建了 VPC 对等连接。当您有几个 VPC 时,它可以完成这项工作,但我们的一些客户拥有数百甚至数千个 VPC。此外,对于混合环境,返回您自己的数据中心的连接会随着每个新 VPC 的增加而增加复杂性。我们最近推出了 AWS Transit Gateway 来解决这个问题。

引用杰夫·贝佐斯(Jeff Bezos)2016年致股东的信,“客户总是非常不满意。我们一直在寻找改善客户体验的方法。客户告诉我们,需要一种对 VPC 管理的集中控制形式。他们还要求简化IPv4分配和保留IP地址的方法。许多现代应用程序要求组件(微服务)之间具有高度的互连性。

是时候重新考虑“每个账户的 VPC”架构了。

VPC共享简介

VPC 共享允许客户与同一 AWS 组织内的其他 AWS 账户共享子网。这是一个非常强大的概念,具有许多好处:

  • 职责分离:集中控制的VPC结构、路由、IP地址分配。
  • 应用程序所有者继续拥有资源、帐户和安全组。
  • VPC 共享参与者可以引用彼此的安全组 ID。
  • 效率:子网密度更高,VPN 和 AWS Direct Connect 的高效使用。
  • 例如,通过简化的网络架构,可以避免硬性限制,每个 AWS Direct Connect 连接 50 个 VIF。
  • 可以通过重用 NAT 网关、VPC 接口终端节点和可用区内流量来优化成本。

从本质上讲,我们现在可以解耦帐户和网络。我预计即使共享 VPC,客户也会继续拥有多个 VPC。但是,他们现在可以拥有更少、更大、集中管理的 VPC。 高度互连的应用程序会自动从这种方法中受益。

在这篇博文中,我将向您展示 VPC 共享的工作原理。

设置 VPC 共享

VPC 共享利用最近推出的 AWS Resource Access Manager (AWS RAM)。正如 Jeff Barr 在他的帖子中指出的那样,我们一直在忙于向 AWS RAM 添加更多资源类型。我们添加了 AWS Transit Gateway、Amazon Route 53 解析程序规则、许可证配置,以及现在的 VPC 子网。

如果您以前未使用过 AWS RAM,则必须从 AWS Organization 的主账户启用它。

AWS VPC 共享:多账户和 VPC 管理的新方法

在 AWS RAM 中,我们可以创建资源共享,这些共享类似于存储桶,可以在其中与整个 AWS 组织、组织单位 (OU) 或 AWS 账户共享不同的资源。请记住,子网只能在同一 AWS Organization 内共享。

我在 AWS Organizations 中创建了两个新账户,并通过 AWS 单点登录 (SSO) 授予自己访问权限。

AWS VPC 共享:多账户和 VPC 管理的新方法

我现在将使用账户 1A 创建新的 VPC。此账户将管理 VPC 配置,换句话说,它是 VPC 拥有者。VPC 拥有者将与我们称为 VPC 参与者的其他账户共享子网。在我的示例中,账户 1B 是 VPC 参与者。

我将使用方便的 VPC 快速入门来设置我的 VPC、子网和路由。

AWS VPC 共享:多账户和 VPC 管理的新方法

接下来,我将使用 AWS RAM 创建资源共享。我将它命名为“DEVELOPMENT”,因为我之前创建的 VPC 将托管一些开发工作负载。

AWS VPC 共享:多账户和 VPC 管理的新方法

在此阶段,选择资源和添加委托人(要与之共享的实际帐户)是可选的。但是,我确实为 VPC 参与者填充了一个 12 位数的账户 ID,以节省一些时间。

AWS VPC 共享:多账户和 VPC 管理的新方法

AWS VPC 共享:多账户和 VPC 管理的新方法

现在,我可以导航到 Amazon VPC 控制台子网页面并从那里共享子网。

AWS VPC 共享:多账户和 VPC 管理的新方法

我通过选择要与之共享的资源共享来完成共享。

AWS VPC 共享:多账户和 VPC 管理的新方法

还有一个新的“共享”选项卡,我可以在其中查看我的共享状态。

AWS VPC 共享:多账户和 VPC 管理的新方法

我可以从 AWS RAM 或 Amazon VPC 控制台子网页面共享其他子网。我还可以删除共享。删除共享后,参与者将无法再在共享子网中启动任何新资源。资源将继续运行,直到参与者决定终止它们。它让参与者有时间优雅地退出并防止意外中断。

现在,我将假装自己是应用程序所有者,希望在我新共享的 VPC 中启动一个全新的 EC2 实例。换句话说,我将切换到 VPC 参与者账户。我切换并继续像往常一样启动 EC2 实例。我还能够在控制台中看到我们的共享子网:

AWS VPC 共享:多账户和 VPC 管理的新方法

我还可以看到 VPC ID 旁边有一个注释,说明它正在共享。

AWS VPC 共享:多账户和 VPC 管理的新方法

早些时候,我从 VPC 拥有者账户中启动了另一个 EC2 实例。现在,我想允许它访问在参与者账户中运行的 EC2 实例。为此,我使用 VPC 拥有者账户中的安全组 ID。只需将其添加为源就足够了。请注意,安全组的所有者具有一个账户 ID,而源具有不同的账户 ID。

AWS VPC 共享:多账户和 VPC 管理的新方法

最后,我准备测试连接性。由于每个 VPC 都有一个隐式路由器,因此我不需要进行任何路由配置。

AWS VPC 共享:多账户和 VPC 管理的新方法

我还将两个实例保存在同一个可用区中。尽管流量从一个账户源至另一个账户中的资源,但由于两者共享相同的 VPC 和物理位置,因此无需任何费用。我还可以看到 VPC 所有者账户中的网络接口和相应的所有者 ID。

AWS VPC 共享:多账户和 VPC 管理的新方法

细心的读者可能已经注意到,VPC 所有者的子网位于 us-east-1a 中,但 VPC 参与者将其显示为 us-east-1c。稍后将在本博文中对此进行更多介绍。

作为此次发布的一部分,我们还为 Amazon EC2 API 发布了一些附加属性:OwnerId(指示资源是归您自己的账户所有还是与您共享)和 AvailabilityZoneId(可用区 ID)。大多数客户已经知道,AWS 的目标是跨 AWS 区域的可用区分配资源,并且 AWS 会独立地将每个账户的可用区映射到数据中心。例如,您的 AWS 账户的可用区 us-east-1a 可能与另一个 AWS 账户的 us-east-1a 不同。

要协调跨账户的可用区以进行 VPC 共享,您必须使用 AZ ID,这是可用区的唯一且一致的标识符。例如,use1-az1 是 us-east-1 区域中的可用区之一。通过可用区 ID,您可以确定一个账户中资源相对于另一个账户中的资源的位置。您可以从 AWS RAM 控制台查看您的“真实”可用区映射。

AWS VPC 共享:多账户和 VPC 管理的新方法

与任何其他 VPC 一样,共享 VPC 可以与 AWS PrivateLink、AWS Transit Gateway 和 VPC 对等连接集成。没有放之四海而皆准的方法,除了VPC共享之外,客户还可以选择使用现有的网络服务和构造。我的同事们在 2018 年 AWS re:Invent 大会上出色地介绍了网络架构:请参阅 AWS PrivateLink 的最佳实践许多 VPC 的参考架构

访问控制、权限和故障排除

VPC 拥有者负责创建、管理和删除所有 VPC 级资源,包括子网、路由表、网络 ACL、对等连接、VPC 终端节点、AWS PrivateLink 终端节点、Internet 网关、NAT 网关、虚拟私有网关和中转网关附件。VPC 拥有者无法删除、修改或强制弹出参与者的资源。VPC 拥有者可以查看所有网络接口的详细信息,以及附加到参与者资源的安全组,以便于故障排除和审计。VPC拥有者可以在VPC、子网或弹性网卡级别创建流日志订阅,用于流量监控或故障排除。

VPC参与者负责其资源的创建、管理和删除。参与者无法查看或修改属于其他参与者帐户的资源。他们可以查看路由表的详细信息,以及附加到与其共享的子网的网络 ACL。但是,它们无法修改 VPC 级资源,包括路由表、网络 ACL 或子网。参与者可以使用安全组 ID 引用属于其他参与者或所有者的安全组,参与者只能为他们拥有的接口创建流日志订阅。

客户可能会发现,使用服务控制策略 (SCP) 来拒绝参与者访问创建自己的 VPC 非常有用。在理想情况下,新创建的账户被放入组织单位 (OU) 中,并自动以共享 VPC 的形式接收网络基线。类似的方法可以与 AWS Landing Zone 和账户自动售货功能结合使用。

我创建了一个 SCP 并将其应用于我的 VPC 参与者账户,如下所示,以拒绝创建新 VPC 的能力。

AWS VPC 共享:多账户和 VPC 管理的新方法

正如预期的那样,即使具有完整的 IAM 管理员权限,我也无法再从参与者账户创建新的 VPC。

AWS VPC 共享:多账户和 VPC 管理的新方法

何时不使用 VPC 共享

软件定义网络的美妙之处在于,您可以选择适合您组织的正确方法和功能组合。虽然许多组织可以从 VPC 共享中受益,但在某些情况下,最好继续为每个账户使用一个 VPC:

  • 单独的 VPC 提供最高级别的隔离。
  • 如果他们拥有自己的 VPC,则剥离业务部门会更容易。您只需断开其 AWS 账户与 AWS Organization 的连接并切断连接即可。
  • 喜欢拥有完整堆栈的应用程序所有者将继续更喜欢自己的 VPC。

须知事项

  • VPC 共享仅在同一个 AWS Organization 内可用。
  • 无法共享默认 VPC/子网。
  • 参与者无法使用其他参与者或所有者拥有的安全组启动资源。
  • 参与者无法使用 VPC 的默认安全组启动资源,因为它属于拥有者。
  • 参与者为其资源付费,并支付与可用区间数据传输、Internet 网关、VPC 对等连接以及通过 AWS Direct Connect 传输数据相关的数据传输费用。
  • VPC 拥有者需要跨 NAT 网关、虚拟专用网关、中转网关、AWS PrivateLink 和 VPC 终端节点支付按小时收费(如适用)、数据处理和数据传输费用。
  • 目前,很少有服务不能使用共享子网。

现已推出

除南美洲(圣保罗)、亚太地区(大阪本地)和中国区域外,所有商业 AWS 区域均提供 VPC 共享。使用此功能不收取额外费用。有关 VPC 共享的更多信息,请参阅我们的文档

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/312434.html

(0)
上一篇 2024年3月26日 17:05
下一篇 2024年3月26日 18:32

相关推荐

发表回复

登录后才能评论