使用 VPC Service Controls 保护资源


为进一步保护 Compute Engine 资源,您可以使用 VPC Service Controls 来保护它们。

VPC Service Controls 可让您为 Compute Engine 资源定义安全边界。服务边界会将资源及其关联数据的导出和导入限制在定义的边界内。

创建服务边界时,您需要选择一个或多个要受该边界保护的项目。同一边界内的项目之间的请求不会受影响。只要所涉及的资源在同一服务边界内,所有现有的 API 就会继续起作用。请注意,IAM 角色和政策在服务边界内仍然适用。

当服务受某边界保护时,此服务不能在该边界内对该边界外的任何资源发出请求。这包括将资源从边界内导出到边界外。如果受保护的资源符合特定条件,则可以从边界外请求这些受保护的资源。如需了解详情,请参阅 VPC Service Controls 文档中的概览

如果发出违反服务边界的请求,则该请求会失败,并显示以下错误消息:

"code": 403, "message": "Request is prohibited by organization's policy."

安全优势

VPC Service Controls 具有以下安全优势:

  • 对敏感 Compute Engine API 操作(例如更改防火墙规则)的访问权限可限于来自已获授权的网络的专属访问或已列入许可名单的 IP 地址。
  • Compute Engine 永久性磁盘快照和自定义映像可限制在边界内。
  • Compute Engine 实例元数据充当受限的存储系统。通过 Compute Engine API 访问实例元数据受服务边界政策的限制,从而缓解了使用此渠道的渗透风险。

此外,现在可以在受限虚拟 IP (VIP) 上访问 Compute Engine API。这简化了边界中需要访问此 API 的客户端的 Cloud DNS 和路由配置。

限制

  • 分层防火墙不受服务边界的影响。
  • VPC 对等互连操作不会强制实施 VPC 服务边界限制。
  • 共享 VPC 的 projects.ListXpnHosts API 方法不会对返回的项目强制实施服务边界限制。

权限

确保您具有适当的角色来管理您的组织的 VPC Service Controls 边界配置。

设置服务边界

请按照 VPC Service Controls 文档中的创建服务边界的说明设置服务边界。

如果使用 Google Cloud CLI 设置服务边界,请指定带有 --restricted-services 标志的 compute.googleapis.com 以限制 Compute Engine API。

将 Compute Engine 作为受限服务添加到现有边界

如果您已有服务边界,并且想要将 Compute Engine 添加到该服务边界,请按照 VPC Service Controls 文档中的更新服务边界的说明操作。

使用 VPC Service Controls 创建虚拟机

设置服务边界后,只要请求中受影响的资源包含在同一服务边界内,您就无需对现有 API 调用或工具进行任何更改。例如,以下命令会使用示例映像创建一个虚拟机实例。在这种情况下,如果 IMAGE_PROJECT 在服务边界外(并且项目之间没有服务边界网桥),则该命令会失败。

gcloud compute instances create new-instance \
    --image-family IMAGE_FAMILY --image-project IMAGE_PROJECT \
    --zone us-central1-a --machine-type n1-standard-72

如果要通过实例模板创建虚拟机,则实例模板中引用的任何资源都必须属于在其中运行该命令的同一服务边界内,或者都必须使用服务边界网桥进行连接。如果实例模板引用了服务边界外的资源,则请求会失败,即使实例模板本身位于边界内也会如此。

如需查看边界外的 Compute Engine 客户端使用边界内的 Cloud KMS 密钥在边界外创建 Compute Engine 磁盘的示例场景,请参阅入站规则和出站规则的组合允许的 API 请求示例

公共映像项目

Google 会为您的实例提供并维护一组公共映像。这些项目隐式包含在所有安全边界内。您无需执行任何额外操作即可使用这些映像。

以下是自动包含在所有安全边界内的项目的列表:

  • centos-cloud
  • cos-cloud
  • debian-cloud
  • fedora-cloud
  • fedora-coreos-cloud
  • rhel-cloud
  • rhel-sap-cloud
  • rocky-linux-cloud
  • opensuse-cloud
  • suse-cloud
  • suse-byos-cloud
  • suse-sap-cloud
  • ubuntu-os-cloud
  • ubuntu-os-pro-cloud
  • windows-cloud
  • windows-sql-cloud

如果您使用的映像项目不在此列表中,并且您选择不将此映像项目直接包含在安全边界内,我们建议您首先创建要用于一个单独项目的所有映像的副本,然后将该单独项目包含在安全边界内。

使用 VPC Service Controls 复制映像

如果两个项目属于同一服务边界,则您可以将映像从一个项目复制到另一个项目中。在以下示例中,DST_PROJECTSRC_PROJECT 都必须属于同一服务边界,请求才能起作用。

gcloud compute images create --project DST_PROJECT IMAGE_NAME \
   --source-image SOURCE_IMAGE --source-image-project SRC_PROJECT \
    --family IMAGE_FAMILY --storage-location LOCATION

如果您选择不将映像项目直接包含在安全边界内,我们建议您首先创建要用于一个单独项目的所有映像的副本,然后将该单独项目包含在安全边界内。

使用 VPC Service Controls 的共享 VPC

使用共享 VPC 时,服务边界限制适用于给定操作中涉及的所有项目。换句话说,如果操作涉及宿主项目和服务项目之间分配的资源,则您需要确保宿主项目和服务项目在同一服务边界内。

VPC 网络对等互连

VPC 网络对等互连允许两个单独的组织之间建立对等互连 VPC 网络。由于服务边界仅限于组织内的项目,因此服务边界不会影响对等互连 VPC 网络。

分层防火墙

分层防火墙是在项目外(在文件夹级层或在组织级层)配置的防火墙。服务边界限制适用于边界内的一组项目,因此不适用于分层防火墙。

代管实例组

代管实例组可帮助您将一组虚拟机实例作为一个实体进行管理。代管实例组 (MIG) 使用实例模板创建虚拟机,并且对映像或跨项目网络和子网的所有限制均适用。也就是说,在使用其他项目中的映像时,请确保这些项目属于同一边界,或者将所需映像复制到另一个项目中,并将该项目包含在服务边界内。Google 维护的公共映像项目会自动包含在所有服务边界内。

如果您要将实例组与共享 VPC 结合使用,请确保您的项目在同一安全边界内。

后续步骤