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

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

Security Command Center 简介

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

为什么要扫描环境变量中的 Secret

在环境变量中存储密钥(如密码)并不安全,因为环境变量不会加密。它们的值可以在各种系统中收集和公开,例如日志。我们建议您使用 Secret Manager 存储密钥。如需了解详情,请参阅 Cloud Functions 文档中的配置 Secret

运作方式

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

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

敏感数据保护会为每个函数最多生成 1 个发现结果。例如,如果在同一函数的两个环境变量中发现 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 小时才能完成环境变量的初始扫描。此后,敏感数据保护功能每 24 小时扫描一次环境变量。实际上,扫描的运行频率可以高于此频率。

报告的 Secret 类型

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

支持的资源

对于 Secret 发现,敏感数据保护支持 Cloud Functions(第 1 代和第 2 代)。

价格

此功能不会产生敏感数据保护费用。可能需要支付 Security Command Center 费用,具体取决于您的服务层级(标准或高级)。敏感数据保护可以在标准层级和高级层级与 Security Command Center 配合使用。

数据驻留

首次创建扫描配置时,您需要指定敏感数据保护功能的存储位置。您创建的所有后续扫描配置都会存储在同一区域中。敏感数据保护会将您的 Cloud Functions 函数元数据导出到存储扫描配置的区域,但函数本身不会导出。

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

所需 IAM 角色

如需执行 Secret 发现,您需要分析数据所需的 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 中,确保敏感数据保护已作为集成服务启用。如需了解详情,请参阅添加 Google Cloud 集成服务

在组织级层配置 Secret 发现

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

如果您没有 Organization Administrator (roles/resourcemanager.organizationAdmin) 或 Security Admin (roles/iam.securityAdmin) 角色,仍然可以创建扫描配置。但是,创建扫描配置后,具有上述任一角色的人员必须向您的服务代理授予发现访问权限

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

    转到“创建扫描配置”

  2. 转到您的组织。在工具栏中,点击项目选择器并选择您的组织。

    完成此页面中的每一步后,请点击继续

  3. 选择发现类型部分,选择 Secrets/credentials 漏洞

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

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

    • 如果您没有可用作服务代理容器的项目,请选择创建新项目作为服务代理容器。敏感数据保护会创建一个名为 DLP 服务代理容器的新项目。此项目中的服务代理将用于向敏感数据保护和其他 API 进行身份验证。系统会提示您为与此项目相关的所有可计费操作(包括与发现无关的操作)选择计费帐号。

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

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

  6. Set location to store configuration 部分,选择您要存储此扫描配置的区域。您稍后创建的所有扫描配置也将存储在此位置。如需了解数据驻留注意事项,请参阅本页面中的数据驻留

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

    此选项在以下情况下很有用:

    • 您的 Google Cloud 管理员仍然需要向服务代理授予发现权限
    • 您想要创建多个扫描配置,并且希望一些配置覆盖其他配置
  8. 点击创建

在您创建扫描配置或恢复暂停的配置后,敏感数据保护很快就会开始扫描您的 Cloud Functions 环境变量。如需了解发现结果需要多长时间才会显示在 Security Command Center 中,请参阅本页面上的发现生成延迟

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

在项目级配置 Secret 发现

如果要为单个项目启用 Secret 发现功能,请执行以下步骤。如需了解组织级发现,请参阅在组织级层配置 Secret 发现

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

    转到“创建扫描配置”

  2. 转到您的项目。在工具栏中,点击项目选择器,然后选择您的项目。

    完成此页面中的每一步后,请点击继续

  3. 选择发现类型部分,选择 Secrets/credentials 漏洞

  4. 选择范围部分,确保已选中扫描整个项目。如果未选中该复选框,请确保您位于项目视图中。

  5. Set location to store configuration 部分,选择您要存储此扫描配置的区域。您稍后创建的所有扫描配置也将存储在此位置。如需了解数据驻留注意事项,请参阅本页面中的数据驻留

  6. 点击创建

在您创建扫描配置或恢复暂停的配置后,敏感数据保护很快就会开始扫描您的 Cloud Functions 环境变量。如需了解发现结果需要多长时间才会显示在 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