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 流水线中的定位差异:
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 用于最终格式合规验证和审计归档。