Help us learn about your current experience with the documentation. Take the survey.

秘密检测

  • Tier: Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

入门指南

下载解决方案组件

  1. 从您的账户团队获取邀请码。
  2. 使用您的邀请码从解决方案组件网络商店下载解决方案组件。

前置条件

  • GitLab Ultimate 层级
  • 对您的 GitLab 实例或群组的管理员访问权限
  • 为您的项目启用了秘密检测

配置秘密检测自定义规则

本指南帮助您在全局级别实施秘密检测策略。此解决方案扩展了默认的秘密检测规则,以包含对 PII 数据元素(如社会保障号码和明文密码)的检测。此规则扩展被视为远程规则集。

配置自定义规则集

您可以按照以下步骤设置自定义规则集:

  1. 创建一个顶级群组 Secret Detection
  2. 从您下载的组件中,将项目 Secret Detection Custom Ruleset 复制到您新创建的 Secret Detection 群组中。

此自定义规则集扩展了 GitLab 预构建规则。扩展可以检测并警告包括以下内容的秘密:

  • PII 数据元素:社会保障号码
  • 明文密码

自定义规则集文件

自定义规则集在 .gitlab/secret-detection-ruleset.toml 中定义 可以使用 regex 定义规则

PII 数据元素检测

PII 数据元素检测的扩展规则

[[rules]]
id = "ssn"
description = "Social Security Number"
regex = "[0-9]{3}-[0-9]{2}-[0-9]{4}"
tags = ["ssn", "social-security-number"]
keywords = ["ssn"]

明文密码

明文密码的扩展规则

[[rules]]
id = "password-secret"
description = "Detect secrets starting with Password or PASSWORD"
regex = "(?i)Password[:=]\s*['\"]?[^'\"]+['\"]?"
tags = ["password", "secret"]
keywords = ["password", "PASSWORD"]

访问已定义的自定义规则集

为了访问自定义规则集,您需要创建一个群组访问令牌,该令牌会生成一个机器人用户。机器人用户可用于运行全局策略秘密检测的任何项目进行身份验证和访问自定义规则集。

要设置访问和身份验证,请按照以下步骤操作:

  1. 创建群组令牌:在群组 Secret Detection 中,在 设置 菜单选项下创建群组访问令牌 Secret Detection Group Token,给令牌 reporter 角色,并授予 read_repository 访问权限

Security Dashboard

  1. 创建群组变量:复制令牌值并安全存储。在 设置 菜单选项下添加一个群组变量,键名为 SECRET_DETECTION_GROUP_TOKEN,值为令牌值。
  2. 获取群组令牌机器人用户:在同一群组中,导航到 管理 菜单选项选择 成员,查找群组访问令牌 Secret Detection Group Token 对应的机器人用户,复制表示群组机器人用户的值,格式为 @group_[group_id]_bot_[random_number]

Security Dashboard

实施指南

本指南涵盖配置策略以使用集中式自定义规则集为所有项目运行秘密检测的步骤。

配置秘密检测策略

要作为强制执行的全局策略在管道中自动运行秘密检测, 请在最高级别(在本例中为顶级群组)设置策略。 要创建新的秘密检测策略:

  1. 创建策略:在同一群组 Secret Detection 中,导航到该群组的 安全 > 策略 页面。
  2. 选择 新建策略
  3. 选择 扫描执行策略
  4. 配置策略:给策略命名 Secret Detection Policy,输入描述并选择 Secret Detection 扫描
  5. 通过选择"此群组中的所有项目"(并可选地设置例外)或"特定项目"(并从下拉列表中选择项目)来设置 策略范围
  6. 操作 部分,“Secret Detection” 默认显示。
  7. 条件 部分,如果您希望按计划运行扫描而不是在每次提交时运行,可以可选地将"触发器:“更改为"计划:"。
  8. 设置对自定义规则集的访问:添加 CI 变量,值为机器人用户、群组变量和自定义规则集项目的 URL。

自定义规则集托管在不同的项目中,被视为远程规则集,因此必须使用 SECRET_DETECTION_RULESET_GIT_REFERENCE

variables:
  SECRET_DETECTION_RULESET_GIT_REFERENCE: "group_[group_id]_bot_[random_number]:$SECRET_DETECTION_GROUP_TOKEN@[custom ruleset project URL]"
  SECRET_DETECTION_HISTORIC_SCAN: "true"

UI 配置如屏幕所示: Security Dashboard 有关此 CI 变量的详细信息,请参阅此文档

  1. 点击 创建策略

完整策略配置

创建策略后,供参考,以下是完整的策略配置:

---
scan_execution_policy:
- name: Scan Execution for Secret Detection with Custom Rules
  description: ''
  enabled: true
  policy_scope:
    projects:
      excluding: []
  rules:
  - type: pipeline
    branches:
    - "*"
  actions:
  - scan: secret_detection
    variables:
      SECRET_DETECTION_RULESET_GIT_REFERENCE: "@group_[group_id]_bot_[random_number]:$SECRET_DETECTION_GROUP_TOKEN@gitlab.com/example_group/secret-detection/secret-detection-custom-ruleset"
      SECRET_DETECTION_HISTORIC_SCAN: 'true'
  skip_ci:
    allowed: true
    allowlist:
      users: []
approval_policy: []

工作原理

策略运行后,与全局策略关联的所有项目都将在管道中自动运行 secret_detection_0 作业。 Security Dashboard

将检测并显示秘密。如果有合并请求,净新增的秘密将显示在 MR 小部件中。如果是默认分支合并,它们将显示在安全漏洞报告中,如下所示: Security Dashboard

以下是明文密码示例: Security Dashboard

故障排除

策略未应用

确保您修改的安全策略项目已正确链接到您的群组。更多内容请参阅链接到安全策略项目