3. 资源模型概述:资源标识、资源元数据、资源版本控制与不可变性
在镜像供应链信任边界中,资源模型是描述、定位和验证所有数字工件(镜像、签名、SBOM、策略)的骨架。一个设计良好的资源模型必须解决三个核心问题:如何唯一找到资源(标识)、如何描述资源的内容与属性(元数据)、如何确保资源的每一次变更都可追溯且不可篡改(版本控制与不可变性)。
3.1 资源标识:从名称到内容寻址
传统镜像标识依赖仓库名+标签(nginx:latest),但标签是可变的,无法提供信任锚点。OCI 规范引入了内容可寻址标识(Content-Addressable Identifier),将资源的摘要(Digest)作为其最终标识。
| 标识类型 | 示例 | 可变性 | 信任强度 |
|---|---|---|---|
| 标签引用 | registry.example.com/app:v1.2.3 |
可变(可被覆盖) | 低 |
| 摘要引用 | registry.example.com/app@sha256:a1b2c3... |
不可变(内容固定) | 高 |
| 多摘要引用 | registry.example.com/app@sha256:...@sha256:... |
不可变(复合验证) | 极高 |
关键原则:在信任边界内,所有资源引用必须优先使用摘要标识。标签仅作为人类可读的别名,在策略评估前必须解析为不可变的摘要。
3.2 资源元数据:描述资源的“身份证”
元数据是附着在资源上的结构化信息,用于描述资源的来源、内容、签名状态和供应链上下文。OCI 规范通过注解(Annotations)和引用(References)两种机制承载元数据。
- 注解(Annotations):键值对形式,附加在 Manifest、Index 或 Blob 上。用于记录构建时间、构建工具、CI 流水线 ID、策略版本等。
- 引用(References):通过
referrers API将签名、SBOM、扫描报告等附属资源关联到主镜像。引用本身也是不可变资源,形成元数据链。
// OCI Manifest 中的注解示例
{
"schemaVersion": 2,
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"annotations": {
"org.opencontainers.image.created": "2025-03-15T10:30:00Z",
"org.opencontainers.image.source": "https://github.com/org/app",
"org.opencontainers.image.revision": "abc123def456",
"trust.chain.policy-version": "2.1.0",
"trust.chain.signer": "cosign@v2.4.0"
}
}
实践建议:在供应链资源模型中,元数据应至少包含来源溯源(构建源、提交哈希)、策略上下文(适用的信任策略版本)、签名信息(签名工具、签名时间)。缺失元数据的资源应视为“不可信”。
3.3 资源版本控制与不可变性
不可变性是信任的基石。一旦资源被写入仓库,其内容(由摘要标识)就不能被修改。版本控制通过标签策略和资源生命周期实现可追溯的演进。
3.3.1 不可变性的实现层次
- Blob 层:内容哈希作为标识,写入后不可更改。任何字节变化都会产生新的摘要。
- Manifest 层:引用一组不可变的 Blob,Manifest 本身也是不可变的。更新镜像意味着创建新的 Manifest。
- Index 层:引用多个 Manifest(多架构),Index 本身不可变。新增架构需创建新 Index。
3.3.2 版本控制策略
| 策略 | 描述 | 适用场景 |
|---|---|---|
| 语义化标签 | 使用 v1.2.3 格式,每次发布创建新标签 |
稳定发布、版本管理 |
| 不可变标签 | 标签绑定到固定摘要,禁止覆盖 | 生产环境、合规审计 |
| 时间戳标签 | 使用 20250315-1030-abc123 格式 |
开发环境、CI 流水线 |
| 摘要引用 | 完全依赖 @sha256:...,无标签 |
策略引擎、签名验证 |
常见陷阱:不要在生产环境中使用
latest 标签。标签的可变性会破坏信任链——即使镜像内容被签名,标签指向的摘要可能已被替换。始终在策略中要求摘要引用。
3.4 资源模型关系图
下图展示了资源标识、元数据与版本控制之间的协同关系,以及它们如何共同构成信任边界内的资源模型。
3.5 不可变资源链的验证流程
在分发协同中,资源模型通过以下流程确保端到端的信任传递:
- 标识解析:将标签引用解析为不可变的摘要引用。
- 元数据获取:通过
referrers API获取签名、SBOM 等关联资源。 - 版本验证:确认资源摘要是否在允许的版本范围内(策略匹配)。
- 不可变性检查:验证资源内容与摘要是否一致,防止中间人篡改。
- 信任决策:基于元数据链和策略规则,决定是否允许分发或部署。
核心结论:资源模型的三个要素——标识、元数据、版本控制——不是独立存在的。标识提供寻址能力,元数据提供上下文,版本控制提供可追溯性。在 OCI 分发协同中,三者通过摘要引用和 referrers API 紧密耦合,形成不可篡改的信任链。