- 扫描结果策略编辑器
- 扫描结果策略 schema
- 扫描结果策略 schema
scan_finding
规则类型require_approval
操作类型- 示例安全扫描结果策略项目
- 扫描结果策略编辑器示例
扫描结果策略
您可以使用扫描结果策略根据扫描结果采取行动。例如,一种类型的扫描结果策略是允许根据一个或多个安全扫描作业的 findings,要求批准的安全批准策略。在 CI 扫描作业完全执行后评估扫描结果策略。
扫描结果策略编辑器
引入于 14.8 版本,功能标志名为
scan_result_policy
。默认禁用。
完成策略后,通过选择编辑器底部的 创建合并请求 来保存,将您重定向到项目的已配置安全策略项目的合并请求。 如果安全策略项目未关联到您的项目,系统会为您创建项目。 通过选择编辑器底部的 删除策略,也可以从编辑器界面中删除现有策略。
大多数策略更改会在合并请求合并后立即生效。未通过合并请求并直接提交到默认分支的任何更改,可能需要长达 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
|
string 的 array
|
[] 或分支名称
| 仅适用于受保护的目标分支。一个空数组 [] 可以将规则应用于所有受保护的目标分支。
|
scanners
|
string 的 array
|
sast , secret_detection , dependency_scanning , container_scanning , dast , coverage_fuzzing , api_fuzzing
| 此规则要考虑的安全扫描程序。 |
vulnerabilities_allowed
| integer
| 大于或等于零 | 在考虑此规则之前允许的漏洞数。 |
severity_levels
|
string 的 array
|
info , unknown , low , medium , high , critical
| 此规则要考虑的严重性级别。 |
vulnerability_states
|
string 的 array
|
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 都包含一个以上由容器扫描识别的新的
low
或unknown
级别的漏洞,需要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