修复 Security Command Center 错误

本页面提供了修复 SCC 错误的引用指南和技术列表。

准备工作

您需要足够的 Identity and Access Management (IAM) 角色来查看或修改发现结果,以及访问或修改 Google Cloud 资源。如果您在 Google Cloud 控制台中访问 Security Command Center 时遇到权限错误,请向您的管理员寻求帮助。如需了解角色,请参阅访问权限控制。 如需解决资源错误,请阅读受影响产品的相关文档。

在 Google Cloud 控制台中查看发现结果

SCC 错误是指导致 Security Command Center 无法正常运行的配置错误。Security Command Center 来源会生成这些发现结果。

只要为您的组织项目设置了 Security Command Center,它就会在检测到错误时生成错误发现结果。您可以在 Google Cloud 控制台中查看 SCC 错误。

请按照以下过程在 Google Cloud 控制台中查看发现结果:

  1. 转到 Google Cloud 控制台中的 Security Command Center 发现结果页面。

    转至“发现结果”

  2. 选择您的 Google Cloud 项目或组织。

    项目选择器

  3. 快速过滤条件部分的来源显示名称子部分中,选择 Security Command Center

  4. 如需查看特定发现结果的详细信息,请点击 Category 下的发现结果名称。发现结果详细信息窗格会展开,显示以下信息:

    • AI 生成的摘要预览版:动态生成的对所发现问题的说明
    • 说明:检测到的错误的简要说明
    • 事件时间:检测到结果的时间
    • 资源显示名:受影响的资源
    • 后续步骤:有关如何解决该错误的说明
    • 发现结果规范名称:发现结果的唯一标识符
    • 来源显示名称Security Command Center
  5. 可选:要查看发现结果的完整 JSON 定义,请点击 JSON 标签页。

    窗格显示发现结果的 JSON 定义,您可以在其中查看发现结果的所有属性。

修复后停用 SCC 错误

修复 SCC error 发现结果后,Security Command Center 会在下一次扫描期间自动将发现结果的状态设置为 INACTIVE。至于 Security Command Center 需要多久才会将修复后的发现结果的状态设置为 INACTIVE,这取决于您修复该发现结果的时间以及系统安排检测到该错误的扫描的时间。

如需了解 SCC error 发现结果的扫描频率,请参阅错误检测器中的发现结果摘要部分。

修复 SCC 错误

本部分包含所有 SCC 错误的修复说明。

API disabled

API 中的类别名称API_DISABLED

项目已停用以下服务之一:

已停用的服务无法生成发现结果。

要修复此发现结果,请按以下步骤操作:

  1. 查看发现结果以确定停用哪个 API。
  2. 启用 API:

了解此发现结果类型支持的资产和扫描设置

APS no resource value configs match any resources

API 中的类别名称APS_NO_RESOURCE_VALUE_CONFIGS_MATCH_ANY_RESOURCES

资源值配置是为攻击路径模拟而定义的,但它们与您环境中的任何资源实例都不匹配。模拟将改用默认的高价值资源集。

由于以下原因,资源值配置可能与任何资源不匹配,这些原因在 Google Cloud 控制台的结果描述中进行了标识:

  • 没有任何资源值配置与任何资源实例匹配。
  • 指定 NONE 的一个或多个资源值配置会替换所有其他有效配置。
  • 所有定义的资源值配置都会指定值 NONE

要修复此发现结果,请按以下步骤操作:

  1. 转到 Security Command Center 设置中的攻击路径模拟页面:

    转到“设置”

  2. 选择您的组织。攻击路径模拟页面随即打开,并显示现有配置。

  3. 资源值配置列表的资源值列中,检查 None 的值。

  4. 对于指定了 None 的任何配置,请执行以下操作:

    1. 点击任何资源值配置的名称以显示配置规范。

    2. 如有必要,请修改资源属性规范以减少与配置匹配的资源实例数。

  5. 如果问题不是由过于宽泛的 None 规范引起的,请执行以下操作:

    1. 点击指定值 HIGHMEDIUMLOW 的每个配置的名称以显示资源属性规范。

    2. 查看配置,并在必要时修改配置,以更正范围、资源类型、标记或标签规范以匹配预期的资源。

  6. 如有必要,请创建新的资源值配置

您的更改将应用于下一个攻击路径模拟。

了解此发现结果类型支持的资产和扫描设置

APS resource value assignment limit exceeded

API 中的类别名称APS_RESOURCE_VALUE_ASSIGNMENT_LIMIT_EXCEEDED

在上一个攻击路径模拟中,高价值资源实例(由资源值配置标识)超出了高价值资源集中 1,000 个资源实例的限制。因此,Security Command Center 从高价值资源集中排除了过多的实例。

如需修复此发现结果,您可以尝试以下操作:

  • 使用标记标签来减少给定资源类型或指定范围内的匹配数量。 标记或标签必须应用于资源实例,然后才能由资源值配置进行匹配。
  • 创建资源值配置,以将 NONE资源值分配给在另一配置中指定的部分资源。指定 NONE 值时会替换任何其他配置,并排除高价值资源集中的资源实例。
  • 减少资源值配置中的范围资源属性规范。
  • 删除分配了 LOW 值的资源值配置。

如需了解如何创建、修改或删除资源值配置,请参阅定义和管理高价值资源集

了解此发现结果类型支持的资产和扫描设置

GKE service account missing permissions

API 中的类别名称GKE_SERVICE_ACCOUNT_MISSING_PERMISSIONS

Container Threat Detection 无法为 Google Kubernetes Engine 集群生成发现结果,因为集群上的 GKE 默认服务账号缺少权限。这会阻止在集群上成功启用 Container Threat Detection。

如需修复此发现结果,请恢复 GKE 默认服务账号,并确认该服务账号具有 Kubernetes Engine 服务代理 (roles/container.serviceAgent) 角色。

了解此发现结果类型支持的资产和扫描设置

KTD blocked by admission controller

API 中的类别名称KTD_BLOCKED_BY_ADMISSION_CONTROLLER

无法在集群上启用 Container Threat Detection,因为第三方准入控制器正在阻止部署所需的 Kubernetes DaemonSet 对象

如需修复此发现结果,请确保集群上运行的准入控制器允许 Container Threat Detection 创建所需的 Kubernetes 对象。

检查准入控制器

检查集群中的准入控制器是否拒绝 Container Threat Detection DaemonSet 对象的部署。

  1. 在 Google Cloud 控制台的发现结果详细信息说明中,查看来自 Kubernetes 的错误消息。Kubernetes 错误消息应类似于以下消息:

    generic::failed_precondition: incompatible admission webhook:
    admission webhook "example.webhook.sh" denied the request:
    [example-constraint] you must provide labels: {"example-required-label"}.
    
  2. 在包含您的集群的项目的管理员活动 Cloud Audit Logs 中,查找发现结果详情的说明字段中显示的错误消息。

  3. 如果您的准入控制器正常运行,但拒绝 Container Threat Detection DaemonSet 对象的部署,请配置您的准入控制器以允许 Container Threat Detection 的 Google 管理的服务账号管理 kube-system 命名空间中的对象。

    Container Threat Detection 的服务帐号必须能够管理特定的 Kubernetes 对象。

如需详细了解如何将准入控制器与 Container Threat Detection 搭配使用,请参阅 PodSecurityPolicy 和 Admission Controller

确认修复

修复错误后,Security Command Center 会自动尝试启用 Container Threat Detection。等待启用完成后,您可以按照以下步骤检查 Container Threat Detection 是否处于活跃状态:

  1. 前往控制台中的 Kubernetes Engine 工作负载页面。

    转到“Kubernetes 工作负载”

  2. 如有必要,请选择显示系统工作负载

  3. 工作负载页面上,首先按集群名称过滤工作负载。

  4. 查找 container-watcher 工作负载。如果存在 container-watcher,并且其状态显示 OK,则 Container Threat Detection 处于活跃状态。

KTD image pull failure

API 中的类别名称KTD_IMAGE_PULL_FAILURE

无法为集群启用 Container Threat Detection,因为无法从 Container Registry 映像主机 gcr.io 拉取(下载)所需的容器映像。

拉取或下载容器映像可能会因多种可能的原因而失败。

请检查以下各项:

  • 确保您的 VPC 网络、DNS 或防火墙设置没有阻止从集群到 gcr.io 映像主机的网络访问。
  • 如果集群是专用集群,请确保已启用专用 Google 访问通道,以允许访问 gcr.io 映像主机。
  • 如果网络设置或专用 Google 访问通道不是失败的原因,请参阅 GKE 问题排查文档中的 ImagePullBackOff 和 ErrImagePull 错误。

了解此发现结果类型支持的资产和扫描设置

KTD service account missing permissions

API 中的类别名称KTD_SERVICE_ACCOUNT_MISSING_PERMISSIONS

在 Google Cloud 控制台的发现结果中标识的 Container Threat Detection 服务帐号缺少必需的权限。全部或部分 Container Threat Detection 发现结果未发送到 Security Command Center。

要修复此发现结果,请按以下步骤操作:

  1. 向该服务帐号授予 Container Threat Detection Service Agent 角色 (roles/containerthreatdetection.serviceAgent)。如需了解详情,请参阅授予单个角色

    或者,如果要使用自定义角色,请确保该角色具有 Container Threat Detection Service Agent 角色中的权限

  2. 确保不存在阻止服务帐号使用 Container Threat Detection Service Agent 角色中的任何权限的 IAM 拒绝政策。如果存在阻止访问权限的拒绝政策,请在拒绝政策中将服务帐号添加为例外主帐号

如需详细了解 Container Threat Detection 服务帐号及其所需的角色和权限,请参阅

了解此发现结果类型支持的资产和扫描设置

Misconfigured Cloud Logging Export

API 中的类别名称MISCONFIGURED_CLOUD_LOGGING_EXPORT

配置为持续导出到 Cloud Logging 的项目不可用。因此,Security Command Center 无法将发现结果发送到 Logging。

要修复此发现结果,请执行以下操作之一:

了解此发现结果类型支持的资产和扫描设置

VPC Service Controls Restriction

API 中的类别名称VPC_SC_RESTRICTION

Security Health Analytics 无法为项目生成某些发现结果,因为项目受服务边界保护。您必须向 Security Command Center 服务账号授予对服务边界的入站访问权限。

服务账号的标识符是具有以下格式的电子邮件地址:

service-RESOURCE_KEYWORD-RESOURCE_ID@security-center-api.iam.gserviceaccount.com

替换以下内容:

  • RESOURCE_KEYWORD:关键字 orgproject,具体取决于拥有服务帐号的资源
  • RESOURCE_ID:以下各项之一:
    • 组织 ID(如果服务帐号归组织所有)
    • 如果服务帐号归某个项目所有,则为 项目编号

如果您同时拥有组织级服务帐号和项目级服务帐号,请对这两个帐号应用修复措施。

要修复此发现结果,请按照下列步骤操作。

第 1 步:确定哪个服务边界会阻止 Security Health Analytics

  1. 获取 VPC Service Controls 的唯一 ID 以及与发现结果关联的项目 ID:
    1. 如需查看发现结果的详细信息,请点击其类别名称。
    2. 说明字段中,复制 VPC Service Controls 唯一 ID,例如 5e4GI409D6BTWfOp_6C-uSwmTpOQWcmW82sfZW9VIdRhGO5pXyCJPQ
    3. 资源路径字段中,复制项目的 ID。
  2. 获取访问政策 ID 和服务边界的名称:

    1. 在 Google Cloud 控制台中,转到日志浏览器页面。

      转到日志浏览器

    2. 在工具栏中,选择与发现结果关联的项目。

      项目选择器

    3. 在搜索框中,输入该错误的唯一 ID。

      按错误 UID 搜索

      如果查询结果中未显示错误,请在直方图中延长时间轴,然后重新运行查询。

    4. 点击显示的错误。

    5. 点击展开嵌套字段

    6. 复制 servicePerimeterName 字段的值。该值的格式如下:

      accessPolicies/ACCESS_POLICY/servicePerimeters/SERVICE_PERIMETER

      在本示例中,服务边界的完整资源名称为 accessPolicies/540107806624/servicePerimeters/vpc_sc_misconfigured

      • ACCESS_POLICY 是访问政策 ID,例如 540107806624
      • SERVICE_PERIMETER 是服务边界的名称,例如 vpc_sc_misconfigured

      服务边界的完整资源名称

    7. 要获取与访问权限政策 ID 对应的显示名,请使用 gcloud CLI。

      如果您无法进行组织级查询,请让您的管理员执行此步骤。

      gcloud access-context-manager policies list --organization ORGANIZATION_ID
      

      ORGANIZATION_ID 替换为您的组织的数字 ID。

      您将看到类似于以下内容的输出:

      NAME          ORGANIZATION  SCOPES                 TITLE           ETAG
      540107806624  549441802605                         default policy  2a9a7e30cbc14371
      352948212018  549441802605  projects/393598488212  another_policy  d7b47a9ecebd4659

      显示名称是与访问政策 ID 对应的标题。记下访问政策的显示名称和服务边界的名称。下一部分将会用到它们。

第 2 步:创建授予项目访问权限的入站规则

本部分要求您对 VPC Service Controls 具有组织级访问权限。如果您没有组织级访问权限,请让您的管理员执行这些步骤。

在以下步骤中,您将为在第 1 步中识别的服务边界创建入站规则。

如需授予服务帐号对服务边界的入站访问权限,请按以下步骤操作。

  1. 转到 VPC Service Controls。

    转到 VPC Service Controls

  2. 在工具栏中,选择您的 Google Cloud 组织。

    项目选择器

  3. 在下拉列表中,选择包含要授予访问权限的服务边界的访问权限政策。

    访问权限政策列表

    与访问权限政策关联的服务边界将显示在列表中。

  4. 点击服务边界的名称。

  5. 点击 修改边界

  6. 在导航菜单中,点击入站流量政策

  7. 点击添加规则

  8. 按如下方式配置规则:

    API 客户端的“来自于”特性

    1. 来源部分,选择所有来源
    2. 身份部分,选择选定的身份
    3. 添加用户/服务账号字段中,点击选择
    4. 输入服务账号电子邮件地址。 如果您同时拥有组织级层和项目级层服务账号,请同时添加这两个服务账号。
    5. 点击保存

    GCP 服务/资源的“至”特性

    1. 对于项目,选择所有项目,或选择发现结果中指定的项目。

    2. 对于服务,请选择所有服务,或选择 Security Health Analytics 所需的下列各项服务:

      • BigQuery API
      • Binary Authorization API
      • Cloud Logging API
      • Cloud Monitoring API
      • Compute Engine API
      • Kubernetes Engine API

    如果服务边界限制对所需服务的访问,则 Security Health Analytics 无法为该服务生成发现结果。

  9. 在导航菜单中,点击保存

如需了解详情,请参阅配置入站和出站政策

了解此发现结果类型支持的资产和扫描设置

Security Command Center service account missing permissions

API 中的类别名称SCC_SERVICE_ACCOUNT_MISSING_PERMISSIONS

Security Command Center 的 Google 管理的服务账号缺少正常运行所需的权限。

服务账号的标识符是具有以下格式的电子邮件地址:

service-RESOURCE_KEYWORD-RESOURCE_ID@security-center-api.iam.gserviceaccount.com

替换以下内容:

  • RESOURCE_KEYWORD:关键字 orgproject,具体取决于拥有服务帐号的资源
  • RESOURCE_ID:以下各项之一:
    • 组织 ID(如果服务帐号归组织所有)
    • 如果服务帐号归某个项目所有,则为 项目编号

如果您同时拥有组织级服务帐号和项目级服务帐号,请对这两个帐号应用修复措施。

要修复此发现结果,请按以下步骤操作:

  1. 向服务账号授予 Security Center Service Agent (roles/securitycenter.serviceAgent) 角色。

    如需了解详情,请参阅授予单个角色

    或者,如果要使用自定义角色,请确保它具有 Security Center Service Agent 角色中的权限。

  2. 确保没有 IAM 拒绝政策阻止服务账号使用所需角色中的任何权限。如果存在阻止访问权限的拒绝政策,请在拒绝政策中将服务帐号添加为例外主帐号

了解此发现结果类型支持的资产和扫描设置

后续步骤

了解 Security Command Center 错误