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 资源模型关系图

下图展示了资源标识、元数据与版本控制之间的协同关系,以及它们如何共同构成信任边界内的资源模型。

资源模型核心关系 资源标识 摘要 (Digest) + 标签 (Tag) 资源元数据 注解 + 引用 (Referrers) 版本控制 不可变性 + 标签策略 信任边界资源模型 内容寻址 签名绑定 策略评估 审计追溯 模型协同说明: 1. 资源标识(摘要)是元数据和版本控制的锚点。 2. 元数据通过引用机制关联签名、SBOM 等附属资源,形成可验证链。 3. 版本控制确保每次变更产生新摘要,旧版本不可篡改,支持审计追溯。 4. 三者共同构成信任边界内的资源生命周期管理基础。

3.5 不可变资源链的验证流程

在分发协同中,资源模型通过以下流程确保端到端的信任传递:

  1. 标识解析:将标签引用解析为不可变的摘要引用。
  2. 元数据获取:通过 referrers API 获取签名、SBOM 等关联资源。
  3. 版本验证:确认资源摘要是否在允许的版本范围内(策略匹配)。
  4. 不可变性检查:验证资源内容与摘要是否一致,防止中间人篡改。
  5. 信任决策:基于元数据链和策略规则,决定是否允许分发或部署。
核心结论:资源模型的三个要素——标识、元数据、版本控制——不是独立存在的。标识提供寻址能力,元数据提供上下文,版本控制提供可追溯性。在 OCI 分发协同中,三者通过摘要引用和 referrers API 紧密耦合,形成不可篡改的信任链。