更改 Gitlab SAST json 报告名称

Changing Gitlab SAST json report names

问题

Note: My CI contains a code complexity checker which can be ignored. This question is mainly focused on SAST.

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

先科配置

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 分析器是根据项目语言自动检测的。

如果您使用的是预构建的 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 structure/content.

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 structure/content 的唯一方法是手动实施 SAST 测试,根本不使用提供的图像。您可以在 this Gitlab repo.

中查看所有可用的 SAST 分析器

对于License Finder analyzer as an example, the Dockerfile says the entrypoint for the image is the run.sh script.

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

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