sbom-tools 上手指南:3 条命令拿到你的第一份 SBOM
【免费下载链接】sbom-toolsA tools named sbom-tools, designed for generating the sbom file.项目地址: https://gitcode.com/openeuler/sbom-tools
上次处理漏洞通报,我们要把容器镜像里的库一个个手工列出来——镜像里没有"成分表",谁也说不清里面装了哪些版本的库。sbom-tools 是 openEuler 社区的 SBOM 生成与依赖分析工具集,它能把容器镜像或本地项目扫描一遍,自动输出一份列出全部组件及其许可证的软件物料清单(SBOM)。
工具链全景
sbom-tools 仓库是一套开源 SBOM 工具合集,里面其实装着三个模块,分工很明确:syft 负责扫描容器镜像和本地目录来生成 SBOM;ort(OSS Review Toolkit)负责解析源码项目的依赖树并做许可证合规检查;sbom-tracer 基于 eBPF 在构建过程中实时追踪依赖下载行为。先看这张表建立"谁干什么"的心智模型:
| 组件 | 核心职责 | 典型命令 |
|---|---|---|
| syft | 从容器镜像或本地目录生成 SBOM | syft alpine:latest |
| ort | 项目依赖分析、许可证合规检查 | ort analyze -i ./project |
| sbom-tracer | 构建过程依赖下载实时追踪 | sbom_tracer -s "make build" |
上图是 ort 组件在 CI 环境里跑 analyze → scan → evaluate 流水线的过程,各阶段的分工一眼就能看明白。
一条命令生成 SBOM:从零拿到首份结果
最短路径就一条 syft 命令:它拉取 alpine:latest 镜像,把里面所有包扫出来,结果写到当前目录的 sbom.json。
syft alpine:latest -o json=sbom.json这就是你的第一份 SBOM——打开 sbom.json 能看到镜像里每个包的版本和许可证,熟悉之后一次 SBOM 生成只要一分钟。如果还没装 syft,先 clone 项目,三个模块都在里面:
git clone https://gitcode.com/openeuler/sbom-tools然后按平台选一种安装方式,sbom-tools 安装本身很轻量:
- Linux / macOS:clone 后运行自带的安装脚本
sh sbom-generator/install.sh -b /usr/local/bin - macOS Homebrew:
brew install syft - ort 从源码构建:在 sbom-ort 目录执行
docker build -t ort .(需要 Docker) - sbom-tracer:执行
bash sbom-tracer/install.sh,仅支持 Linux,需要 root
三个高频场景实操:容器镜像、本地目录、格式转换
装好 sbom-tools 后,按下面三个场景走一遍,输出都是可直接归档的文件。
手头是一个容器镜像。syft 扫描容器镜像生成 SBOM,敲:
syft docker.io/library/nginx:1.25 -o cyclonedx-json=nginx.cdx.json得到 CycloneDX 格式的 SBOM,每个包的版本、许可证、所属镜像层都写在结果文件里。
手头是一个本地项目目录。敲:
syft dir:. -o json=project-sbom.json扫完当前目录,输出 project-sbom.json,包含项目里找到的全部库及其许可证。
手头是一份 syft 格式的 SBOM,下游工具却要 CycloneDX。敲:
syft convert project-sbom.json -o cyclonedx-json=project.cdx.json转换不需要重新扫描项目,结果写进 project.cdx.json。
把 SBOM 接进 CI/CD 与合规流程
第一件事是让 CI 在每次推送时自动生成 SBOM 并归档,下面这个 GitHub Actions workflow 做的就是这件事:
name: Generate SBOM on: [push] jobs: sbom: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Generate SBOM run: | brew install syft syft dir:. -o json=sbom.json - uses: actions/upload-artifact@v3 with: {name: sbom, path: sbom.json}一共 13 行,把扫描路径换成你自己的项目目录就能用。第二件事是许可证合规检查,由 sbom-tools 的核心组件 ort 分三步完成:
analyze解析项目的依赖关系,产出 analyzer-result.ymlscanner识别每个依赖的许可证,产出 scan-result.ymlevaluator按你的策略判定并标出违规项
假设前面已构建好 ort 镜像,依次执行:
docker run -v $(pwd):/project ort analyze -i /project -o /project/ort/analyzer docker run -v $(pwd):/project ort scanner -i /project/ort/analyzer/analyzer-result.yml -o /project/ort docker run -v $(pwd):/project ort evaluator -i /project/ort/scan-result.yml -o /project/ort这就是 evaluate 阶段的产出样子:GPL-3.0 这类 copyleft 违规会被点名列出。想细化 syft 的扫描范围和输出,可看 sbom-generator/README.md 里的 .syft.yaml 配置说明;想实时捕获构建实际下载了什么,可看 sbom-tracer/README.md 的 eBPF 追踪方案。
踩坑速查
使用 sbom-tools 最常碰到的三个问题,都是一条命令的事:
- 私有镜像扫描报 401/403——syft 默认读取本机 Docker 凭证,私有仓库没登录过。先跑一次
docker login registry.example.com,再扫描就通了。 - 本地目录扫描太慢、条目太多——原因是 node_modules、vendor 这类大目录被扫进来了。给命令加上
--exclude './node_modules/**' --exclude './vendor/**'即可。 - 大镜像扫描超时——默认逐层扫描,加上
--scope sq-only只扫压平后的最终层,耗时会明显下降。
收尾
什么时候用 sbom-tools?只需要一份组件清单,syft 一条命令就够;还要许可证合规结论,就走 ort 三步流程;想盯住构建过程实际下载了什么,再上 sbom-tracer。三个模块的文档就放在这里,随时可以翻:
- sbom-generator README
- sbom-ort README
- sbom-tracer README
【免费下载链接】sbom-toolsA tools named sbom-tools, designed for generating the sbom file.项目地址: https://gitcode.com/openeuler/sbom-tools
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考