3. PDB 追踪基础概念
在镜像供应链安全环境中,PDB(Provenance-Based Data,基于来源的数据) 是构建可信晋级通道的核心数据基础设施。它记录软件制品从构建、分发到部署全生命周期的来源信息,为安全审计、合规验证和异常检测提供不可篡改的证据链。
3.1 PDB 定义与核心价值
PDB 是一组结构化的元数据集合,用于描述软件制品“从何而来、由谁构建、如何构建、经过哪些环节”。在容器镜像场景中,PDB 通常以 SLSA Provenance、in-toto 布局 或 OCI Artifact 的形式嵌入镜像仓库或独立存储。
| 维度 | 说明 | 安全意义 |
|---|---|---|
| 来源(Provenance) | 制品的构建者、构建时间、构建工具链 | 防止假冒制品、识别非授权构建 |
| 完整性(Integrity) | 制品哈希、数字签名、材料清单 | 检测篡改、保证传输一致性 |
| 可审计性(Auditability) | 每个环节的签名者、策略、时间戳 | 支持事后追溯、合规取证 |
| 可复现性(Reproducibility) | 构建参数、依赖版本、环境快照 | 验证构建过程是否被篡改 |
关键原则: PDB 必须满足“不可伪造、不可篡改、可验证”三大特性。任何环节的 PDB 缺失或异常,都应触发晋级通道的阻断或降级处理。
3.2 溯源数据模型
溯源数据模型定义了 PDB 的结构化组织方式。业界主流模型包括 W3C PROV、SLSA Provenance 和 in-toto Step。在镜像供应链场景中,我们采用 四层溯源模型:
- 实体层(Entity):描述制品本身,如镜像 Digest、SBOM、签名文件。
- 活动层(Activity):描述构建、扫描、签名、推送等操作。
- 代理层(Agent):描述执行活动的实体,如 CI 系统、构建机、签名者。
- 关系层(Relation):描述实体、活动、代理之间的关联,如“被生成”、“被使用”、“被委托”。
3.3 关键元数据字段解析
PDB 元数据字段是溯源数据的原子单元。以下表格列出镜像供应链晋级通道中最关键的 12 个字段,按 必选 和 可选 分类:
| 字段名 | 类型 | 层级 | 说明 | 必选/可选 |
|---|---|---|---|---|
subject.digest |
字符串 | 实体 | 镜像的 SHA256 摘要,唯一标识 | 必选 |
predicate.buildType |
URI | 活动 | 构建类型,如 https://slsa.dev/build/github-actions/v1 |
必选 |
predicate.builder.id |
URI | 代理 | 构建平台标识,如 https://github.com/actions |
必选 |
predicate.invocation.configSource |
对象 | 活动 | 构建配置来源(Dockerfile 路径、CI 配置) | 必选 |
predicate.materials |
数组 | 实体 | 构建依赖列表(基础镜像、依赖包) | 必选 |
predicate.buildConfig |
对象 | 活动 | 构建参数、环境变量、命令 | 可选 |
predicate.metadata.buildStartedOn |
时间戳 | 活动 | 构建开始时间 | 可选 |
predicate.metadata.buildFinishedOn |
时间戳 | 活动 | 构建完成时间 | 可选 |
predicate.metadata.completeness |
布尔 | 关系 | 溯源数据是否完整 | 必选 |
predicate.metadata.reproducible |
布尔 | 关系 | 构建是否可复现 | 可选 |
signature |
对象 | 代理 | PDB 的数字签名,保证完整性 | 必选 |
policyRef |
URI | 关系 | 引用的安全策略版本 | 可选 |
实践建议: 在晋级通道的每个关卡(构建、扫描、签名、推送、部署),至少记录
subject.digest、predicate.buildType、predicate.builder.id 和 signature 四个必选字段,否则该关卡应标记为“溯源不达标”。
3.4 PDB 字段在晋级通道中的映射
每个元数据字段在晋级通道中承担特定的安全职责。以下流程图展示字段如何支撑“构建 → 扫描 → 签名 → 推送 → 部署”五个关键路径:
3.5 PDB 数据格式示例
以下是一个符合 SLSA Provenance v1 规范的 PDB 示例,展示关键字段在实际 JSON 中的组织方式:
{
"_type": "https://in-toto.io/Statement/v1",
"subject": [{
"name": "example-app:latest",
"digest": {"sha256": "abc123def456..."}
}],
"predicateType": "https://slsa.dev/provenance/v1",
"predicate": {
"buildType": "https://slsa.dev/build/github-actions/v1",
"builder": {
"id": "https://github.com/actions/runner/github-hosted"
},
"invocation": {
"configSource": {
"uri": "git+https://github.com/org/repo.git",
"digest": {"sha1": "commit_hash_here"}
}
},
"materials": [{
"uri": "docker://alpine@sha256:base_image_digest",
"digest": {"sha256": "base_image_sha256"}
}],
"metadata": {
"buildStartedOn": "2025-03-01T10:00:00Z",
"buildFinishedOn": "2025-03-01T10:05:00Z",
"completeness": true,
"reproducible": false
}
},
"signature": {
"keyid": "sha256:signing_key_id",
"sig": "base64_encoded_signature"
}
}
⚠️ 常见陷阱: 部分团队只记录
subject.digest 而忽略 materials 和 buildConfig,导致无法追溯基础镜像来源。在晋级通道中,materials 缺失应视为“高危溯源缺陷”,直接阻断晋级。
3.6 PDB 与晋级通道的集成要点
- 不可篡改存储: PDB 应写入不可变日志(如 Rekor、区块链或 WORM 存储),防止事后修改。
- 自动验证: 每个晋级关卡自动验证上游 PDB 的签名和完整性,失败则回滚。
- 字段扩展: 根据组织安全策略,可扩展自定义字段(如
securityScanPassed、complianceLevel)。 - 审计接口: 提供标准 API 供审计工具查询 PDB,支持按
digest、buildType、builder.id检索。
核心结论: PDB 是镜像供应链安全的“数字护照”。没有完整的 PDB,晋级通道就无法建立可信的“来源证明”,任何安全策略都将失去验证基础。