VPC Service Controls 基本教程 I

1. 简介

VPC Service Controls (VPC-SC) 是 Google Cloud 中的一种组织级安全控制措施,可帮助企业客户降低数据渗漏风险。VPC Service Controls 提供对多租户服务的零信任访问模式,让客户端在从互联网和其他服务连接到多租户服务时,能够限制对经过授权的 IP、客户端情境和设备参数的访问,从而减少有意和无意的损失。您可以使用 VPC Service Controls 创建边界,该边界可保护您明确指定的服务的资源和数据。

本教程的目标如下:

  • 了解 VPC Service Controls 的基础知识
  • 创建 VPC 服务边界
  • 使用 VPC Service Controls 保护项目
  • 排查 VPC Service Controls 入站流量违规问题

2. 设置和要求

在本教程中,我们需要满足以下前提条件:

  • GCP 组织。
  • 组织下的文件夹。
  • 同一组织内放置在文件夹下的 2 个 GCP 项目。
  • 组织级所需权限
  • 两个项目的结算账号。

1a62ebea85d6d4fc.png

资源设置

  1. Google Cloud 控制台中,在组织下创建一个文件夹和两个新项目您可以重复使用现有项目)。

(如果您还没有 Google Workspace/Cloud Identity 账号,则必须获取一个,因为本教程需要使用组织。)

  1. 验证您是否拥有组织级层的正确权限,以便完成本教程。
  1. 确保这两个项目都位于该文件夹下,因为我们需要在该文件夹级层创建范围限定的政策。了解如何将项目移动到文件夹

f7c75ab82028cb15.png

费用

您需要在 Cloud 控制台中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

唯一会产生费用的资源是虚拟机实例。您可以在价格计算器中找到估算费用。

3. 创建边界

在本实验中,我们将执行以下步骤:

  1. 在 Google 控制台中,选择您的组织,然后 访问 VPC Service Controls。请确保您位于组织级别。

43d5af2d5f084bb4.png

  1. 点击“管理政策”,创建一项新的访问权限政策,其作用范围为“Codelab”文件夹。

9f75d949ca9992c4.png

  1. 在实施模式下创建新边界。在本教程中,我们将其命名为“SuperProtection”。
  • 创建边界时,选择要强制执行的项目作为 ProjectZ。
  • 选择“常规”作为边界类型。
  • 指定要限制的服务对话框中,选择要限制的服务,即“Compute Engine”。

边界设置应如下所示:

914d603103cb21.png

4. 验证边界是否已强制执行

  1. 访问 ProjectX,然后访问“虚拟机实例”首页,验证您是否能够访问 Compute Engine API。您应该能够这样做,因为 projectX 未受创建的 VPC SC 边界保护。
  2. 访问 ProjectZ 并验证您是否能够访问 Compute Engine。您可以看到,VPC Service Controls 已禁止该请求,因为服务边界 SuperProtection 保护了 ProjectZ 和 Compute Engine API。

d5073543f783e9c7.png

5. 排查被拒问题

首先,我们必须确定问题到底是什么,才能确定如何排查。

  1. VPC Service Controls 日志包含有关对受保护资源的请求的详细信息,以及 VPC Service Controls 拒绝该请求的原因。我们来使用 Logs Explorer 中的以下查询,在 ProjectZ 审核日志中查找 VPC Service Controls 唯一 ID
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"

这会显示所有 VPC Service Controls 审核日志。我们将查找最后一个错误日志。

  1. 点击 VPC Service Controls 标题,然后选择“排查拒绝问题”,系统会打开 VPC Service Controls 问题排查工具

此 API 将在友好的界面中向我们显示违规原因,以及违规行为是入站流量违规还是出站流量违规等其他实用信息。

在本练习中,我们将寻找以下内容:

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

您可以通过以下两种方式在 ProjectZ 中修复此拒绝。

  • 创建一个访问权限级别,以允许通过授予对我的系统 IP 的访问权限来访问边界内的项目。
  • 创建一条入站流量规则,允许服务边界外的 API 客户端访问服务边界内的资源。

在本教程中,我们将通过创建访问权限级别来排查问题。

  1. 前往文件夹(Codelab)范围内的 Access Context Manager,然后创建一个新的访问权限级别
  2. 使用“基本模式”,当 IP 子网和地理位置匹配时,我们将允许访问。

678f0f9d7bac921d.png

  1. 前往组织级范围的 VPC Service Controls。选择您为此 Codelab 创建的访问权限政策,然后修改我们之前创建的边界。
  2. 添加在文件夹范围内创建的访问权限级别,然后保存。

c0af5691dfe9dd75.png

6. 测试结果。

确认我们有权访问 Compute Engine,并且能够创建虚拟机实例。现在我们已经创建了访问权限级别,接下来尝试访问 ProjectZ 中的 Compute Engine 并创建虚拟机实例。

  1. 前往 Compute Engine,然后点击创建实例

c1206aaf18497ec1.png

  1. 将所有设置都保留为默认值,然后尝试创建低成本虚拟机实例。

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

5b2ded02f669b2ef.png

7. 清理

虽然在不使用 VPC Service Controls 时无需另行付费,但最好清理本实验中使用的设置。您还可以删除虚拟机实例和/或 Cloud 项目,以避免产生费用。删除 Cloud 项目后,系统即会停止对该项目中使用的所有资源计费。

  1. 如需删除虚拟机实例,请选中虚拟机实例名称左侧的复选框,然后点击删除

da0abf0894fe03cd.png

  1. 如需删除安全边界,请完成以下步骤:
  • 在 Google Cloud 控制台中,点击安全,然后在组织范围内点击 VPC Service Controls
  • 在 VPC Service Controls 页面上,点击要删除的边界对应的表格行中的“删除图标”
  1. 如需删除访问权限级别,请完成以下步骤:
  • 在 Google Cloud 控制台中,打开文件夹级层范围的 Access Context Manager 页面。
  • 在网格中,针对您要删除的访问权限级别所对应行,点击“删除图标”,然后点击删除
  1. 如需关闭项目,请完成以下步骤:
  • 在 Google Cloud 控制台中,前往要删除的项目对应的 IAM 和管理设置页面。
  • 在“IAM 和管理”设置页面上,点击关停
  • 输入项目 ID,然后点击仍要关停

8. 恭喜!

在此 Codelab 中,您创建了 VPC Service Controls 边界、强制执行了该边界并对其进行了问题排查。

了解详情

许可

此作品已获得 Creative Commons Attribution 2.0 通用许可授权。