向 Security Command Center 报告环境变量中的 Secret

本页介绍了如何使用敏感数据保护的发现服务来确定 Cloud Run 环境变量中是否存在 Secret。敏感数据保护会将所有发现结果作为漏洞报告给 Security Command Center。

Security Command Center 简介

Security Command Center 是 Google Cloud 的集中式漏洞和威胁报告服务。Security Command Center 通过识别错误的配置、漏洞、观察结果和威胁,帮助您强化安全状况。它还会提供有关调查和修复发现问题的建议。

为何要在环境变量中扫描 Secret

在环境变量中存储密文(例如密码)是一种不安全的做法,因为环境变量未加密。其值可在各种系统(例如日志)中收集和公开。我们建议您使用 Secret Manager 存储 Secret。如需了解详情,请参阅有关配置 Secret 的 Cloud RunCloud Run functions 文档。

工作原理

如需执行密钥发现,您需要在组织级或项目级创建发现扫描配置。在您选择的范围内,敏感数据保护功能会定期扫描 Cloud Run 中的 build 和运行时环境变量,以查找 Secret。

如果环境变量中存在 Secret,敏感数据保护会向 Security Command Center 发送 Secrets in environment variables 漏洞发现结果。系统不会生成数据分析文件。所有发现结果都只能通过 Security Command Center 获取。

Sensitive Data Protection 对每个资源最多会生成一个发现结果。例如,如果在同一 Cloud Run 函数的两个环境变量中都发现了 Secret,Security Command Center 中只会生成一个发现结果。

在 Security Command Center 中,您可以执行以下操作来查看 Secrets in environment variables 发现结果:

Google Cloud 控制台中 Security Command Center 发现结果列表中的生成发现结果

以下 JSON 显示了 Secrets in environment variables 发现的示例。此示例仅显示与此功能相关的字段,并未提供完整的字段列表

环境变量中的 Secret

{
  "finding": {
    "canonicalName": "projects/PROJECT_NUMBER/sources/SOURCE_ID/findings/FINDING_ID",
    "category": "SECRETS_IN_ENVIRONMENT_VARIABLES",
    "compliances": [
      {
        "standard": "cis",
        "version": "1.3",
        "ids": [
          "1.18"
        ]
      }
    ],
    "createTime": "DATE_TIME",
    "description": "The affected resource is storing credentials or other secret information in its environment variables. This is a security vulnerability because environment variables are stored unencrypted, and accessible to all users who have access to the code.",
    "eventTime": "DATE_TIME",
    "findingClass": "VULNERABILITY",
    "findingProviderId": "organizations/ORGANIZATION_ID/firstPartyFindingProviders/dlp",
    "mute": "MUTE_STATUS",
    "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
    "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
    "parentDisplayName": "Sensitive Data Protection",
    "resourceName": "//cloudfunctions.googleapis.com/projects/PROJECT_ID/locations/REGION/functions/FUNCTION_ID",
  },
  "resource": {
    "name": "//cloudfunctions.googleapis.com/projects/PROJECT_ID/locations/REGION/functions/FUNCTION_ID",
    "display_name": "projects/PROJECT_ID/locations/REGION/functions/FUNCTION_ID",
    "type": "google.cloudfunctions.CloudFunction",
    "project_name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "project_display_name": "PROJECT_DISPLAY_NAME",
    "parent_name": "//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER",
    "parent_display_name": "PARENT_DISPLAY_NAME"
  }
}
    

查找生成延迟时间

从您在敏感数据保护中启用 Secret 发现开始,最长可能需要 12 小时才能完成环境变量的初始扫描,并且任何 Secrets in environment variables 发现结果都可能需要 12 小时才能显示在 Security Command Center 中。此后,敏感数据保护功能每 24 小时扫描一次环境变量。实际上,扫描的运行频率可能高于该频率。

报告的密钥类型

Secret 的示例包括密码、身份验证令牌和 Google Cloud 凭据。如需查看敏感数据在此功能中扫描的 Secret 类型的完整列表,请参阅凭据和 Secret

支持的资源

对于 Secret 发现,敏感数据保护支持 Cloud Run functions(包括第 1 代 Cloud Functions)和 Cloud Run 服务修订版

价格

此功能不收取敏感数据保护费用。根据您的服务层级,可能需要支付 Security Command Center 费用。Sensitive Data Protection 可与 Security Command Center 的所有服务层级配合使用。

数据驻留

首次创建扫描配置时,您可以指定其在 Sensitive Data Protection 中的存储位置。您创建的所有后续扫描配置都存储在这个区域中。敏感数据保护功能会将您的 Cloud Run 元数据导出到存储扫描配置的区域,但不会导出函数或服务修订版本身。

如果敏感数据保护在环境变量中检测到 Secret,则会将发现结果发送到 Security Command Center,并遵循其数据处理流程。

所需 IAM 角色

如需执行密钥发现,您需要拥有对数据进行性能分析所需的 Identity and Access Management 角色:

此外,您还需要具有适当的角色才能处理 Security Command Center 发现结果。如需了解详情,请参阅 Security Command Center 文档中的用于组织级启用的 IAM

准备工作

  1. 查看贵组织的 Security Command Center 激活级层。如需将数据分析文件发送到 Security Command Center,您必须在任意服务层级的组织级层激活 Security Command Center。如需了解详情,请参阅为组织激活 Security Command Center

    如果仅在项目级层激活 Security Command Center,敏感数据保护功能的发现结果将不会显示在 Security Command Center 中。

  2. 在 Security Command Center 中,确保已将 Sensitive Data Protection 作为集成服务启用。如需了解详情,请参阅添加 Google Cloud 集成服务

在组织级别配置密钥发现

如果您想在整个组织中开启密文发现功能,请执行以下步骤。如需了解项目级发现,请参阅在项目级配置 Secret 发现

如果您没有“Organization Administrator”(roles/resourcemanager.organizationAdmin) 或“Security Admin”(roles/iam.securityAdmin) 角色,您仍然可以创建扫描配置。不过,在您创建扫描配置后,必须由拥有其中任一角色的人员向您的服务代理授予发现访问权限

  1. 转到创建扫描配置页面。

    转到“创建扫描配置”

  2. 前往您的组织。在工具栏上,点击项目选择器,然后选择您的组织。

    完成此页面上的每个步骤后,点击继续

  3. 对于选择发现类型,选择密钥/凭据漏洞

  4. 对于选择范围,选择是否要扫描整个组织。

  5. 对于管理服务代理容器和结算,指定要用作服务代理容器的项目。您可以让敏感数据保护功能自动创建新项目,也可以选择现有项目。

    • 如果您没有要用作服务代理容器的项目,请选择创建一个新项目作为服务代理容器。Sensitive Data Protection 会创建一个名为 DLP Service Agent Container 的新项目。此项目中的服务代理将用于对 Sensitive Data Protection 和其他 API 进行身份验证。系统会提示您选择要对与此项目相关的所有可计费操作(包括与发现无关的操作)付费的账号。

      如果您没有创建项目所需的权限,系统会停用将新项目创建为服务代理容器选项。在这种情况下,您必须选择一个现有项目,或者让您的 Google Cloud 管理员为您授予 Project Creator (roles/resourcemanager.projectCreator) 角色。

    • 如果您有要重复使用的现有服务代理容器,请选择选择现有的服务代理容器。然后,点击浏览以选择服务代理容器的项目 ID。

  6. 对于设置用于存储配置的位置,选择要存储此扫描配置的区域。您日后创建的所有扫描配置也会存储在此位置。如需了解数据驻留注意事项,请参阅本页面上的数据驻留

  7. 可选:如果您不想在创建扫描配置后立即开始扫描,请选择在暂停模式下创建扫描

    此选项适用于以下情况:

    • 您的 Google Cloud 管理员仍需要向服务代理授予发现访问权限
    • 您要创建多项扫描配置,并且希望某些配置替换其他配置。
  8. 点击创建

在您创建扫描配置或恢复暂停的配置后,敏感数据保护功能会立即开始扫描您的 Cloud Run 环境变量。如需了解发现结果在 Security Command Center 中显示所需的时间,请参阅本页中的发现结果生成延迟时间

如果您没有“Organization Administrator”(roles/resourcemanager.organizationAdmin) 或“Security Admin”(roles/iam.securityAdmin) 角色,则必须由具有这两种角色的用户向您的服务代理授予发现访问权限,然后才能开始发现。

在项目级别配置 Secret 发现

如果您想为单个项目启用密钥发现功能,请按以下步骤操作。如需了解组织级发现,请参阅在组织级配置 Secret 发现

  1. 转到创建扫描配置页面。

    转到“创建扫描配置”

  2. 前往您的项目。在工具栏上,点击项目选择器,然后选择您的项目。

    完成此页面上的每个步骤后,点击继续

  3. 对于选择发现类型,选择密钥/凭据漏洞

  4. 对于选择范围,请确保已选择扫描整个项目。如果未选择该选项,请确保您处于项目视图中。

  5. 对于设置用于存储配置的位置,选择要存储此扫描配置的区域。您日后创建的所有扫描配置也会存储在此位置。如需了解数据驻留注意事项,请参阅本页面上的数据驻留

  6. 点击创建

在您创建扫描配置或恢复暂停的配置后,敏感数据保护功能会立即开始扫描您的 Cloud Run 环境变量。如需了解发现结果在 Security Command Center 中显示所需的时间,请参阅本页中的发现结果生成延迟时间

查询 Secrets in environment variables 项发现结果

以下是可用于在 Security Command Center 中查找 Secrets in environment variables 发现结果的查询示例。您可以在查询编辑器字段中输入这些查询。如需详细了解查询编辑器,请参阅在 Security Command Center 信息中心内修改发现结果查询

列出所有 Secrets in environment variables 发现结果

state="ACTIVE"
AND NOT mute="MUTED"
AND category="SECRETS_IN_ENVIRONMENT_VARIABLES"

列出特定项目的所有 Secrets in environment variables 发现

state="ACTIVE"
AND NOT mute="MUTED"
AND category="SECRETS_IN_ENVIRONMENT_VARIABLES"
AND resource.project_name="//cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER"

替换以下内容:

  • PROJECT_NUMBER:您要查询的项目的数字 ID