扫描结果策略

您可以使用扫描结果策略根据扫描结果采取行动。例如,一种类型的扫描结果策略是允许根据一个或多个安全扫描作业的 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   策略名称。
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