4. SBOM 生成工具:Syft、Trivy、SPDX Tools 的安装与基础使用

SBOM 的生成质量直接取决于所选工具的准确性与标准支持能力。本章聚焦三款主流开源工具——Syft(Anchore)、Trivy(Aqua Security)和 SPDX Tools(Linux Foundation),覆盖从安装验证到基础生成命令的完整实操流程。

选型建议:Syft 专为 SBOM 生成设计,速度最快;Trivy 集成了漏洞扫描与 SBOM 生成,适合一体化安全流水线;SPDX Tools 是官方参考实现,适合需要深度定制 SPDX 文档的场景。

4.1 工具对比与适用场景

特性 Syft Trivy SPDX Tools
维护方 Anchore Aqua Security Linux Foundation / SPDX 工作组
核心定位 专用 SBOM 生成器 漏洞扫描 + SBOM 生成 SPDX 文档创建与验证
输出格式 SPDX 2.3, CycloneDX 1.5, Syft JSON SPDX 2.3, CycloneDX 1.5, Table SPDX 2.3 (RDF/XML, JSON, Tag:Value)
支持对象 容器镜像、文件系统、SBOM 文件 容器镜像、文件系统、Git 仓库、SBOM 文件 SPDX 文档(创建、解析、比较)
安装方式 脚本、Homebrew、Docker 脚本、Homebrew、Docker、二进制 Java JAR、Docker、源码编译
典型场景 CI/CD 中快速生成 SBOM 安全扫描 + SBOM 一体化 SPDX 合规验证与文档编辑

4.2 Syft 安装与基础使用

4.2.1 安装

推荐使用官方一键安装脚本(Linux/macOS):

curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

macOS 用户也可通过 Homebrew 安装:

brew install syft

验证安装:

syft version

4.2.2 基础使用

生成容器镜像的 SBOM:

syft alpine:latest -o spdx-json > alpine-sbom.spdx.json

扫描本地文件系统:

syft dir:./my-project -o cyclonedx-json > project-sbom.cdx.json

常用参数说明:

  • -o / --output:指定输出格式(spdx-json, cyclonedx-json, syft-json, table 等)
  • --scope:扫描范围(all-layers, squashed)
  • --file:直接写入文件
实操要点:Syft 默认使用 squashed 模式合并镜像层,减少重复包;若需逐层分析,使用 --scope all-layers。

4.3 Trivy 安装与基础使用

4.3.1 安装

使用官方安装脚本:

curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.50.1

macOS 用户:

brew install trivy

验证安装:

trivy --version

4.3.2 基础使用

生成 SBOM(不执行漏洞扫描):

trivy image --format spdx-json --output trivy-sbom.spdx.json alpine:latest

扫描文件系统并输出 CycloneDX:

trivy filesystem --format cyclonedx-json --output fs-sbom.cdx.json ./my-app

同时生成 SBOM 与漏洞报告:

trivy image --format spdx-json --output sbom.spdx.json --severity CRITICAL,HIGH alpine:latest
注意:Trivy 的 SBOM 生成默认包含漏洞扫描结果;若只需纯 SBOM,使用 --scanners sbom 参数或配合 --severity NONE 过滤。

4.4 SPDX Tools 安装与基础使用

4.4.1 安装

SPDX Tools 以 Java JAR 形式分发,需确保已安装 JDK 11+:

# 下载最新版
wget https://github.com/spdx/tools-java/releases/download/v1.1.7/spdx-tools-1.1.7-jar-with-dependencies.jar

# 创建别名方便调用
alias spdx-tools='java -jar /path/to/spdx-tools-1.1.7-jar-with-dependencies.jar'

验证安装:

spdx-tools Version

4.4.2 基础使用

从已有 SBOM 转换格式:

spdx-tools Convert input.spdx.json output.spdx.rdf.xml

验证 SPDX 文档合规性:

spdx-tools Verify my-sbom.spdx.json

比较两个 SBOM 差异:

spdx-tools Diff sbom-v1.spdx.json sbom-v2.spdx.json
使用场景:SPDX Tools 适合在 SBOM 生成后做格式转换、合规校验和版本对比,常作为 CI 管线的后处理步骤。

4.5 工具工作流对比

下图展示了三款工具在典型 DevSecOps 流水线中的定位差异:

SBOM 生成工具工作流对比 容器镜像 / 文件系统 Syft SPDX / CycloneDX Trivy SBOM + 漏洞报告 SPDX Tools 格式转换 / 验证 / 比较 SBOM 仓库 / 审计系统 Syft:纯 SBOM 生成,速度最快 Trivy:SBOM + 漏洞扫描一体化 SPDX Tools:格式转换与合规验证

4.6 输出格式对比与选择建议

格式 标准版本 Syft Trivy SPDX Tools 推荐场景
SPDX 2.3 JSON ISO/IEC 5962:2021 ✅ ✅ ✅ 合规审计、政府项目
CycloneDX 1.5 JSON OWASP 标准 ✅ ✅ ❌ DevSecOps 集成
SPDX RDF/XML ISO/IEC 5962:2021 ❌ ❌ ✅ 语义网、企业知识图谱
Syft JSON 专有格式 ✅ ❌ ❌ Syft 内部处理

4.7 常见问题与避坑指南

  • 安装失败:检查网络代理设置,Syft 和 Trivy 安装脚本需访问 GitHub Releases;SPDX Tools 需 JDK 11+ 且设置 JAVA_HOME。
  • 生成速度慢:首次运行 Trivy 会下载漏洞数据库(约 500MB),使用 --skip-db-update 跳过更新;Syft 使用 --scope squashed 减少层数。
  • 输出格式不兼容:SPDX Tools 的 Convert 命令可在 SPDX 子格式间互转,但不支持 CycloneDX;跨标准转换需使用 syft convert 或第三方工具。
  • 权限问题:扫描容器镜像需 Docker 守护进程访问权限;扫描文件系统需读取目标目录的权限。
生产环境建议:在 CI/CD 流水线中,优先使用 Syft 生成 SBOM(速度最快),配合 Trivy 做漏洞扫描;SPDX Tools 用于最终格式合规验证和审计归档。