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 拒绝该请求的原因。我们通过在日志浏览器中使用以下查询,在 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 中,我们有两种方法解决此拒绝问题。
- 创建访问权限级别,通过向我的系统 IP 授予访问权限,允许访问边界内的项目。
- 创建入站规则,以允许 API 客户端从服务边界外访问服务边界内的资源。
在本教程中,我们将通过创建访问权限级别来排查问题。
- 在文件夹 (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 通用许可授权。