SPDX 是什么
SPDX 是 Linux 基金会发起的软件物料清单规范:以包、许可证、关系为核心组织信息,广泛用于合规与供应链审计。SPDX 2.x 是主流版本,3.0 已发布并扩展到安全相关表达。消费方关心四件事——组件清单、版本、许可证、依赖关系,生成时保证这四项完整,清单才有使用价值。
基本信息
| 版本 | SPDX 2.x 为主流;3.0 已发布并扩展安全相关表达 |
|---|---|
| 形态 | 标签值(Tag: Value)、JSON、YAML、RDF |
| 核心字段 | PackageName、SPDXID、VersionInfo、LicenseConcluded、Relationship |
| 生成 | syft 等工具可从目录或镜像直接输出 spdx-json |
| 消费 | 合规审查、漏洞关联、供应链追溯 |
典型使用场景
- 合规交付:制品随附 SBOM 交客户或法务审查
- 漏洞追溯:CVE 披露后用组件清单快速定位受影响版本
- CI 生成:构建末尾生成并随制品归档
- 格式选择:按消费方要求选 SPDX 或 CycloneDX
- 抽检校验:对生成的清单做字段完整性检查
- 镜像扫描:对容器镜像生成清单,覆盖传递依赖
生成与检查
生成与检查
syft dir:. -o spdx-json > sbom.spdx.json # 从目录生成
syft registry:app:1.9.0 -o spdx-json > sbom.spdx.json # 从镜像生成
jq '.packages | length' sbom.spdx.json # 检查组件数量
jq '.relationships | length' sbom.spdx.json # 检查关系条目核心字段读法
| 字段 | 含义 | 注意 |
|---|---|---|
| PackageName | 组件名 | 与生态里的常用名保持一致 |
| SPDXID | 文档内唯一标识 | 关系引用依赖它 |
| VersionInfo | 组件版本 | 漏洞关联的关键字段 |
| LicenseConcluded | 审核结论许可证 | 与包自述许可证可能不同 |
| Relationship | 依赖与从属关系 | 缺失则清单不完整 |
SBOM 的消费方关心组件清单、版本、许可证与关系四项,生成后抽查这四项的完整性。
SPDX 与 CycloneDX 是同一事实的两种表达:按客户或平台要求选择输出格式。
字段语义有差别:结论许可证是审核判定,声明许可证是包自述,别混填。
落地要点
- 格式转换:与消费工具链要求的格式不一致时,用支持双向输出的工具转换
- 按制品生成:清单跟随制品而非仓库,制品变更清单同步更新
- 归档同库:清单与制品同版本入库,审计时按版本取用