极狐驭码 x MiniMax M2 为码而生 - 极狐驭码全面适配 MiniMax M2
了解详情
将外部安全扫描器集成到您的 DevSecOps 工作流中
极狐GitLab
2025-10-28
3245
分享:

学习如何通过解析 JSON 产物并利用 SARIF 文件格式,将 Snyk 扫描结果引入合并请求小部件。

 

每天构建软件时,安全漏洞都可能悄悄进入生产环境。因此,将安全左移并将安全测试及其检测到的漏洞置于软件开发生命周期的前沿变得比以往任何时候都更加重要。

 

虽然极狐GitLab 提供多种安全扫描器,但我们由 AI 驱动的 DevSecOps 平台可让您全面了解软件的安全性。我们致力于让您不仅能运行扫描,还能查看结果、通过合并请求策略构建审批流程,并在默认分支中显示当前漏洞,以便在我们的漏洞报告中进行后续分类。

 

安全扫描如何运行?

 

极狐GitLab 旗舰版直接在合并请求小部件中显示漏洞,并在每次提交时更新。这些扫描通常通过流水线中的作业运行,无论是在项目的 .gitlab-ci.yml 流水线中,还是在单独控制的合规性流水线、安全策略或来自独立 .yml 文件的包含流水线配置中。您可以运行极狐GitLab 的原生安全扫描器,也可以运行外部扫描器。在本篇博客中,我尝试运行 Snyk 扫描,探索如何将依赖项扫描结果作为漏洞记录反馈回极狐GitLab。此外,我使用了静态分析结果交换格式(SARIF)转换器直接从 Snyk 读取 SAST 结果,无需自定义脚本。

 

使用外部扫描器

 

极狐GitLab 具有高度可扩展性,该平台允许您集成多种工具。您可以使用我们内置的安全扫描器之一,或通过流水线或策略中的作业使用外部扫描器。极狐GitLab 作为治理和执行的单一平台,允许您自带扫描器并在 DevSecOps 生命周期的早期查看结果。

您只需运行安全作业即可开始,然后就可以在合并请求和漏洞报告中查看结果。

 

从极狐GitLab CI 运行外部扫描

 

在此示例流水线中,我在测试阶段覆盖了一个名为 gemnasium-maven-dependency_scanning 的作业,在其中外部运行 Snyk 扫描。首先,我安装所需的软件包(npm、Maven、Python3 和 Snyk),然后使用保存在项目变量部分的 SNYK_TOKEN 变量进行授权。最后,我使用 Snyk CLI 运行 snyk test 命令并将结果输出到 JSON。这将结果保存到 snyk_data_file.json 中,我将在下一节详细介绍的脚本中解析该文件,并将其保存到所需的产物文件 gl-dependency-scanning-report.json

stages:
  - test

variables:

include:
  - template: Jobs/Dependency-Scanning.gitlab-ci.yml  

gemnasium-maven-dependency_scanning:
  image: node:latest
  stage: test
  services:
  - openjdk:11-jre-slim-buster
  before_script:
    - apt-get update
    - apt-get install default-jdk -y
  script:
    # Install npm, snyk, and maven
    - npm install -g npm@latest
    - npm install -g snyk
    - npm install maven
    - npm install python3
    # Run snyk auth, snyk monitor, snyk test to break build and out report
    - snyk auth $SNYK_TOKEN
    - chmod +x mvnw
    - snyk test --all-projects --json-file-output=snyk_data_file.json || true
    - python3 convert-snyk-to-gitlab.py

  # Save report to artifacts
  artifacts:
    when: always
    paths: 
      - gl-dependency-scanning-report.json

 

 

解析 JSON

 

只要成功的安全作业产物命名正确(例如 gl-dependency-scanning-report.json),您就可以在合并请求小部件中查看来自任何外部扫描器的扫描结果。

以下是将 Snyk JSON 输出转换为极狐GitLab JSON 输出的示例脚本。在此示例中,我打开 Snyk 数据文件并加载漏洞数据。我创建了一个新的依赖文件列表和一个新的漏洞列表,其中包含极狐GitLab 在漏洞记录中显示所需的数据,例如标识符、严重性、类别、描述和位置。我为不需要在记录中显示的必填字段添加了一些占位符部分。最后,我将解析出的内容保存到名为 gl-dependency-scanning-report.json 的新 JSON 文件中,这是极狐GitLab 读取文件内容并在小部件中显示所需的标准文件名。

现在,漏洞发现结果在合并请求小部件中可见。

 

什么是 SARIF 和 SARIF 转换器?

 

SARIF 是静态分析工具输出的文件格式。在利用不同的安全扫描器时,它非常有用,因为所有扫描器的输出格式都相同。这为应用安全提供了一种通用、可重复且可扩展的方法。

有一个社区维护的 SARIF 转换器,它获取 SARIF 文件并将其转换为可摄取的报告。它支持多种扫描器,包括 Snyk。该转换器适用于 SAST 和代码质量发现。本篇博客我们将重点讨论 SAST。

 

使用 SARIF 转换器获取 SAST 结果

 

要利用 SARIF 结果,首先我像上一个示例一样触发 Snyk 扫描,但将输出保存为 SARIF 文件。之后,我使用上述转换器创建一个新的 JSON 文件,并将其保存为报告。

snyk:
  image: node:latest
  stage: test
  services:
  - openjdk:11-jre-slim-buster
  before_script:
    - apt-get update
    - apt-get install default-jdk -y
    - wget -O sarif-converter https://gitlab.com/ignis-build/sarif-converter/-/releases/permalink/latest/downloads/bin/sarif-converter-linux
    - chmod +x sarif-converter
  script:
    # Install npm, snyk, and maven
    - npm install -g npm@latest
    - npm install -g snyk
    - npm install maven
    # Run snyk auth, snyk monitor, snyk test to break build and out report
    - snyk auth $SNYK_TOKEN
    - chmod +x mvnw
    - snyk test --all-projects --sarif-file-output=snyk.sarif  || true
    - ./sarif-converter --type sast snyk.sarif snyk.json

  artifacts:
    reports:
      sast: snyk.json

将 JSON 保存为产物后,结果在合并请求小部件中可见。

 

开始使用

在本篇博客中,您学习了如何使用自定义脚本和 SARIF 转换器在极狐GitLab 合并请求小部件中查看外部扫描器漏洞。这些操作可以从所示的流水线中完成,也可以从合规性流水线和流水线执行策略中完成,这些策略允许强制执行外部扫描器。通过极狐GitLab 旗舰版,您可以访问完整的 DevSecOps 平台,该平台允许您使用我们的扫描器或自带扫描器,并构建左移工作流,使开发人员能够在漏洞进入生产环境之前修复它们。

推荐阅读
B8A9EB48-BA35-435A-B1EC-FF08E0FACF0D.png 了解更多
在线咨询

热线电话

400-088-8738

工作日9:00-18:00在线

在线支持

售前咨询.png

一对一专业顾问

置顶

登录查看安装指南
姓名*
公司名称*
电话*
获取验证码
验证码*
我已阅读并同意 隐私政策。
请填写完整信息
姓名*
公司名称*
邮箱*
职位*
  • 业务经理

  • 销售经理

  • 渠道经理

  • 售前工程师

  • 售后工程师

  • 商务经理

  • 其它

我已阅读并同意 隐私政策。
极狐GitLab合作伙伴申请表
姓名*
公司名称*
电话*
邮箱*
职位名称*
公司总部区域*
  • 华北

  • 华东

  • 华中

  • 华南

  • 香港&澳门

  • 其他

我已阅读并同意 隐私政策。
生态联盟合作伙伴申请表
企业名称*
注册地*
  • 华北

  • 华东

  • 华中

  • 华南

  • 香港&澳门

  • 其他

注册时间*
注册资本(万元)*
上一年度公司营收规模(万元)
注公司在职人数*
  • 1-50

  • 50-500

  • 500-1000

  • 1000人以上

公司技术人员
  • 1-50

  • 50-500

  • 500-1000

  • 1000人以上

覆盖行业
主营业务
公司网址*
伙伴类别*
  • 云服务提供商

  • 应用平台提供商

  • ISV

  • 其他

营业执照复印件
公司logo
专利、获奖证书、认证证书清单
联系人姓名*
联系人电话*
联系人邮箱*
联系人地址*
我已阅读并同意 隐私政策。
合作伙伴登录
Partner lD*
子账号注册
密码*
我已阅读并同意 隐私政策。
忘记密码
子账号注册
姓名*
公司名称*
电话*
邮箱*
密码*
职位*
  • 业务经理

  • 销售经理

  • 渠道经理

  • 售前工程师

  • 售后工程师

  • 商务经理

  • 其它

我已阅读并同意 隐私政策。
已有账号
极狐GitLab小助手
关闭窗口
21:25
Hi 你好!
我是你的智能小助理,以下功能选项可供您快速获取所需内容。
驭码CodeRider AI平台
了解更多
查看版本功能差异
点击查看
技术咨询
立即咨询
技术支持.png
专业技术支持