首页 > 解决方案 > 更改 Gitlab SAST json 报告名称

问题描述

问题

注意:我的 CI 包含一个可以忽略的代码复杂性检查器。这个问题主要集中在SAST上。

我最近为我的一个 Gitlab 项目设置了一个 SAST 管道。Gitlab-ce 和 Gitlab-runner 实例是自托管的。SAST 扫描完成后,下载的 artifacts/json 报告都包含相同的名称gl-sast-report.json。在此示例中,工件 bandit-sast 和 semgrep-sastgl-sast-report.json在下载时都是产品。

SAST 配置

stages:
- CodeScan
- CodeComplexity

sast:
  stage: CodeScan
  tags:
    - sast

code_quality:
  stage: CodeComplexity
  artifacts:
    paths: [gl-code-quality-report.json]
  services:
  tags:
    - cq-sans-dind

include:
- template: Security/SAST.gitlab-ci.yml
- template: Code-Quality.gitlab-ci.yml

完成的 SAST 结果

在此处输入图像描述
在此处输入图像描述

最终目标

  1. 如果可能,我如何更改 bandit-sast 和 semgrep-sast 的工件名称?
  2. 如果问题一个是可能的,这是否意味着我必须为各种项目手动指定每个分析器。目前,基于我.gitlab-ci.yml的 SAST 分析器是基于项目语言自动检测的。

标签: gitlabgitlab-cigitlab-ci-runnergitlab-ce

解决方案


如果您使用的是预构建的 SAST 映像,则这是不可能的,即使您像这样手动运行 docker 命令:

docker run --volume "$PWD":/code --env=LM_REPORT_VERSION="2.1" --env=CI_PROJECT_DIR=/code registry.gitlab.com/gitlab-org/security-products/analyzers/license-finder:latest

使用这些 SAST(和 DAST)图像时,报告文件将始终具有文档中的名称,但是如果您像上面那样手动运行 docker 命令,您可以在文件作为工件上传之前重命名文件,但它仍然会有相同的 json 结构/内容。

Run License Scanning Analyzer:
  stage: sast
  script:
    - docker run --volume "$PWD":/code --env=LM_REPORT_VERSION="2.1" --env=CI_PROJECT_DIR=/code registry.gitlab.com/gitlab-org/security-products/analyzers/license-finder:latest
    - mv gl-license-scanning-report.json license-scanning-report.json
  artifacts:
    reports:
      license_scanning: license-scanning-report.json

更改 json 结构/内容的唯一方法是手动实现 SAST 测试,而不使用提供的图像。您可以在此 Gitlab 存储库中查看所有可用的 SAST 分析器。

License Finder分析器为例,Dockerfile说图像的入口点是run.shscript

您可以在run.sh 的第 20 行看到它将文件的名称设置为'gl-license-scanning-report.json',但是我们可以通过手动运行 docker 映像来更改名称,所以这并没有真正的帮助。但是,我们可以看到实际分析来自scan_project您可以复制的函数。

因此,虽然可以在没有预先构建的映像的情况下手动运行这些分析器,但要让它们工作起来要困难得多。


推荐阅读