本页面介绍了如何使用敏感数据保护的发现服务来确定 Cloud Run 环境变量中是否存在 Secret。Sensitive Data Protection 会将所有发现结果作为漏洞报告给 Security Command Center。
Security Command Center 简介
Security Command Center 是 Google Cloud的集中式漏洞和威胁报告服务。Security Command Center 可通过识别错误配置、漏洞、观测结果和威胁来帮助您强化安全状况。它还会提供有关如何调查和修复发现结果的建议。
为何要扫描环境变量中的 Secret
将密码等 Secret 存储在环境变量中是一种不安全的做法,因为环境变量未加密。它们的值可以收集并显示在各种系统中,例如日志。我们建议您使用 Secret Manager 来存储密钥。如需了解详情,请参阅有关配置 Secret 的 Cloud Run 和 Cloud Run functions 文档。
工作原理
如需执行密钥发现,请在组织级层或项目级层创建发现扫描配置。在所选范围内,敏感数据保护功能会定期扫描 Cloud Run,以查找构建和运行时环境变量中的 Secret。
如果环境变量中存在 Secret,Sensitive Data Protection 会向 Security Command Center 发送 Secrets in environment variables
漏洞发现结果。系统不会生成任何数据分析文件。任何发现结果都只能通过 Security Command Center 查看。
Sensitive Data Protection 会为每个资源生成最多一条发现结果。例如,如果在同一 Cloud Run 函数的两个环境变量中发现了密钥,则 Security Command Center 中只会生成一个发现结果。
在 Security Command Center 中,您可以在执行以下操作时查看 Secrets in environment variables
发现结果:
- 查看 Sensitive Data Protection 发现结果
- 查看或导出 CIS 1.3 或 CIS 2.0 标准的合规性报告。
以下 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" } }
查找生成延迟时间
启用敏感数据发现功能后,Sensitive Data Protection 发现结果可能会在几分钟内开始显示在 Security Command Center 中,具体取决于您组织的规模。对于规模较大的组织或具有影响发现结果生成的特定配置的组织,初始发现结果可能需要长达 12 小时才会显示在 Security Command Center 中。
随后,在发现服务扫描您的资源后几分钟内,Sensitive Data Protection 会在 Security Command Center 中生成发现结果。
报告的密钥类型
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 元数据导出到存储扫描配置的区域,但不会导出函数或服务修订版本本身。
如果 Sensitive Data Protection 在环境变量中检测到 Secret,则会将发现结果发送到 Security Command Center,并受其数据处理流程的约束。
所需 IAM 角色
如需执行密文发现,您需要拥有对数据进行分析所需的 Identity and Access Management 角色:
如需在组织级层执行密文发现,请参阅在组织级层使用数据剖析文件所需的角色。
如需在项目级层执行密文发现,请参阅在项目级层使用数据剖析文件所需的角色。
此外,您还需要适当的角色才能处理 Security Command Center 发现结果。如需了解详情,请参阅 Security Command Center 文档中的适用于组织级激活的 IAM。
准备工作
查看组织的 Security Command Center 激活级层。如需将数据剖析文件发送到 Security Command Center,您必须在任何服务层级的组织级激活 Security Command Center。如需了解详情,请参阅为组织激活 Security Command Center。
如果仅在项目级层激活 Security Command Center,则 Sensitive Data Protection 的发现结果不会显示在 Security Command Center 中。
在 Security Command Center 中,确保已启用敏感数据保护作为集成服务。如需了解详情,请参阅添加Google Cloud 集成服务。
在组织级层配置密文发现
如果您想在整个组织中启用密文发现功能,请执行以下步骤。如需了解项目级发现,请参阅在项目级配置 Secret 发现。
如果您没有 Organization Administrator (roles/resourcemanager.organizationAdmin
) 或 Security Admin (roles/iam.securityAdmin
) 角色,您仍然可以创建扫描配置。不过,创建扫描配置后,必须由拥有上述任一角色的人员向您的服务代理授予发现访问权限。
转到创建扫描配置页面。
前往您的组织。在工具栏上,点击项目选择器,然后选择您的组织。
完成此页面上的每个步骤后,点击继续。
在选择发现类型中,选择密钥/凭据漏洞。
对于选择范围,选择是否要扫描整个组织。
对于管理服务代理容器和结算,指定要用作服务代理容器的项目。您可以让敏感数据保护自动创建新项目,也可以选择现有项目。
如果您没有可作为服务代理容器的项目,请选择创建作为服务代理容器的新项目。 Sensitive Data Protection 会创建一个名为 DLP Service Agent Container 的新项目。此项目中的服务代理将用于向 Sensitive Data Protection 和其他 API 进行身份验证。系统会提示您选择要对与此项目相关的所有可计费操作(包括与发现无关的操作)付费的账号。
如果您没有创建项目所需的权限,则以服务代理容器的形式创建新项目选项处于停用状态。在这种情况下,您必须选择现有项目,或者让您的Google Cloud 管理员为您授予 Project Creator (
roles/resourcemanager.projectCreator
) 角色。如果您有想要重复使用的现有服务代理容器,请选择选择现有的服务代理容器。然后,点击浏览以选择服务代理容器的项目 ID。
对于设置用于存储配置的位置,选择要存储此扫描配置的区域。您日后创建的所有扫描配置也将存储在此位置。如需了解数据驻留注意事项,请参阅本页面上的数据驻留。
可选:如果您不想在创建扫描配置后立即开始扫描,请选择在暂停模式下创建扫描。
此选项适用于以下情况:
点击创建。
在您创建扫描配置或恢复已暂停的配置后,Sensitive Data Protection 会立即开始扫描 Cloud Run 环境变量。如需了解发现结果在 Security Command Center 中显示所需的时间,请参阅本页上的发现结果生成延迟时间。
如果您没有 Organization Administrator (roles/resourcemanager.organizationAdmin
) 或 Security Admin (roles/iam.securityAdmin
) 角色,则必须由具有其中任一角色的用户为您的服务代理授予发现访问权限,然后才能开始发现。
在项目级层配置 Secret 发现
如果您想为单个项目启用密钥发现功能,请执行以下步骤。如需了解组织级发现,请参阅配置组织级密文发现。
转到创建扫描配置页面。
前往您的项目。在工具栏上,点击项目选择器,然后选择您的项目。
完成此页面上的每个步骤后,点击继续。
在选择发现类型中,选择密钥/凭据漏洞。
在选择范围部分中,确保已选择扫描整个项目。如果未选择,请确保您处于项目视图中。
对于设置用于存储配置的位置,选择要存储此扫描配置的区域。您日后创建的所有扫描配置也将存储在此位置。如需了解数据驻留注意事项,请参阅本页面上的数据驻留。
点击创建。
在您创建扫描配置或恢复已暂停的配置后,Sensitive Data Protection 会立即开始扫描 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