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

自定义流水线密钥检测

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

根据您的订阅层级和配置方法,您可以更改流水线密钥检测的工作方式。

自定义分析器行为 以:

  • 更改分析器检测的密钥类型。
  • 使用不同的分析器版本。
  • 用特定方法扫描项目。

自定义分析器规则集 以:

  • 检测自定义密钥类型。
  • 覆盖默认扫描器规则。

自定义分析器行为

要更改分析器的行为,请在 .gitlab-ci.yml 中使用 variables 参数定义变量。

所有GitLab安全扫描工具的配置都应在合并请求中测试,然后再将这些更改合并到默认分支。如果不这样做,可能会导致意外结果,包括大量误报。

添加新模式

要在仓库中搜索其他类型的密钥,您可以自定义分析器规则集

若要为所有流水线密钥检测用户提供新的检测规则,请查看我们的规则单一事实来源,并遵循指导创建合并请求。

如果您运营云或SaaS产品,并且有兴趣与GitLab合作以更好地保护用户,请了解我们关于泄露凭证通知的合作伙伴计划的更多信息。

固定到特定分析器版本

GitLab管理的CI/CD模板指定了一个主要版本,并在该主要版本内自动拉取最新的分析器发布版。

在某些情况下,您可能需要使用特定版本。例如,您可能需要避免后续版本中的回归问题。

要覆盖自动更新行为,请在包含 Secret-Detection.gitlab-ci.yml 模板 后,在CI/CD配置文件中设置 SECRETS_ANALYZER_VERSION CI/CD 变量。

您可以将标签设置为:

  • 一个主要版本,如 4。您的流水线将使用在此主要版本内发布的任何次要或补丁更新。
  • 一个次要版本,如 4.5。您的流水线将使用在此次要版本内发布的任何补丁更新。
  • 一个补丁版本,如 4.5.0。您的流水线不会接收任何更新。

此示例使用了分析器的特定次要版本:

include:
  - template: Jobs/Secret-Detection.gitlab-ci.yml

secret_detection:
  variables:
    SECRETS_ANALYZER_VERSION: "4.5"

启用历史扫描

要启用历史扫描,请在 .gitlab-ci.yml 文件中将变量 SECRET_DETECTION_HISTORIC_SCAN 设置为 true

在合并请求流水线中运行作业

请参阅在合并请求流水线中使用安全扫描工具

覆盖分析器作业

要覆盖作业定义(例如,更改 variablesdependencies 等属性),请声明一个与 secret_detection 作业同名的作业来覆盖它。将该新作业放在模板包含之后,并在其下指定任何额外的键。

在以下 .gitlab-ci.yml 文件的摘录示例中:

  • Jobs/Secret-Detection CI 模板已包含
  • secret_detection 作业中,CI/CD 变量 SECRET_DETECTION_HISTORIC_SCAN 被设置为 true。由于模板在流水线配置之前被评估,变量的最后一次提及优先,因此会执行历史扫描。
include:
  - template: Jobs/Secret-Detection.gitlab-ci.yml

secret_detection:
  variables:
    SECRET_DETECTION_HISTORIC_SCAN: "true"

可用的CI/CD变量

通过定义可用的CI/CD变量来更改流水线密钥检测的行为:

CI/CD变量 默认值 描述
SECRET_DETECTION_EXCLUDED_PATHS "" 根据路径排除输出中的漏洞。路径是逗号分隔的模式列表。模式可以是通配符(支持的通配符见doublestar.Match),也可以是文件或文件夹路径(例如 doc,spec)。父目录也会匹配这些模式。之前添加到漏洞报告中的已检测到的秘密不会被移除。在GitLab 13.3中引入
SECRET_DETECTION_HISTORIC_SCAN false 启用历史Gitleaks扫描的标志。
SECRET_DETECTION_IMAGE_SUFFIX "" 添加到镜像名称的后缀。如果设置为 -fips,则使用FIPS-enabled镜像进行扫描。详见使用FIPS启用镜像在GitLab 14.10中引入
SECRET_DETECTION_LOG_OPTIONS "" 指定要扫描的提交范围的标志。Gitleaks使用git log来确定提交范围。当定义此变量时,流水线密钥检测会尝试获取分支中的所有提交。如果分析器无法访问每个提交,则会继续使用已检出的仓库。在GitLab 15.1中引入

在早期GitLab版本中,以下变量也可用:

CI/CD变量 默认值 描述
SECRET_DETECTION_COMMIT_FROM - Gitleaks扫描开始的提交。在GitLab 13.5中被移除,被 SECRET_DETECTION_COMMITS 替代。
SECRET_DETECTION_COMMIT_TO - Gitleaks扫描结束的提交。在GitLab 13.5中被移除,被 SECRET_DETECTION_COMMITS 替代。
SECRET_DETECTION_COMMITS - Gitleaks应扫描的提交列表。在GitLab 13.5中引入在GitLab 15.0中被移除

自定义分析器规则集

  • 层级:Ultimate

你可以通过创建规则集配置文件,在要扫描的仓库或远程仓库中自定义流水线密钥检测所检测的秘密类型。自定义功能允许你修改、替换或扩展默认规则集。

有多种类型的自定义可用:

创建规则集配置文件

要创建规则集配置文件:

  1. 如果项目根目录下不存在,请创建一个 .gitlab 目录。
  2. .gitlab 目录中创建一个名为 secret-detection-ruleset.toml 的文件。

修改默认规则集的规则

您可以修改预定义在默认规则集中的规则。

修改规则可以帮助您将管道密钥检测适应现有的工作流程或工具。例如,您可能想要覆盖检测到的密钥的严重性,或者完全禁用某个规则的检测。

您还可以使用存储在远程(即远程 Git 仓库或网站)的规则集配置文件来修改预定义规则。新规则必须使用自定义规则格式

禁用一个规则

您可以禁用不想激活的规则。要从分析器的默认规则集中禁用规则:

  1. 如果尚不存在,请创建规则集配置文件
  2. ruleset 部分的上下文中,将 disabled 标志设置为 true
  3. 在一个或多个 ruleset.identifier 子部分中,列出要禁用的规则。每个ruleset.identifier 部分包含:
    • 用于预定义规则标识符的 type 字段。
    • 用于规则名称的 value 字段。

在以下 secret-detection-ruleset.toml 文件示例中,禁用的规则通过标识符的 typevalue 匹配:

[secrets]
  [[secrets.ruleset]]
    disable = true
    [secrets.ruleset.identifier]
      type  = "gitleaks_rule_id"
      value = "RSA private key"

覆盖一个规则

如果有特定的规则需要自定义,您可以覆盖它们。例如,您可能会提高特定类型密钥的严重性,因为泄露它会对您的工作流程产生更大的影响。

要从分析器的默认规则集中覆盖规则:

  1. 如果尚不存在,请创建规则集配置文件
  2. 在一个或多个 ruleset.identifier 子部分中,列出要覆盖的规则。每个ruleset.identifier 部分包含:
    • 用于预定义规则标识符的 type 字段。
    • 用于规则名称的 value 字段。
  3. ruleset 部分ruleset.override 上下文中,提供要覆盖的键。可以覆盖任何组合的键。有效键包括:
    • description
    • message
    • name
    • severity(有效选项为:CriticalHighMediumLowUnknownInfo

在以下 secret-detection-ruleset.toml 文件中,规则通过标识符的 typevalue 匹配,然后被覆盖:

[secrets]
  [[secrets.ruleset]]
    [secrets.ruleset.identifier]
      type  = "gitleaks_rule_id"
      value = "RSA private key"
    [secrets.ruleset.override]
      description = "OVERRIDDEN description"
      message     = "OVERRIDDEN message"
      name        = "OVERRIDDEN name"
      severity    = "Info"

使用远程规则集

远程规则集是存储在当前仓库外部的配置文件。它可用于修改多个项目的规则。

若要通过远程规则集修改预定义规则,可使用 SECRET_DETECTION_RULESET_GIT_REFERENCE CI/CD 变量

include:
  - template: Jobs/Secret-Detection.gitlab-ci.yml

variables:
  SECRET_DETECTION_RULESET_GIT_REFERENCE: "gitlab.com/example-group/remote-ruleset-project"

管道秘密检测会假设远程规则集存储的仓库中存在 .gitlab/secret-detection-ruleset.toml 文件来定义配置。若该文件不存在,请确保创建一个,并按照之前所述步骤覆盖禁用预定义规则。

项目中本地的 .gitlab/secret-detection-ruleset.toml 文件默认优先于 SECRET_DETECTION_RULESET_GIT_REFERENCE,因为 SECURE_ENABLE_LOCAL_CONFIGURATION 被设为 true。 若将 SECURE_ENABLE_LOCAL_CONFIGURATION 设为 false,则会忽略本地文件,转而使用默认配置或 SECRET_DETECTION_RULESET_GIT_REFERENCE(若已设置)。

SECRET_DETECTION_RULESET_GIT_REFERENCE 变量使用类似 Git URLs 的格式指定 URI、可选身份验证及可选 Git SHA。变量格式如下:

<AUTH_USER>:<AUTH_PASSWORD>@<PROJECT_PATH>@<GIT_SHA>

若配置文件存储在需身份验证的私有项目中,可安全地将 组访问令牌 存储在 CI 变量中以加载远程规则集:

include:
  - template: Jobs/Secret-Detection.gitlab-ci.yml

variables:
  SECRET_DETECTION_RULESET_GIT_REFERENCE: "group_2504721_bot_7c9311ffb83f2850e794d478ccee36f5:[email protected]/example-group/remote-ruleset-project"

组访问令牌必须具备 read_repository 权限范围,且至少拥有 Reporter 角色。详情见 仓库权限

查看 组的 bot 用户 了解如何找到与组访问令牌关联的用户名。

替换默认规则集

可通过多种自定义项替换默认规则集配置。这些自定义项可通过passthroughs(透传)组合为一个配置。

使用透传可实现:

  • 链接最多 20 个透传 至单个配置,以替换或扩展预定义规则。
  • 在透传中包含环境变量
  • 为评估透传设置超时
  • 验证 各定义透传中使用的 TOML 语法。

使用内联规则集

可通过raw 透传 用内联提供的配置替换默认规则集。

为此,在相同仓库存储的 .gitlab/secret-detection-ruleset.toml 配置文件中加入以下内容,并根据需要调整 [[rules]] 下定义的规则:

[secrets]
  [[secrets.passthrough]]
    type   = "raw"
    target = "gitleaks.toml"
    value  = """
title = "replace default ruleset with a raw passthrough"

[[rules]]
description = "Test for Raw Custom Rulesets"
regex = '''Custom Raw Ruleset T[est]{3}'''
"""

上述示例会将默认规则集替换为检查正则表达式的规则——即匹配 Custom Raw Ruleset T 后跟 3 个字母(est 之一)的组合。

有关透传语法的更多信息,参见 Schema

使用本地规则集

可通过file 透传 用提交至当前仓库的另一文件替换默认规则集。

为此,在相同仓库存储的 .gitlab/secret-detection-ruleset.toml 配置文件中加入以下内容,并根据需要调整 value 以指向本地规则集配置文件的路径:

[secrets]
  [[secrets.passthrough]]
    type   = "file"
    target = "gitleaks.toml"
    value  = "config/gitleaks.toml"

这将把默认规则集替换为 config/gitleaks.toml 文件中定义的配置。

有关透传语法的更多信息,参见 Schema

使用远程规则集

你可以使用 giturl 透传来替换默认规则集,该规则集定义在远程 Git 仓库或在线存储的文件中。

远程规则集可用于多个项目。例如,你可能希望对命名空间下的多个项目应用相同规则集,此时可使用任一类型的透传来加载该远程规则集,并让多个项目使用它。这也实现了规则集的集中管理,只有授权人员才能编辑。

若要使用 git 透传,请在仓库中存储的 .gitlab/secret-detection-ruleset.toml 配置文件内添加以下内容,并将 value 调整为指向 Git 仓库的地址:

# .gitlab/secret-detection-ruleset.toml in https://gitlab.com/user_group/basic_repository
[secrets]
  [[secrets.passthrough]]
    type   = "git"
    ref    = "main"
    subdir = "config"
    value  = "https://gitlab.com/user_group/central_repository_with_shared_ruleset"

在此配置中,分析器会从 user_group/central_repository_with_shared_ruleset 仓库的 main 分支下 config 目录内的 gitleaks.toml 文件加载规则集。之后你可将相同配置包含在其他非 user_group/basic_repository 的项目中。

alternatively(备选方案),你也可以使用 url 透传来替换默认规则集为远程规则集配置。

若要使用 url 透传,请在仓库中存储的 .gitlab/secret-detection-ruleset.toml 配置文件内添加以下内容,并将 value 调整为指向远程文件的地址:

# .gitlab/secret-detection-ruleset.toml in https://gitlab.com/user_group/basic_repository
[secrets]
  [[secrets.passthrough]]
    type   = "url"
    target = "gitleaks.toml"
    value  = "https://example.com/gitleaks.toml"

在此配置中,分析器会从指定地址存储的 gitleaks.toml 文件加载规则集配置。

有关使用的透传语法的更多信息,请参阅 Schema

使用私有远程规则集

如果规则集配置存储在私有仓库中,你必须通过透传的 auth 设置 提供访问仓库的凭证。

auth 设置仅适用于 git 透传。

若要使用存储在私有仓库中的远程规则集,请在仓库中存储的 .gitlab/secret-detection-ruleset.toml 配置文件内添加以下内容,将 value 调整为指向 Git 仓库的地址,并更新 auth 以使用适当的凭证:

[secrets]
  [[secrets.passthrough]]
    type   = "git"
    ref    = "main"
    auth   = "USERNAME:PASSWORD" # 根据实际情况替换 USERNAME 和 PASSWORD
    subdir = "config"
    value  = "https://gitlab.com/user_group/central_repository_with_shared_ruleset"

使用此功能时请注意避免泄露凭证。查看 本节 了解如何使用环境变量最小化风险示例。

有关使用的透传语法的更多信息,请参阅 Schema

扩展默认规则集

你也可以使用附加规则来扩展 默认规则集 配置。当你仍想受益于 GitLab 维护的高置信度预定义规则,同时想为自身项目和命名空间中可能使用的秘密类型添加规则时,这很有帮助。新规则必须遵循 自定义规则格式

使用本地规则集

你可以使用 file 透传来扩展默认规则集以添加额外规则。

在相同仓库中存储的 .gitlab/secret-detection-ruleset.toml 配置文件内添加以下内容,并根据需要调整 value 以指向扩展配置文件的路径:

# .gitlab/secret-detection-ruleset.toml
[secrets]
  [[secrets.passthrough]]
    type   = "file"
    target = "gitleaks.toml"
    value  = "extended-gitleaks-config.toml"

存储在 extended-gitleaks-config.toml 中的扩展配置会被包含在 CI/CD 流水线中分析器所用的配置内。

在下例中,我们添加了几个新的 [[rules]] 部分,用于定义需检测的正则表达式:

# extended-gitleaks-config.toml
[extend]

# 扩展默认打包的规则集,注意:不要更改路径。
path = "/gitleaks.toml"

[[rules]]
  id = "example_api_key"
  description = "示例服务API密钥"
  regex = '''example_api_key'''

[[rules]]
  id = "example_api_secret"
  description = "示例服务API机密"
  regex = '''example_api_secret'''

使用此规则集配置后,分析器会检测与这两个定义的正则表达式模式匹配的任何字符串。

有关使用的传递语法更多信息,请参阅 [Schema](custom_rulesets_schema.md#schema)。

#### 使用远程规则集

类似于你可以用远程规则集替换默认规则集的方式,你也可以通过存储在远程Git仓库或存储在包含`.gitlab/secret-detection-ruleset.toml`配置文件的仓库外部的文件中的配置,来扩展默认规则集。

这可以通过之前讨论的`git`或`url`传递方式来实现。

要通过`git`传递方式实现这一点,请在同一仓库中存储的`.gitlab/secret-detection-ruleset.toml`配置文件中添加以下内容,并根据需要调整`value`、`ref`和`subdir`以指向扩展配置文件的路径:

```toml

# 位于 https://gitlab.com/user_group/basic_repository 的 .gitlab/secret-detection-ruleset.toml
[secrets]
  [[secrets.passthrough]]
    type   = "git"
    ref    = "main"
    subdir = "config"
    value  = "https://gitlab.com/user_group/central_repository_with_shared_ruleset"

管道秘密检测假设远程规则集配置文件名为gitleaks.toml,并存储在引用仓库的main分支的config目录中。

要扩展默认规则集,gitleaks.toml文件应使用类似之前示例的[extend]指令:


# https://gitlab.com/user_group/central_repository_with_shared_ruleset/-/raw/main/config/gitleaks.toml
[extend]

# 扩展默认打包的规则集,注意:不要更改路径。
path = "/gitleaks.toml"

[[rules]]
  id = "example_api_key"
  description = "示例服务API密钥"
  regex = '''example_api_key'''

[[rules]]
  id = "example_api_secret"
  description = "示例服务API机密"
  regex = '''example_api_secret'''

要使用url传递方式,请在同一仓库中存储的.gitlab/secret-detection-ruleset.toml配置文件中添加以下内容,并根据需要调整value以指向扩展配置文件的路径:


# 位于 https://gitlab.com/user_group/basic_repository 的 .gitlab/secret-detection-ruleset.toml
[secrets]
  [[secrets.passthrough]]
    type   = "url"
    target = "gitleaks.toml"
    value  = "https://example.com/gitleaks.toml"

有关使用的传递语法更多信息,请参阅 Schema

使用扫描执行策略

要通过扫描执行策略扩展并强制执行规则集:

忽略模式和路径

在某些情况下,你可能需要忽略某些模式或路径,使其不被管道秘密检测发现。例如,你可能有一个包含用于测试套件的假秘密的文件。

在这种情况下,你可以利用 Gitleaks原生[allowlist]指令 来忽略特定的模式或路径。

无论你使用本地还是远程规则集配置文件,此功能都有效。下面的示例使用了本地规则集,使用file传递方式。

要忽略某个模式,请在同一仓库中存储的.gitlab/secret-detection-ruleset.toml配置文件中添加以下内容,并根据需要调整value以指向扩展配置文件的路径:


# .gitlab/secret-detection-ruleset.toml
[secrets]
  [[secrets.passthrough]]
    type   = "file"
    target = "gitleaks.toml"
    value  = "extended-gitleaks-config.toml"

存储在extended-gitleaks-config.toml中的扩展配置将被包含在分析器使用的配置中。

在下面的示例中,我们添加了一个[allowlist]指令,该指令定义了一个正则表达式,用于匹配要忽略(允许)的秘密:


# extended-gitleaks-config.toml
[extend]

扩展默认打包的规则集,注意:不要更改路径。

path = “/gitleaks.toml”

[allowlist] description = “检测中要忽略的模式 allowlist” regexTarget = “match” regexes = [ ‘‘‘glpat-[0-9a-zA-Z_-]{20}’’’ ]


这将忽略任何与`glpat-`匹配且后跟20个字母数字字符的字符串。

同理,你可以排除特定路径不被扫描。在以下示例中,我们在`[allowlist]`指令下定义了一组要忽略的路径。路径可以是正则表达式,也可以是具体文件路径:

```toml

# extended-gitleaks-config.toml
[extend]

# 扩展默认打包的规则集,注意:不要更改路径。
path = "/gitleaks.toml"

[allowlist]
  description = "检测中要忽略的模式 allowlist"
  paths = [
    '''/gitleaks.toml''',
    '''(.*?)(jpg|gif|doc|pdf|bin|svg|socket)'''
  ]

这将忽略在/gitleaks.toml文件或任何以指定扩展名结尾的文件中检测到的秘密。

Gitleaks v8.20.0开始,你也可以在[allowlist]中使用regexTarget。这意味着你可以通过覆盖现有规则来配置个人访问令牌前缀自定义实例前缀。例如,对于personal access tokens,你可以这样配置:


# extended-gitleaks-config.toml
[extend]

# 扩展默认打包的规则集,注意:不要更改路径。
path = "/gitleaks.toml"

[[rules]]

# 要覆盖的规则 ID:
id = "gitlab_personal_access_token"

# 默认规则的其他属性会被继承
    [[rules.allowlists]]
    regexTarget = "line"
    regexes = [ '''CUSTOMglpat-''' ]

[[rules]]
id = "gitlab_personal_access_token_with_custom_prefix"
regex = '<匹配以你的 CUSTOM 前缀开头的个人访问令牌的正则表达式>'

请记住,你需要考虑默认规则集中配置的所有规则。

有关使用的透传语法的更多信息,请参阅Schema

内联忽略秘密

在某些情况下,你可能希望内联忽略一个秘密。例如,你可能在示例或测试套件中有一个假秘密。在这种情况下,你会希望忽略这个秘密,而不是让它被报告为漏洞。

要忽略一个秘密,请在包含该秘密的行添加gitleaks:allow作为注释。

例如:

"A personal token for GitLab will look like glpat-JUST20LETTERSANDNUMB"  # gitleaks:allow

检测复杂字符串

默认规则集提供了用于检测结构化字符串的模式,误报率较低。然而,你可能希望检测更复杂的字符串,例如密码。由于 Gitleaks 不支持前瞻(lookahead)或后顾(lookbehind),编写一个高置信度、通用的规则来检测非结构化字符串是不可能的。

虽然无法检测所有复杂字符串,但你可以扩展规则集以满足特定用例。

例如,以下规则修改了 Gitleaks 默认规则集中的 generic-api-key 规则

(?i)(?:pwd|passwd|password)(?:[0-9a-z\-_\t .]{0,20})(?:[\s|']|[\s|"]){0,3}(?:=|>|=:|:{1,3}=|\|\|:|<=|=>|:|\?=)(?:'|\"|\s|=|\x60){0,5}([0-9a-z\-_.=\S_]{3,50})(?:['|\"|\n|\r|\s|\x60|;]|$)

这个正则表达式匹配:

  1. pwdpasswdpassword 开头的不区分大小写的标识符。你可以使用其他变体(如 secretkey)进行调整。
  2. 标识符后的后缀。后缀由数字、字母和符号组合而成,长度在 0 到 23 个字符之间。
  3. 常见的赋值运算符,如 =:=:=>
  4. 秘密前缀,通常用作边界以帮助检测秘密。
  5. 由数字、字母和符号组成的字符串,长度在 3 到 50 个字符之间。这就是秘密本身。如果你期望更长的字符串,可以调整长度。
  6. 秘密后缀,通常用作边界。这会匹配常见的结尾,如引号、换行符和新行。

以下是与此正则表达式匹配的示例字符串:

pwd = password1234
passwd = 'p@ssW0rd1234'
password = thisismyverylongpassword
password => mypassword
password := mypassword
password: password1234
"password" = "p%ssward1234"
'password': 'p@ssW0rd1234'

若要使用此正则表达式,请通过本文档中记录的方法之一扩展你的规则集。

例如,假设你希望 使用本地规则集 扩展默认规则集,该规则集包含此规则。

将以下内容添加到存储在同一仓库中的 .gitlab/secret-detection-ruleset.toml 配置文件中。调整 value 以指向扩展配置文件的路径:


# .gitlab/secret-detection-ruleset.toml
[secrets]
  [[secrets.passthrough]]
    type   = "file"
    target = "gitleaks.toml"
    value  = "extended-gitleaks-config.toml"

extended-gitleaks-config.toml 文件中,添加一个新的 [[rules]] 部分,其中包含你要使用的正则表达式:


# extended-gitleaks-config.toml
[extend]

# 扩展默认打包的规则集,注意:不要更改路径。
path = "/gitleaks.toml"

[[rules]]
  description = "通用密码规则"
  id = "generic-password"
  regex = '''(?i)(?:pwd|passwd|password)(?:[0-9a-z\-_\t .]{0,20})(?:[\s|']|[\s|"]){0,3}(?:=|>|=:|:{1,3}=|\|\|:|<=|=>|:|\?=)(?:'|\"|\s|=|\x60){0,5}([0-9a-z\-_.=\S_]{3,50})(?:['|\"|\n|\r|\s|\x60|;]|$)'''
  entropy = 3.5
  keywords = ["pwd", "passwd", "password"]

此示例配置仅为方便起见提供,可能并非适用于所有用例。如果你配置规则集以检测复杂字符串,可能会产生大量误报,或未能捕获某些模式。

演示

有一些演示项目展示了这些配置选项。

下面是一个包含演示项目和关联工作流的表格:

操作/工作流 应用于/通过 使用内联或本地规则集 使用远程规则集
禁用规则 预定义规则 本地规则集 / 项目 远程规则集 / 项目
覆盖规则 预定义规则 本地规则集 / 项目 远程规则集 / 项目
替换默认规则集 文件透传 本地规则集 / 项目 不适用
替换默认规则集 原始透传 内联规则集 / 项目 不适用
替换默认规则集 Git透传 不适用 远程规则集 / 项目

| 替换默认规则集 | URL 透传 | 不适用 | 远程规则集 / 项目 | | 扩展默认规则集 | 文件透传 | 本地规则集 / 项目 | 不适用 | | 扩展默认规则集 | Git 透传 | 不适用 | 远程规则集 / 项目 | | 扩展默认规则集 | URL 透传 | 不适用 | 远程规则集 / 项目 | | 忽略路径 | 文件透传 | 本地规则集 / 项目 | 不适用 | | 忽略路径 | Git 透传 | 不适用 | 远程规则集 / 项目 | | 忽略路径 | URL 透传 | 不适用 | 远程规则集 / 项目 |

| 忽略模式 | 文件直通 | 本地规则集 / 项目 | 不适用 | | 忽略模式 | Git直通 | 不适用 | 远程规则集 / 项目 | | 忽略模式 | URL直通 | 不适用 | 远程规则集 / 项目 | | 忽略值 | 文件直通 | 本地规则集 / 项目 | 不适用 | | 忽略值 | Git直通 | 不适用 | 远程规则集 / 项目 | | 忽略值 | URL直通 | 不适用 | 远程规则集 / 项目 |

还有一些视频演示展示了如何设置远程规则集:

离线配置

  • 层级(Tier): Premium, Ultimate
  • 提供方式(Offering): GitLab 自托管

离线环境通过互联网对外部资源的访问有限、受限或呈间歇性。在此类环境下的实例中,流水线密钥检测需进行一些配置变更。本节说明须与离线环境中详述的说明配合完成。

配置 GitLab Runner

默认情况下,即便存在本地副本,Runner 仍会尝试从 GitLab 容器注册表拉取 Docker 镜像。建议沿用此默认设置以保证镜像始终最新;但若无网络连通性,则需修改默认的 GitLab Runner pull_policy 变量。

将 GitLab Runner CI/CD 变量 pull_policy 配置为 if-not-present

使用本地流水线密钥检测分析器镜像

若需从本地 Docker 注册表而非 GitLab 容器注册表获取镜像,请使用本地流水线密钥检测分析器镜像。

先决条件
导入 Docker 镜像至本地离线 Docker 注册表需遵循网络安全策略。请联系 IT 团队,确认获准的流程以导入或临时访问外部资源。

  1. registry.gitlab.com 将默认流水线密钥检测分析器镜像导入至您的本地 Docker 容器注册表

    registry.gitlab.com/security-products/secrets:6

    流水线密钥检测分析器镜像会定期更新,故需定期同步本地副本。

  2. 将 CI/CD 变量 SECURE_ANALYZERS_PREFIX 设为本地 Docker 容器注册表地址:

    include:
      - template: Jobs/Secret-Detection.gitlab-ci.yml
    
    variables:
      SECURE_ANALYZERS_PREFIX: "localhost:5000/analyzers"

此时,流水线密钥检测任务将使用分析器 Docker 镜像的本地副本,无需联网访问。

使用自定义 SSL CA 证书颁发机构

若需信任自定义证书颁发机构,可将 ADDITIONAL_CA_CERT_BUNDLE 变量设为受信 CA 证书包。可在 .gitlab-ci.yml 文件、文件变量或 CI/CD 变量中配置。

  • .gitlab-ci.yml 文件内,ADDITIONAL_CA_CERT_BUNDLE 值需包含X.509 PEM 公钥证书的文本表示。示例如下:

    variables:
      ADDDITIONAL_CA_CERT_BUNDLE: |
          -----BEGIN CERTIFICATE-----
          MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB
          ...
          jWgmPqF3vUbZE0EyScetPJquRFRKIesyJuBFMAs=
          -----END CERTIFICATE-----
  • 若使用文件变量,将 ADDITIONAL_CA_CERT_BUNDLE 设为证书路径即可。

  • 若使用普通变量,将 ADDITIONAL_CA_CERT_BUNDLE 设为证书文本表示即可。