使用 VPC Service Controls 边界保护 Compute Engine

本教程介绍了如何使用服务边界保护 Compute Engine,以及如何排查入站流量违规问题,以允许对 Compute Engine 进行授权访问。

借助 VPC Service Controls,您可以围绕 Google 管理的服务的资源定义服务边界,以便控制与这些服务的通信以及这些服务之间的通信。您可以围绕敏感资源建立零信任边界,限制对授权 IP 地址、用户和设备的访问。借助此功能,您可以定义安全政策,以阻止对受信任边界外的 Google 管理的服务的访问、阻止从不可信位置访问数据,以及降低数据渗漏风险。

本教程面向希望了解基本 VPC Service Controls 概念的 Google Cloud 组织管理员。

创建服务边界

创建一个服务边界,以保护 My-Project-2 项目中的 Compute Engine API:

  1. 在 Google Cloud 控制台中,前往 VPC Service Controls 页面。

    转到 VPC Service Controls

    确保您位于组织范围内。

  2. 点击管理政策

  3. 创建一项访问权限政策,其作用范围为 Exercise 文件夹。

  4. 创建新的边界,并提供以下详细信息:

    • 标题:MyFirstPerimeter

    • 边界类型:常规

    • 强制模式:强制

    • 要保护的资源:My-Project-2 项目

    • 受限服务:Compute Engine API

验证边界

在本部分中,您可以向项目中的资源发出访问请求,以确认边界是否保护了所需资源。

  1. 访问 My-Project-1 项目,并通过访问虚拟机实例页面验证您是否可以访问 Compute Engine。

    转到虚拟机实例

    您应该能够访问,因为 My-Project-1 未受您之前创建的边界保护。

  2. 访问 My-Project-2 项目,并通过访问虚拟机实例页面验证您是否可以访问 Compute Engine。

    您应该会看到 VPC Service Controls 拒绝了您访问 Compute Engine 的请求,因为 MyFirstPerimeter 边界保护了 My-Project-2 和 Compute Engine API。

排查违规问题

VPC Service Controls 审核日志包含有关对受保护资源的请求的详细信息,以及 VPC Service Controls 拒绝该请求的原因。您需要这些信息来识别和排查 My-Project-2 项目中的违规问题。

查看审核日志

  1. My-Project-2 项目的审核日志中查找 VPC Service Controls 违规的唯一 ID:

    1. 在 Google Cloud 控制台中,转到 Logs Explorer 页面:

      前往 Logs Explorer

      如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

    2. 选择 My-Project-2 项目。

    3. 如需显示所有审核日志,请在查询编辑器字段中输入以下查询:

      resource.type="audited_resource"
      protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
      
    4. 点击运行查询

    此查询会显示所有 VPC Service Controls 审核日志。如需查找在 My-Project-2 项目中访问 Compute Engine API 的违规详情,请查看上次错误日志。

    如需了解详情,请参阅查看日志

  2. 查询结果窗格中,点击要排查的拒绝问题旁的 VPC Service Controls,然后点击排查拒绝问题

    系统会打开 VPC Service Controls 违规分析器页面。此页面会显示违规原因及其他信息,例如违规行为属于入站流量违规还是出站流量违规。

    在本教程中,请查找以下信息:

    "principalEmail": "USER@DOMAIN"
    "callerIp": "PUBLIC_IP_ADDRESS"
    "serviceName": "compute.googleapis.com"
    "servicePerimeterName":
    "accessPolicies/POLICY_NUMBER/servicePerimeters/MyFirstPerimeter
    "ingressViolations": [
            {
    "targetResource": "projects/PROJECT_NUMBER",
    "servicePerimeter": "accessPolicies/POLICY_NUMBER/servicePerimeters/MyFirstPerimeter"
            }
          ],
    "violationReason": "NO_MATCHING_ACCESS_LEVEL",
    "resourceNames": "PROJECT_ID"
    

    违规原因为 "NO_MATCHING_ACCESS_LEVEL"。如果 IP 地址、设备类型或用户身份与与边界相关联的任何入站流量规则或访问权限级别不匹配,就会发生 "NO_MATCHING_ACCESS_LEVEL" 违规。如果调用方 IP 地址缺失,或者在日志中显示为内部 IP 地址,则此违规可能是 Google Cloud 服务不受 VPC Service Controls 支持造成的。

如需在 My-Project-2 项目中修复此拒绝,您有两种选择:

  • 创建一个访问权限级别,允许对边界内的项目访问您的系统 IP 地址。

  • 创建一条入站流量规则,允许从边界外部访问 API 客户端以访问边界内的资源。

下一部分将介绍如何通过创建访问权限级别来排查此拒绝问题。

创建访问权限级别

  1. 在 Google Cloud 控制台中,前往 Exercise 文件夹范围的 Access Context Manager 页面。

    转到“Access Context Manager”

  2. 创建访问权限级别,并提供以下详细信息:

    • 对于在以下条件中创建条件,选择基本模式

    • 对于满足条件时返回,请选择

    • 选择 IP 子网属性,并指定系统的公共 IP 地址。

    • 选择地理位置属性,并指定您的地理位置。

    仅当 IP 地址与地理位置匹配时,此访问权限级别才允许访问。

  3. 前往组织级范围的 VPC Service Controls 页面。

    转到 VPC Service Controls

  4. 选择您在本教程之前创建的访问权限政策。

  5. 将您在 Exercise 文件夹范围内创建的访问权限级别添加到 MyFirstPerimeter 边界

测试访问权限

添加访问权限级别后,请验证您是否可以在 My-Project-2 项目中访问 Compute Engine 并创建虚拟机实例。

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 创建虚拟机实例

大约一分钟后,Compute Engine 会创建一个虚拟机实例,以验证您是否拥有对边界内受保护的 Compute Engine 的完全访问权限。