扫描结果策略

您可以使用扫描结果策略根据扫描结果采取行动。例如,一种类型的扫描结果策略是允许根据一个或多个安全扫描作业的 findings,要求批准的安全批准策略。在 CI 扫描作业完全执行后评估扫描结果策略。

扫描结果策略编辑器

引入于 14.8 版本,功能标志名为 scan_result_policy。默认禁用。

note只有项目所有者有权选择安全策略项目。

完成策略后,通过选择编辑器底部的 创建合并请求 来保存,将您重定向到项目的已配置安全策略项目的合并请求。 如果安全策略项目未关联到您的项目,系统会为您创建项目。 通过选择编辑器底部的 删除策略,也可以从编辑器界面中删除现有策略。

大多数策略更改会在合并请求合并后立即生效。未通过合并请求并直接提交到默认分支的任何更改,可能需要长达 10 分钟才能使策略更改生效。

策略编辑器支持 YAML 模式和规则模式。

扫描结果策略 schema

带有扫描结果策略的 YAML 文件由一组与嵌套在 scan_result_policy 键下的扫描结果策略模式匹配的对象组成。您可以在 scan_result_policy 键下配置最多五个策略。

当您保存新策略时,GitLab 会根据此 JSON 模式 验证其内容。 如果您不熟悉如何阅读 JSON 模式,以下部分和表格提供另一种选择。

字段 类型 可能的值 描述
scan_result_policy 扫描结果策略的 array   扫描执行策略列表(最多 5 个)

扫描结果策略 schema

字段 类型 可能的值 描述
name string   策略名称。最多 255 个字符。
description(可选) string   策略的描述。
enabled boolean true, false 启用 (true) 或禁用 (false) 策略的标志。
rules 规则的 array   策略应用的规则列表。
actions 操作的 array   策略强制执行的操作列表。

scan_finding 规则类型

此规则根据提供的信息强制执行定义的操作。

字段 类型 可能的值 描述
type string scan_finding 规则的类型
branches stringarray [] 或分支名称 仅适用于受保护的目标分支。一个空数组 [] 可以将规则应用于所有受保护的目标分支。
scanners stringarray sast, secret_detection, dependency_scanning, container_scanning, dast, coverage_fuzzing, api_fuzzing 此规则要考虑的安全扫描程序。
vulnerabilities_allowed integer 大于或等于零 在考虑此规则之前允许的漏洞数。
severity_levels stringarray info, unknown, low, medium, high, critical 此规则要考虑的严重性级别。
vulnerability_states stringarray newly_detected, detected, confirmed, resolved, dismissed 当目标分支设置为默认分支时,此规则要考虑的漏洞状态。newly_detected 状态考虑了所有新检测到的漏洞,无论它们的状态或是否被驳回。其它状态考虑与所选状态匹配且已存在于默认分支中的结果。

require_approval 操作类型

此操作设置在满足已定义策略中的至少一个规则的条件时,需要的批准规则。

字段 类型 可能的值 描述
type string require_approval 操作的类型。
approvals_required integer 大于或等于零 所需的 MR 批准数。
user_approvers array of string 一位或多位用户的用户名 被视为核准人的用户。用户必须有权访问该项目才有资格进行批准。
user_approvers_ids array of integer 一个或多个用户的 ID 被视为核准人的用户的 ID。用户必须有权访问该项目才有资格进行批准。
group_approvers array of string 一个或多个群组的路径 被视为核准人的群组。具有群组中直接成员资格的用户有资格进行批准。
group_approvers_ids array of integer 一个或多个群组的 ID 被视为核准人的群组的 ID。具有群组中直接成员资格的用户有资格进行批准。

要求和限制:

  • 您必须添加相应的安全扫描工具。否则,扫描结果策略将不起作用。
  • 策略的最大数量为五个。
  • 每个策略最多可以有五个规则。

示例安全扫描结果策略项目

您可以在 .gitlab/security-policies/policy.yml 中使用此示例,如安全策略项目中所述: yaml --- scan_result_policy: - name: critical vulnerability CS approvals description: critical severity level only for container scanning enabled: true rules: - type: scan_finding branches: - main scanners: - container_scanning vulnerabilities_allowed: 0 severity_levels: - critical vulnerability_states: - newly_detected actions: - type: require_approval approvals_required: 1 user_approvers: - adalberto.dare - name: secondary CS approvals description: secondary only for container scanning enabled: true rules: - type: scan_finding branches: - main scanners: - container_scanning vulnerabilities_allowed: 1 severity_levels: - low - unknown vulnerability_states: - newly_detected actions: - type: require_approval approvals_required: 1 user_approvers: - sam.white

在此例中:

  • 每个包含由容器扫描识别的新 critical 级别的漏洞的 MR,都需要 alberto.dare 的批准。
  • 每个 MR 都包含一个以上由容器扫描识别的新的 lowunknown 级别的漏洞,需要 sam.white 的一次批准。

扫描结果策略编辑器示例

您可以在扫描结果策略编辑器的 YAML 模式下使用此示例。 它对应于上一个示例中的单个对象:

- name: critical vulnerability CS approvals
  description: critical severity level only for container scanning
  enabled: true
  rules:
  - type: scan_finding
    branches:
    - main
    scanners:
    - container_scanning
    vulnerabilities_allowed: 1
    severity_levels:
    - critical
    vulnerability_states:
    - newly_detected
  actions:
  - type: require_approval
    approvals_required: 1
    user_approvers:
    - adalberto.dare