排查 Google Cloud 服务的常见 VPC Service Controls 问题

本页面提供了您在使用 VPC Service Controls 边界内的 Google Cloud 服务时可能遇到的问题的解决方案。

Cloud Build 问题

在 VPC Service Controls 边界内使用 Cloud Build 资源有一些已知限制。如需了解详情,请参阅将 VPC Service Controls 与 Cloud Build 搭配使用的限制

Cloud Build 服务账号被禁止访问受保护的资源

Cloud Build 使用 Cloud Build 服务账号代表您执行构建。默认情况下,当您在 Cloud Build 上运行构建时,该构建在项目外部的租户项目中运行。

即使您的项目位于边界内,生成构建输出的 Cloud Build 工作器虚拟机也会在 VPC Service Controls 边界外。因此,如需让构建能够访问边界内的资源,您必须将 Cloud Build 服务账号添加到访问权限级别入站规则,以向其授予 VPC Service Controls 边界的访问权限。

如需了解详情,请参阅授予 Cloud Build 服务账号访问 VPC Service Controls 边界的权限

Cloud Storage 问题

指定不存在的目标 Cloud Storage 日记记录存储桶时访问被拒绝

如果指定的日志记录存储桶不存在,VPC Service Controls 会拒绝访问并显示 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 违规原因。

您可以使用 VPC Service Controls 唯一标识符 (vpcServiceControlUniqueIdentifier) 查看访问遭拒的日志。以下是包含 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 违规原因的示例日志:

"serviceName": "storage.googleapis.com",
"methodName": "google.storage.buckets.update",
"resourceName": "projects/325183452875",
"metadata": {
  "violationReason": "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER",
  ...
  "egressViolations": [
    {
      "sourceType": "Resource",
      "targetResource": "projects/0/buckets/this-bucket-does-not-exist",
      "source": "projects/325183452875/buckets/bucket-in-same-project",
      "servicePerimeter": "accessPolicies/875573620132/servicePerimeters/prod_perimeter"
    }]}

如果 egressViolations 对象中 targetResource 字段显示目标为 projects/0/buckets,这始终会导致访问被拒,因为 projects/0 不存在,并且被视为在服务边界外。

访问 Google 拥有的公共 Cloud Storage 存储桶时被拒绝

服务边界不能包含来自不同组织的项目。边界只能包含其父级组织中的项目。如果要从位于不同组织的 VPC Service Controls 边界内的项目访问 Cloud Storage 存储桶,则存在一些限制。

典型示例是您想要访问 Google 拥有的 Cloud Storage 存储桶。由于您的项目和包含目标存储桶的 Google 拥有的项目不在同一边界内,因此 VPC Service Controls 会拒绝请求并显示 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 违规原因。

如需解决此问题,您可以创建入站和出站规则。

从边界内访问可公开访问的 Cloud Storage 存储桶

如果您尝试从服务边界内访问可公开访问的 Cloud Storage 存储桶,VPC Service Controls 可能会通过抛出出站违规行为来阻止您的请求。

为了确保在需要时能够稳定地成功访问对象,我们应向受影响的服务边界应用出站规则。

Security Command Center 问题

本部分列出了您在使用 VPC Service Controls 边界内的 Security Command Center 资源时可能会遇到的问题。

Security Command Center 向 Pub/Sub 发送通知时被阻止

尝试将 Security Command Center 通知发布到 VPC Service Controls 边界内的 Pub/Sub 主题失败,并显示 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 违规行为。

我们建议您在组织级层激活 Security Command Center。VPC Service Controls 不会将父组织视为其子项目边界的一部分。为此,您必须向边界授予 Security Command Center 的访问权限。

您可以通过以下方法之一来解决此问题:

  • 使用不在服务边界内的项目中的 Pub/Sub 主题。
  • 从服务边界中移除 Pub/Sub API,直到通知设置完成。

如需详细了解如何启用发送到 Pub/Sub 主题的 Security Command Center 通知,请参阅为 Pub/Sub 启用发现结果通知

Security Command Center 被禁止扫描边界内的 Compute Engine 资源

Security Command Center 使用产品和项目专属服务账号 (P4SA) service-{project_number}@gcp-sa-computescanning.iam.gserviceaccount.com 扫描项目中的 Compute Engine 资源。为了让 Security Command Center 能够访问边界内的资源,您需要将 P4SA 添加到您的访问权限级别或入站规则中。否则,您可能会看到 NO_MATCHING_ACCESS_LEVEL 错误。

Security Command Center 被禁止扫描服务边界内的资源

Security Health Analytics 使用 P4SA(产品和项目专属服务账号)service-org-ORGANIZATION_ID@security-center-api.iam.gserviceaccount.com 扫描项目中的资源。为了让 Security Command Center 能够访问边界内的资源,您需要将 P4SA 账号添加到您的访问权限级别或入站规则中。否则,您将看到 NO_MATCHING_ACCESS_LEVEL 错误。

Google Kubernetes Engine 问题

本部分列出了您在使用 VPC Service Controls 边界内的 Google Kubernetes Engine 资源时可能会遇到的问题。

自动扩缩器在启用了可访问服务和受限服务的边界内无法正常工作

autoscaling.googleapis.com 未与 VPC Service Controls 集成,因此它无法添加到受限服务以及可访问的服务。无法在可访问的服务中允许 autoscaling.googleapis.com API。因此,位于启用了可访问服务的边界内的集群的自动扩缩器可能不起作用。

我们不建议使用可访问服务。使用受限虚拟 IP (VIP) 时,请为 autoscaling.googleapis.com 设置例外,使其转到包含自动扩缩集群的边界内的专用 VIP。

BigQuery 问题

本部分列出了您在使用 VPC Service Controls 边界内的 BigQuery 资源时可能会遇到的问题。

VPC Service Controls 边界限制不应用于 BigQuery 查询结果导出

如果您尝试限制将受保护数据从 BigQuery 导出到 Google 云端硬盘、Google 表格或 Looker Studio,可能会发现与预期行为存在一些偏差。当您从 BigQuery 界面运行查询时,结果会存储在机器的本地内存中,例如浏览器缓存。这意味着结果现在位于 VPC Service Controls 之外,因此您可以将结果保存到 CSV 文件或 Google 云端硬盘。

在这种情况下,VPC Service Controls 会按预期运行,因为结果是从服务边界外的本地机器导出的,但 BigQuery 数据的整体限制被规避。

为了克服此问题,请通过移除 bigquery.tables.export 权限来限制用户的 IAM 权限。请注意,这样做会停用所有导出选项。

GKE Enterprise 问题

本部分列出了您在使用 VPC Service Controls 边界内的 GKE Enterprise 资源时可能会遇到的问题。

如需排查与将 VPC Service Controls 与 Anthos Service Mesh 搭配使用相关的错误,请参阅排查代管式 Anthos Service Mesh 的 VPC Service Controls 问题

GKE Enterprise Config Controller 设置生成出站违规行为

如果没有出站配置允许边界外的项目中的 google.containers.registry.read 方法访问 containerregistry.googleapis.com,则设置 GKE Enterprise Config Controller 的过程将失败。

如需解决此错误,请创建以下出站规则:

From:
  Identities:ANY_IDENTITY
To:
  Projects =
    NNNNNNNNNNNN
  Service =
  Service name: containerregistry.googleapis.com
  Service methods:
    containers.registry.read

将该规则添加到违规的边界后,出站违规行为即消失。

Container Registry 问题

本部分列出了您在使用 VPC Service Controls 边界内的 Container Registry 资源时可能会遇到的问题。

尽管被入站或出站规则允许,Container Registry API 请求仍被 VPC Service Controls 阻止

如果您使用 identity_type 字段设置为 ANY_USER_ACCOUNTANY_SERVICE_ACCOUNT 的入站规则允许访问 Container Registry,则 VPC Service Controls 会阻止访问。

如需解决此问题,请将入站或出站规则中的 identity_type 字段更新为 ANY_IDENTITY

将 Artifact Registry 拥有的 Docker 映像复制到边界内的项目时,Google 管理的服务账号发生出站错误

尝试将 Artifact Registry 拥有的映像复制到 VPC Service Controls 边界内的项目时,您可能会在 Google 管理的服务账号 cloud-cicd-artifact-registry-copier@system.gserviceaccount.com 的日志中遇到出站错误。此出站错误通常在边界政策处于试运行模式时发生。

如需解决此问题,您可以创建一个出站规则,允许服务账号 cloud-cicd-artifact-registry-copier@system.gserviceaccount.com 访问 VPC Service Controls 错误日志中提到的项目中的 storage.googleapis.com 服务。

Vertex AI 问题

本部分列出了您在使用 VPC Service Controls 边界内的 Vertex AI 资源时可能会遇到的问题。

尽管被入站或出站规则允许,用户管理的 Notebooks API 请求仍被 VPC Service Controls 阻止

如果您已使用入站政策允许访问用户管理的笔记本 API,并且已将 identity_type 设置为 ANY_USER_ACCOUNTANY_SERVICE_ACCOUNT,VPC Service Controls 仍然阻止对 API 的访问。

如需解决此问题,请将入站或出站规则中的 identity_type 字段更新为 ANY_IDENTITY

Spanner 问题

由于基于产品、基于项目的服务帐号 (P4SA) service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com 存在的 NO_MATCHING_ACCESS_LEVEL 违规阻止,Spanner 数据库备份被阻止。

如需解决此问题,请添加包含上述服务代理的入站规则,或将其添加到访问权限级别。

后续步骤