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 项目。
- 组织级所需权限。
- 两个项目的结算账号。

资源设置
- 在 Google Cloud 控制台中,在组织下创建一个文件夹和两个新项目(您可以重复使用现有项目)。
(如果您还没有 Google Workspace/Cloud Identity 账号,则必须获取一个,因为本教程需要使用组织。)
- 验证您是否拥有组织级层的正确权限,以便完成本教程。

费用
您需要在 Cloud 控制台中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
唯一会产生费用的资源是虚拟机实例。您可以在价格计算器中找到估算费用。
3. 创建边界
在本实验中,我们将执行以下步骤:
- 在 Google 控制台中,选择您的组织,然后 访问 VPC Service Controls。请确保您位于组织级别。

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

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

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

5. 排查被拒问题
首先,我们必须确定问题到底是什么,才能确定如何排查。
- 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 审核日志。我们将查找最后一个错误日志。
- 点击 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 中修复此拒绝。
在本教程中,我们将通过创建访问权限级别来排查问题。
- 前往文件夹(Codelab)范围内的 Access Context Manager,然后创建一个新的访问权限级别。
- 使用“基本模式”,当 IP 子网和地理位置匹配时,我们将允许访问。

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

6. 测试结果。
确认我们有权访问 Compute Engine,并且能够创建虚拟机实例。现在我们已经创建了访问权限级别,接下来尝试访问 ProjectZ 中的 Compute Engine 并创建虚拟机实例。
- 前往 Compute Engine,然后点击创建实例

- 将所有设置都保留为默认值,然后尝试创建低成本虚拟机实例。
大约一分钟后,您应该会看到创建的虚拟机实例,并且可以验证您是否拥有对边界内受保护的 Compute Engine 的完全访问权限。

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

- 如需删除安全边界,请完成以下步骤:
- 在 Google Cloud 控制台中,点击安全,然后在组织范围内点击 VPC Service Controls。
- 在 VPC Service Controls 页面上,点击要删除的边界对应的表格行中的“删除图标”
- 如需删除访问权限级别,请完成以下步骤:
- 在 Google Cloud 控制台中,打开文件夹级层范围的 Access Context Manager 页面。
- 在网格中,针对您要删除的访问权限级别所对应行,点击“删除图标”,然后点击删除。
- 如需关闭项目,请完成以下步骤:
- 在 Google Cloud 控制台中,前往要删除的项目对应的 IAM 和管理设置页面。
- 在“IAM 和管理”设置页面上,点击关停。
- 输入项目 ID,然后点击仍要关停。
8. 恭喜!
在此 Codelab 中,您创建了 VPC Service Controls 边界、强制执行了该边界并对其进行了问题排查。
了解详情
- 请参阅 VPC Service Controls 文档。
- 请参阅 Access Context Manager 文档。
- 请参阅 VPC-SC 问题排查工具文档。
许可
此作品已获得 Creative Commons Attribution 2.0 通用许可授权。