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 用于许可证合规的补充证据。双标准并行可覆盖“安全+合规”双重准入要求。
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"
]
}
]
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,判断是否满足安全基线 |