2. SBOM 基础概念:SPDX 与 CycloneDX 标准对比、SBOM 字段详解

SBOM(Software Bill of Materials,软件物料清单)是云原生灾备准入策略评审的核心证据载体。理解 SBOM 的标准化格式与核心字段,是实施声明式管理的前提。目前业界主流标准为 SPDX 与 CycloneDX,两者在设计哲学、字段覆盖与使用场景上存在显著差异。

2.1 SPDX 与 CycloneDX 标准对比

SPDX(Software Package Data Exchange)由 Linux 基金会主导,侧重于许可证合规与法律审计;CycloneDX 由 OWASP 社区推动,更关注安全漏洞与供应链风险。下表从多个维度进行对比:

对比维度 SPDX 2.3 CycloneDX 1.5
主导组织 Linux Foundation (SPDX Workgroup) OWASP (CycloneDX Core Team)
核心关注点 许可证合规、版权声明、法律审计 安全漏洞、组件依赖、供应链风险
序列化格式 Tag:Value, JSON, YAML, RDF/XML JSON, XML, Protocol Buffers
组件标识 SPDXID + PackageName + VersionInfo bom-ref + PURL (Package URL)
依赖关系表达 Relationship 元素(DEPENDS_ON, CONTAINS 等) Dependencies 数组 + dependencyGraph
漏洞关联 外部引用(ExternalRef)间接关联 内置 Vulnerabilities 数组,原生支持
许可证表达 LicenseInfoInFile + ExtractedLicenseInfo,支持 SPDX License List Licenses 数组,支持 SPDX ID 与命名表达式
云原生适配 通用,需额外映射容器层 原生支持容器、Kubernetes、Helm Chart
灾备准入适用性 强于法律合规证据链 强于安全漏洞与依赖风险准入
选型建议:在云原生灾备准入场景中,建议以 CycloneDX 作为主格式(因其原生支持容器层与漏洞关联),同时保留 SPDX 用于许可证合规的补充证据。双标准并行可覆盖“安全+合规”双重准入要求。
SPDX 与 CycloneDX 核心差异对比图 SPDX vs CycloneDX 核心差异对比 SPDX 2.3 许可证合规 · 法律审计 • 组件标识:SPDXID + Name + Version • 依赖关系:Relationship 元素 • 漏洞关联:ExternalRef 间接引用 • 许可证:LicenseInfoInFile + 自定义提取 • 序列化:Tag:Value / JSON / RDF • 云原生:通用,需额外映射 • 灾备准入:强于法律合规证据 CycloneDX 1.5 安全漏洞 · 供应链风险 • 组件标识:bom-ref + PURL • 依赖关系:Dependencies 数组 + 图 • 漏洞关联:内置 Vulnerabilities 数组 • 许可证:Licenses 数组 + SPDX ID • 序列化:JSON / XML / Protobuf • 云原生:原生支持容器/K8s/Helm • 灾备准入:强于安全漏洞准入 双标准并行:安全 + 合规双重准入证据链

2.2 SBOM 核心字段详解

无论采用哪种标准,SBOM 均包含一组核心字段,用于描述组件的身份、版本、许可证与依赖关系。以下以 CycloneDX JSON 格式为例,逐字段解析:

2.2.1 组件标识(Component Identity)

每个组件必须具有全局唯一标识。在 CycloneDX 中,使用 bom-ref 作为内部引用 ID,purl(Package URL)作为外部标准化标识。

{
  "bom-ref": "pkg:docker/nginx@1.25.3?arch=amd64",
  "type": "container",
  "name": "nginx",
  "version": "1.25.3",
  "purl": "pkg:docker/nginx@1.25.3?arch=amd64"
}
字段 说明 示例值
bom-ref SBOM 内部唯一引用 ID,用于依赖关系指向 pkg:docker/nginx@1.25.3
type 组件类型:library / container / application / framework 等 container
name 组件名称,遵循反向域名或包名规范 nginx
version 语义化版本号,必须精确到 patch 1.25.3
purl Package URL,标准化组件来源与架构 pkg:docker/nginx@1.25.3?arch=amd64

2.2.2 许可证信息(License Information)

许可证字段是合规审计的核心证据。CycloneDX 支持 SPDX 标准许可证 ID 与自定义命名表达式。

"licenses": [
  {
    "license": {
      "id": "BSD-2-Clause",
      "name": "BSD 2-Clause \"Simplified\" License",
      "url": "https://opensource.org/licenses/BSD-2-Clause"
    }
  },
  {
    "expression": "MIT AND Apache-2.0"
  }
]
合规风险提示:许可证字段必须与组件实际使用的许可证一致。在灾备准入评审中,若组件使用 GPL-3.0 等强 Copyleft 许可证,可能影响企业级分发策略,需在准入策略中标记为“需法务审批”。

2.2.3 依赖关系(Dependency Graph)

依赖关系是构建灾备影响分析的基础。CycloneDX 使用 dependencies 数组表达组件间的依赖树,支持传递依赖的显式声明。

"dependencies": [
  {
    "ref": "pkg:docker/nginx@1.25.3",
    "dependsOn": [
      "pkg:deb/debian/bullseye/libc6@2.31-13",
      "pkg:deb/debian/bullseye/openssl@1.1.1w"
    ]
  },
  {
    "ref": "pkg:deb/debian/bullseye/libc6@2.31-13",
    "dependsOn": [
      "pkg:deb/debian/bullseye/glibc-common@2.31-13"
    ]
  }
]
SBOM 依赖关系图 - 灾备影响分析示例 SBOM 依赖关系图 - 灾备影响分析示例 nginx:1.25.3 (容器) libc6:2.31-13 (deb) openssl:1.1.1w (deb) zlib:1.2.13 (deb) glibc-common:2.31-13 libssl1.1:1.1.1w libcrypto1.1:1.1.1w 灾备影响分析:若 openssl 1.1.1w 存在 CVE-2024-XXXX 则影响 nginx 容器及其所有下游依赖组件 准入策略需阻断该版本,并要求升级至 1.1.1x

2.2.4 哈希与校验(Hashes & Evidence)

哈希字段用于验证组件完整性,是灾备恢复中“证据链”的关键环节。SBOM 应包含至少一种哈希算法(推荐 SHA-256 或 SHA-512)。

"hashes": [
  {
    "alg": "SHA-256",
    "content": "a3b2c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"
  }
]
准入评审要点:在灾备准入策略中,SBOM 的哈希字段应与制品仓库中的签名哈希进行比对。若不一致,则说明组件在构建或传输过程中被篡改,应直接阻断准入。

2.3 SBOM 字段在灾备准入中的映射关系

下表将 SBOM 核心字段映射到云原生灾备准入策略的评审维度,帮助审计人员快速定位证据点:

SBOM 字段 灾备准入评审维度 证据作用
purl / bom-ref 组件身份验证 确认组件来源与架构,防止假冒组件
version 版本准入策略 检查版本是否在允许范围内,阻断已知漏洞版本
licenses 合规审计 验证许可证是否与企业分发策略兼容
dependencies 依赖影响分析 评估组件升级或漏洞修复对下游的影响范围
hashes 完整性校验 验证组件未被篡改,保障灾备恢复的可信性
vulnerabilities 安全准入 直接关联 CVE,判断是否满足安全基线