首页/开发/CI/CD 与发布速查/SBOM 之 SPDX 格式
构建与制品管理58 条

SBOM 之 SPDX 格式

SPDX 是 Linux 基金会发起的软件物料清单规范:以包、许可证、关系为核心组织信息,广泛用于合规与供应链审计。

CI/CD 与发布速查开发更新于 2026-10-13

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 是同一事实的两种表达:按客户或平台要求选择输出格式。
字段语义有差别:结论许可证是审核判定,声明许可证是包自述,别混填。

落地要点

  • 格式转换:与消费工具链要求的格式不一致时,用支持双向输出的工具转换
  • 按制品生成:清单跟随制品而非仓库,制品变更清单同步更新
  • 归档同库:清单与制品同版本入库,审计时按版本取用

易错点

  • 只生成不校验:字段缺失的 SBOM 无法支撑合规审查,建立抽样检查
  • 术语混用(license 与 concluded license):按规范字段语义填写
  • 版本号缺失或写成 latest:漏洞关联查不准,版本必须落到具体值
  • 把 SBOM 当一次性产物:每次发布都应随制品重新生成,版本与清单能对上

数据来源与参考

  • SPDX 规范(spdx.dev)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌