共享 VPC

本页面简要介绍 Google Cloud 中的共享 VPC。通过共享 VPC,组织可以将多个项目中的资源连接到一个公用 Virtual Private Cloud (VPC) 网络,让它们能够使用该网络的内部 IP 地址安全高效地相互通信。

在使用共享 VPC 时,您将项目指定为宿主项目,并将一个或多个其他服务项目连接到该项目。宿主项目中的 VPC 网络称为共享 VPC 网络。 服务项目中的合格资源可以使用共享 VPC 网络中的子网。

通过共享 VPC,组织管理员可以将创建和管理实例等管理职责委托给服务项目管理员,同时保持对子网、路由和防火墙等网络资源的集中控制。此模型允许组织执行以下操作:

  • 为网络管理、审计和访问权限控制实施最小权限安全最佳做法。共享 VPC 管理员可以将网络管理任务委托给共享 VPC 网络中的网络和安全管理员,而不必允许服务项目管理员做出影响网络的更改。仅需给予服务项目管理员创建和管理使用共享 VPC 网络的实例的能力。如需了解详情,请参阅管理员和 IAM 部分。
  • 在网络级别上为组织中的多个服务项目应用和实施一致的访问控制策略,同时委托管理职责。例如,服务项目管理员可以是其项目中的计算实例管理员,在共享 VPC 宿主项目中创建和删除使用已批准子网的实例。
  • 使用服务项目来分隔预算或内部成本中心。如需了解详情,请参阅结算部分。

概念

组织、文件夹和项目

共享 VPC 可连接同一组织内的多个项目。关联的项目可位于同一文件夹内,也可以分别位于不同的文件夹中,但如果它们位于不同的文件夹中,则管理员必须同时拥有这两个文件夹的共享 VPC 管理员权限。如需详细了解组织、文件夹和项目,请参阅 Google Cloud 资源层次结构

参与其中的宿主项目和服务项目不能分属于不同的组织。唯一的例外情况是将您的项目从一个组织迁移到另一个组织。在迁移期间,服务项目可以暂时位于与宿主项目不同的组织中。如需详细了解如何迁移项目,请参阅迁移项目

参与共享 VPC 的项目可以是宿主项目,也可以是服务项目。

  • 宿主项目包含一个或多个共享 VPC 网络共享 VPC 管理员必须先启用某个项目作为宿主项目。之后,共享 VPC 管理员可以将一个或多个服务项目连接到该项目。

  • 服务项目是由共享 VPC 管理员连接到宿主项目的任何项目。此连接可让其参与共享 VPC。在组织中,不同部门或团队运作和管理多个服务项目这种做法十分常见。

  • 一个项目不能既是宿主,同时又是服务项目。因此,一个服务项目不能成为其他服务项目的宿主项目。

  • 您可以创建和使用多个宿主项目;但是,每个服务项目只能连接到一个宿主项目。如需说明,请参阅多个宿主项目示例

  • 您可以在宿主项目中创建网络、子网、次要地址范围、防火墙规则以及其他网络资源。然后,宿主项目可以与服务项目共享所选子网,包括次要范围。在某个服务项目中运行的服务可以使用共享 VPC 与在其他服务项目中运行的资源通信。

为清楚起见,我们将不参与共享 VPC 的项目称为独立项目。这是为了强调它既不是宿主项目也不是服务项目。

独立 VPC 网络是独立项目或服务项目中的非共享 VPC 网络。

网络

共享 VPC 网络是在宿主项目中定义的 VPC 网络,可用作服务项目中合格资源的集中共享网络。共享 VPC 网络可以采用自动模式或自定义模式,但不支持旧式网络

启用宿主项目后,您可以通过两种方式共享网络:

  • 您可以共享所有宿主项目子网。如果您选择此选项,宿主项目中创建的所有新子网(包括新网络中的子网)都将被共享。
  • 您可以指定要共享的子网。如果您仅共享某些子网,则除非您手动更改列表,否则只有这些子网会被共享。

宿主项目和服务项目在项目级上进行连接。服务项目管理员可以访问宿主项目中共享 VPC 网络的子网,如下一节管理员和 IAM 中所述。

组织政策限制条件

将组织政策和 IAM 权限搭配使用可以提供不同级别的访问权限控制。借助组织政策,您可以在组织、文件夹或项目级设置控制。

如果您是组织政策管理员,可以在组织政策中指定以下共享 VPC 限制条件:

  • 您可以限制文件夹或组织中的非宿主项目可连接到的宿主项目集。当共享 VPC 管理员将服务项目连接到宿主项目时,该限制条件适用。该限制条件不会影响现有的连接。即使某项政策拒绝新的连接,现有的连接也会保持不变。如需了解详情,请参阅 constraints/compute.restrictSharedVpcHostProject 限制条件。

  • 您可以指定服务项目可在项目、文件夹或组织级别访问的共享 VPC 子网。当您在指定的子网中创建新资源时,该限制条件适用,并且不影响现有资源。即使某项政策阻止添加新资源,现有的资源也会继续在其子网中正常运行。如需了解详情,请参阅 constraints/compute.restrictSharedVpcSubnetworks 限制条件。

管理员和 IAM

共享 VPC 利用 Identity and Access Management (IAM) 角色处理委托管理。您可以向用户、Google 群组、Google 网域或 Google Cloud 服务账号等 IAM 主账号授予以下角色。如果您需要联系其中任何一位管理员,可以在您的组织或项目的 IAM 政策中进行查找。如果您没有所需的权限,则必须联系组织内的网络或项目管理员。

必需的管理角色

Administrator(IAM 角色) 用途
组织管理员 (resourcemanager.organizationAdmin)
• 组织中的 IAM 主账号
组织管理员具有组织的 resourcemanager.organizationAdmin 角色。他们可以通过授予适当的项目创建和删除角色以及组织的 Shared VPC Admin 角色来指定共享 VPC 管理员。这些管理员可以定义组织级政策,但是特定的文件夹和项目操作需要额外的文件夹和项目角色。
共享 VPC 管理员
compute.xpnAdmin
resourcemanager.projectIamAdmin
• 组织中的 IAM 主账号,或
• 文件夹中的 IAM 主账号
共享 VPC 管理员具有组织或者一个或多个文件夹的 Compute Shared VPC Admin (compute.xpnAdmin)Project IAM Admin (resourcemanager.projectIamAdmin) 角色。他们可以执行设置共享 VPC 所必需的各种任务,例如启用宿主项目、将服务项目连接到宿主项目,以及将共享 VPC 网络内部分或所有子网的访问权限委托给服务项目管理员。给定宿主项目的共享 VPC 管理员通常也是其项目所有者。
如果为某个用户分配了组织的 Compute Shared VPC Admin 角色,则该用户具有该组织内所有文件夹的对应角色。如果为某个用户分配了某个文件夹的这一角色,则该用户具有给定文件夹及其所嵌套的任何文件夹的对应角色。共享 VPC 管理员只能在具有两个不同文件夹的这一角色时才能将这两个文件夹中的项目相关联。
服务项目管理员
(compute.networkUser)
• 组织中的 IAM 主账号,或
• 宿主项目中的 IAM 主账号,或
• 宿主项目中部分子网的 IAM 主账号
共享 VPC 管理员可以通过将整个宿主项目或其共享 VPC 网络的选定子网Network User (compute.networkUser) 角色授予给 IAM 主账号来定义服务项目管理员。服务项目管理员还对服务项目中定义的资源拥有所有权和控制权,因此他们应该拥有对应服务项目的 Instance Admin (compute.instanceAdmin) 角色。他们可能还拥有服务项目的其他 IAM 角色,如 Project Owner。

服务项目管理员

在定义各服务项目管理员时,共享 VPC 管理员可以授予其使用整个宿主项目或仅使用部分子网的权限:

  • 项目级权限:如果共享 VPC 管理员将整个宿主项目的 compute.networkUser 角色授予服务项目管理员,则可将服务项目管理员指定为有权使用宿主项目中的所有子网。此时,服务项目管理员拥有使用宿主项目所有 VPC 网络中所有子网的权限,包括将来添加到宿主项目的子网和 VPC 网络。

  • 子网级权限:如果共享 VPC 管理员将选定子网的 compute.networkUser 角色授予服务项目管理员,则服务项目管理员可被授予一组较为有限的权限,即仅可使用部分子网的权限。仅具有子网级权限的服务项目管理员仅限使用这些子网。将新的共享 VPC 网络或新子网添加到宿主项目后,共享 VPC 管理员应审核 compute.networkUser 角色的权限绑定,以确保所有服务项目管理员的子网级权限均符合预期配置。

网络和安全管理员

共享 VPC 管理员可以完全控制宿主项目中的资源,包括管理共享 VPC 网络。他们可以选择将某些网络管理任务委托给其他 IAM 主账号:

管理员 用途
网络管理员
• 宿主项目中的 IAM 主账号,或
• 组织中的 IAM 主账号
共享 VPC 管理员可以通过将宿主项目的 Network Admin (compute.networkAdmin) 角色授予给 IAM 主账号来指定网络管理员。网络管理员可以完全控制除防火墙规则和 SSL 证书之外的所有网络资源。
安全管理员
• 宿主项目中的 IAM 主账号,或
• 组织中的 IAM 主账号
共享 VPC 管理员可以通过将宿主项目的 Security Admin (compute.securityAdmin) 角色授予给 IAM 主账号来指定安全管理员。安全管理员可以管理防火墙规则和 SSL 证书。

规格

配额和限制

共享 VPC 宿主项目受标准的每项目 VPC 配额限制。共享 VPC 网络受限于 VPC 网络的每网络限制每实例限制。此外,宿主项目和服务项目之间的关系受特定于共享 VPC 的限制的约束。

结算

参与共享 VPC 网络的资源的结算要计入资源所在的服务项目,即使该资源在宿主项目中使用共享 VPC 网络也是如此。

  • 对于使用共享 VPC 网络的服务项目内的资源,用于计算结算金额的费率和规则与资源位于宿主项目本身中的情况相同。
  • 由资源生成的出站流量的计费计入资源定义时所在的项目:
    • 来自实例的出站流量计入包含该实例的项目。例如,如果在服务项目中创建了一个实例,但使用的是共享 VPC 网络,则其生成的出站流量的任何计费均计入其服务项目。通过这种方式,您就可以使用共享 VPC 将资源整理到组织的成本中心之中。
    • 负载平衡器相关的成本将计入包含负载平衡器组件的项目。如需详细了解负载平衡和共享 VPC,请参阅“负载平衡”部分
    • 到 VPN 的出站流量计入包含 VPN 网关资源的项目。例如,如果在共享 VPC 网络中创建 VPN 网关,则 VPN 网关会包含在宿主项目中。 通过 VPN 网关传输的出站流量(无论出站数据传输由哪个服务项目发起)计入宿主项目。
    • 来自共享 VPC 服务项目中的资源通过 VLAN 连接传出的流量所产生的费用计入该 VLAN 连接所属的项目。如需了解详情,请参阅 Cloud Interconnect 价格

资源

合格资源

您可以在共享 VPC 服务项目中使用大多数 Google Cloud 产品和功能。

以下限制适用于有资格参与共享 VPC 情景的资源:

  • 使用共享 VPC 网络并非强制要求。例如,实例管理员可以在服务项目中创建实例,使用该服务项目中的 VPC 网络。服务项目中定义的网络不可共享。

  • 必须重新创建一些资源才能使用共享 VPC 网络。在共享 VPC 管理员将现有项目连接到宿主项目时,该项目成为服务项目,但其现有资源不会自动使用共享网络资源。要使用共享 VPC 网络,服务项目管理员必须创建一项合格的资源,并将其配置为使用共享 VPC 网络的子网。例如,一个服务项目中的现有实例无法重新配置为使用共享 VPC 网络,但可以创建新实例,以使用共享 VPC 网络中的可用子网。此限制适用于专用区域。

IP 地址

在服务项目中创建实例时,您可以将其配置为单栈(仅限 IPv4)实例或双栈(IPv4 和 IPv6)实例,具体取决于宿主项目的子网配置。如需了解详情,请参阅创建实例

如果多个服务项目使用同一共享 VPC 网络连接到一个宿主项目,则这些服务项目中的实例可以使用其内部 IPv4 地址或其内部/外部 IPv6 地址进行内部通信,但需要遵守适用的防火墙规则

Service Project Admin 可以将以下任意 IP 地址类型分配给服务项目中的资源:

  • 临时 IPv4 和 IPv6 地址:可以为服务项目内的实例自动分配临时 IP 地址。例如,Service Project Admin 在创建实例时需要选择共享 VPC 网络及一个可用共享子网。实例的主要内部 IPv4 地址来自所选共享子网的主要 IPv4 地址范围内的可用 IP 地址范围。如果将实例配置为双栈实例,实例的 IPv6 地址将来自所选共享子网的 IPv6 子网范围内的可用 IP 地址范围。

    临时 IPv4 地址也可以自动分配给内部负载均衡器。如需了解详情,请参阅创建内部直通式网络负载均衡器创建内部应用负载均衡器

  • 静态内部 IPv4 和 IPv6 地址:静态内部 IPv4 或 IPv6 地址可以在服务项目中预留。即使 IP 地址的值来自共享 VPC 网络中所选共享子网的可用 IP 地址,也必须在与使用该内部 IPv4 和 IPv6 地址对象的资源相同的服务项目中创建该对象。如需了解详情,请参阅“预配共享 VPC”页面上的预留静态内部 IP4 和 IPv6 地址

  • 静态外部 IPv4 地址:宿主项目中定义的外部 IPv4 地址对象可供宿主项目或附加的任何服务项目内的资源使用。服务项目也可以使用自己的外部 IPv4 地址对象。例如,服务项目中的实例可以使用在其服务项目或宿主项目中定义的区域级外部 IPv4 地址。

  • 静态外部 IPv6 地址:Service Project Admin 也可以选择预留静态外部 IPv6 地址。即使 IP 地址的值来自共享 VPC 网络中所选共享子网的可用 IPv6 地址,也必须在与使用该外部 IPv6 地址对象的资源相同的服务项目中创建该对象。如需了解详情,请参阅“预配共享 VPC”页面上的预留静态外部 IPv6 地址

内部 DNS

同一服务项目中的虚拟机可以使用 Google Cloud 自动创建的内部 DNS 名称相互访问。这些 DNS 名称使用创建虚拟机的服务项目的 ID,即使相应名称指向宿主项目中的内部 IP 地址也是如此。如需查看完整的说明,请参阅“内部 DNS”文档中的内部 DNS 名称和共享 VPC

Cloud DNS 专用地区

您可以在共享 VPC 网络中使用 Cloud DNS 专用地区。 您可以在宿主项目中创建专用地区,并为共享 VPC 网络授予该地区的访问权限,也可以使用跨项目绑定在服务项目中设置该地区。

负载均衡

共享 VPC 可以与 Cloud Load Balancing 结合使用。在大多数情况下,您可以在服务项目中创建后端实例。在这种情况下,所有负载均衡器组件都在相应项目中创建。虽然可以在宿主项目中创建后端实例,但此类设置并不适合典型的共享 VPC 部署,因为它不分隔网络管理和服务开发职责。

使用下表中的链接详细了解每种类型的负载均衡器支持的共享 VPC 架构。

负载均衡器类型 Links
外部应用负载均衡器 共享 VPC 架构
内部应用负载均衡器 共享 VPC 架构
外部代理网络负载均衡器 共享 VPC 架构
内部代理网络负载均衡器 共享 VPC 架构
内部直通式网络负载均衡器 共享 VPC 架构
外部直通式网络负载均衡器 共享 VPC 架构

示例和使用情形

基本概念

图 1 展示了一个简单的共享 VPC 场景:

图 1. 具有共享 VPC 网络的宿主项目会为两个服务项目提供内部连接,而独立项目不使用共享 VPC(点击放大)。
  • 该组织的共享 VPC 管理员创建了一个宿主项目,并为其连接了两个服务项目:

    • 可对 Service project A 中的服务项目管理员进行配置,允许其访问共享 VPC 网络中的全部或部分子网。至少具有 10.0.1.0/24 subnet 的子网级权限的服务项目管理员在 us-west1 区域的一个地区内创建了 Instance A。此实例从 10.0.1.0/24 CIDR 块获取其内部 IP 地址 10.0.1.3

    • 可对 Service project B 中的服务项目管理员进行配置,允许其访问共享 VPC 网络中的全部或部分子网。至少具有 10.15.2.0/24 subnet 的子网级权限的服务项目管理员在 us-east1 区域的一个地区内创建了 Instance B。此实例从 10.15.2.0/24 CIDR 块获取其内部 IP 地址 10.15.2.4

  • 独立项目完全不参与共享 VPC;它既不是宿主项目,也不是服务项目。独立实例由至少具有项目的 compute.InstanceAdmin 角色的 IAM 主账号创建。

多个宿主项目

图 2 演示了如何使用共享 VPC 构建彼此分隔的测试和生产环境。在本例中,组织决定使用两个独立的宿主项目,即一个测试环境和一个生产环境

图 2. 测试环境宿主项目和生产环境宿主项目使用共享 VPC 创建不同的生产和测试环境(点击放大)。
  • 该组织的共享 VPC 管理员创建了两个宿主项目,并为其连接了两个服务项目,如下所示:

    • Apps testingMobile testing 服务项目连接到 Test environment 宿主项目。您可以配置每个项目中的 Service Project Admin,以访问 Testing network 中的全部或部分子网。

    • Apps productionMobile production 服务项目连接到 Production environment 宿主项目。您可以配置每个项目中的 Service Project Admin,以访问 Production network 中的全部或部分子网。

  • 两个宿主项目均有一个共享 VPC 网络,其子网配置为使用相同的 CIDR 范围。在 Testing networkProduction network 中,两个子网均如下所示:

    • us-west1 区域中的 10.0.1.0/24 subnet

    • us-east1 区域中的 10.15.2.0/24 subnet

  • 考虑 Apps testing 服务项目中的 Instance ATApps production 服务项目中的 Instance AP

    • 服务项目管理员可以创建类似于它们的实例,只要这些管理员至少具有 10.0.1.0/24 subnet 子网级权限即可。

    • 注意两个实例都使用 IP 地址 10.0.1.3。这是可以接受的做法,因为每个实例都存在于一个服务项目中,而该服务项目连接到包含自己的共享 VPC 网络的唯一宿主项目。测试和生产网络都以相同的方式进行了有针对性的配置。

    • 使用 10.0.1.0/24 subnet 的实例必须位于与子网相同区域的地区中,即使子网和实例分别在单独的项目中定义时也是如此。由于 10.0.1.0/24 subnet 位于 us-west1 区域,使用该子网创建实例的服务项目管理员必须在同一区域中选择一个地区,例如 us-west1-a

混合云情景

图 3 演示了如何在混合环境中使用共享 VPC。

图 3. 共享 VPC 网络连接到本地网络以及三个服务项目(点击放大)。

在这个例子中,组织创建了一个具有单个共享 VPC 网络的单个宿主项目。共享 VPC 网络通过 Cloud VPN 连接到本地网络。一些服务和应用托管在 Google Cloud 中,还有一些服务和应用则保留在本地:

  • 共享 VPC 管理员启用了宿主项目,并将三个服务项目连接到该宿主项目:Service project AService project BService project C

    • 彼此分离的团队可以管理各个服务项目。IAM 权限已配置为使一个项目的服务项目管理员没有其他服务项目的权限。

    • 共享 VPC 管理员向有需要的服务项目管理员授予了子网级或项目级权限,以便他们可以创建使用共享 VPC 网络的实例

      • 拥有 10.0.1.0/24 subnet 的子网级权限的 Service project A 服务项目管理员可以在其中创建 Instance A。服务项目管理员必须为实例在 us-west1 区域中选择一个地区,因为这个区域包含 10.0.1.0/24 subnetInstance A10.0.1.0/24 subnet 中的可用 IP 地址范围内获取其 IP 地址 10.0.1.3

      • 拥有 10.15.2.0/24 subnet 的子网级权限的 Service project B 服务项目管理员可以在其中创建 Instance B。服务项目管理员必须为实例在 us-east1 区域中选择一个地区,因为这个区域包含 10.15.2.0/24 subnetInstance B10.15.2.0/24 subnet 中的可用 IP 地址范围内获取其 IP 地址 10.15.2.4

      • 拥有整个宿主项目的项目级权限的 Service project C 服务项目管理员可以在宿主项目任意 VPC 网络内的任意子网中创建实例。例如,服务项目管理员可以在 10.7.1.0/24 subnet 内创建 Instance C,在 us-east1 区域内选择一个地区,以匹配子网的区域。Instance C10.7.1.0/24 Subnet 中的可用 IP 地址范围内获取其 IP 地址 10.7.1.50

    • 每个服务项目均单独结算。

    • 各项目中的服务项目管理员负责创建和管理资源

  • 共享 VPC 管理员已将网络管理任务委托给具有共享 VPC 网络的网络和安全管理员角色的其他 IAM 主账号。

    • 网络管理员创建了一个 Cloud VPN 网关,并配置一个通过互联网连接到本地网关的 VPN 隧道。由于 us-east1 区域中的相应 Cloud Router 路由器已配置,因此 Cloud VPN 会与其本地对应方交换路由以及从对应方接收路由。

    • 如果 VPC 的动态路由模式是全局模式,则 Cloud Router 路由器会将已知路由应用于 VPC 网络中所有子网内的本地网络,并将连接到所有 VPC 子网的路由与其本地对应方共享。

    • 安全管理员在共享 VPC 网络中创建和管理防火墙规则,以控制 Google Cloud 和本地网络中实例之间的流量。

    • 根据适用的防火墙规则,可以将服务项目中的实例配置为与内部服务(如位于本地的数据库或目录服务器)通信。

两层 Web 服务

图 4 演示了如何使用共享 VPC 委托管理职责,并保持最小特权原则。在本例中,组织有一个分为两层的 Web 服务,各层分别由不同的团队管理。第 1 层表示面向外部的组件(位于 HTTP(S) 负载均衡器后面)。第 2 层表示第 1 层所依赖的内部服务,并使用内部 TCP/UDP 负载平衡器进行平衡。

图 4. 在这种双层 Web 服务中,面向外部的组件和内部服务连接到一个通用的共享 VPC 网络,并由不同的团队管理(点击放大)。

共享 VPC 允许您将 Web 服务的每一层映射到不同的项目,以便在共享一个通用 VPC 网络时由不同的团队管理各层:

  • 各层的资源(例如实例和负载平衡器组件)分别放置在由不同团队管理的不同服务项目中。

  • 各层服务项目由共享 VPC 管理员连接到宿主项目。共享 VPC 管理员也启用了宿主项目。

    • 彼此分离的团队可以通过成为适当服务项目中的服务项目管理员来管理网络服务的每一层。

    • 每个服务项目均单独结算。

    • 各项目中的服务项目管理员负责创建和管理资源

  • 网络访问控制的描述如下:

    • 仅在第 1 层工作的 IAM 主账号是 Tier 1 service project 的 Service Project Admin,并仅获得 10.0.1.0/24 subnet 的子网级权限。在本例中,一名这样的服务项目管理员在该子网中创建了三个 Tier 1 instances

    • 仅在第 2 层工作的 IAM 主账号是 Tier 2 service project 的服务项目管理员,并仅获得 10.0.2.0/24 subnet 的子网级权限。在本例中,另一名服务项目管理员在该子网中创建了三个 Tier 2 instances,此外还创建了一个内部负载均衡器,其转发规则使用该子网中可用范围内的 IP 地址。

    • 监督整个 Web 服务的 IAM 主账号是两个服务项目的服务项目管理员,他们对宿主项目具有项目级权限,因此可以使用其中定义的任何子网。

    • 共享 VPC 管理员可以选择将网络管理任务委托给网络和安全管理员

后续步骤