2. OCI 分发规范基础:OCI Image Spec、Distribution Spec、Artifact Manifest 核心概念

在构建镜像供应链信任体系之前,必须理解 OCI(Open Container Initiative)分发规范的核心组成。Sigstore 的集成、镜像签名、分发验证等所有操作都建立在 OCI 规范之上。本章聚焦三个核心规范:Image Spec(镜像规范)、Distribution Spec(分发规范)和 Artifact Manifest(制品清单),并阐明它们如何构成信任边界的基础层。

2.1 OCI Image Spec:镜像的标准化描述

OCI Image Spec 定义了容器镜像的标准格式,确保不同工具(如 Docker、Podman、containerd)能够一致地构建、存储和运行镜像。其核心是 Manifest(清单)与 Config(配置)的分离架构。

关键设计原则: 镜像内容由内容可寻址存储(Content-Addressable Storage, CAS)管理,每个层(Layer)和配置通过其哈希值(Digest)唯一标识,不可篡改。
组件 作用 示例字段
Manifest 描述镜像的元数据,引用 Config 和 Layers schemaVersion, mediaType, config, layers
Config 包含镜像运行时配置(环境变量、入口点等) architecture, os, rootfs, history
Layer 文件系统变更集,通过 DiffID 和 ChainID 关联 mediaType, size, digest
Index 多架构镜像的入口点,引用多个 Manifest manifests, annotations
// OCI Image Manifest 示例(JSON 结构)
{
  "schemaVersion": 2,
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "config": {
    "mediaType": "application/vnd.oci.image.config.v1+json",
    "size": 7023,
    "digest": "sha256:b5b2b2c507a0944348e0303114d8d93aaaa081732b86451d9bce1f432a537bc7"
  },
  "layers": [
    {
      "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
      "size": 32654,
      "digest": "sha256:9834876dcfb05cb167a5c24953eba58c4ac89b1adf57f28f2f9d09af107ee8f0"
    }
  ],
  "annotations": {
    "org.opencontainers.image.created": "2025-01-15T10:00:00Z"
  }
}
信任边界关联: Sigstore 的签名对象正是 Manifest 的 Digest。一旦 Manifest 被篡改,Digest 变化,签名验证立即失败。这是镜像供应链防篡改的第一道防线。

2.2 OCI Distribution Spec:镜像的标准化分发

OCI Distribution Spec 定义了客户端与镜像仓库之间的 HTTP API 交互协议,涵盖镜像的推送(Push)、拉取(Pull)、删除(Delete)和发现(Discovery)。该规范确保不同仓库实现(如 Harbor、Docker Hub、Quay)遵循统一接口。

核心 API 端点包括:

  • Blob 操作: GET /v2/{name}/blobs/{digest} — 拉取层或配置数据
  • Manifest 操作: PUT /v2/{name}/manifests/{reference} — 上传 Manifest(Tag 或 Digest)
  • 标签操作: GET /v2/{name}/tags/list — 列出仓库所有标签
  • 目录操作: GET /v2/_catalog — 列出仓库所有镜像仓库
// 拉取 Manifest 的 HTTP 请求示例
GET /v2/my-app/manifests/latest HTTP/1.1
Host: registry.example.com
Accept: application/vnd.oci.image.manifest.v1+json

// 响应头包含 Digest
Docker-Content-Digest: sha256:abc123...
安全注意事项: 分发规范本身不提供传输层加密以外的安全机制。镜像的完整性验证(如签名校验)必须由上层工具(如 Sigstore、Notary)实现。Distribution Spec 仅保证“如何传输”,不保证“传输的内容是否可信”。

2.3 Artifact Manifest:扩展信任边界的关键

OCI Artifact Manifest 是 OCI 规范在 1.1 版本中引入的重要扩展,允许在镜像仓库中存储非容器镜像的制品(Artifact),例如:软件物料清单(SBOM)、签名文件、漏洞扫描报告、策略文件等。Artifact Manifest 与 Image Manifest 结构相似,但 mediaType 不同,且 Config 字段可以为空或指向自定义配置。

特性 Image Manifest Artifact Manifest
用途 描述容器镜像 描述任意制品(签名、SBOM、报告)
mediaType application/vnd.oci.image.manifest.v1+json application/vnd.oci.artifact.manifest.v1+json
Config 要求 必须包含 Config 对象 Config 可选,可为空
引用方式 通过 Tag 或 Digest 引用 通过 subject 字段引用关联的镜像
信任价值 镜像内容完整性 将信任元数据(签名、策略)与镜像绑定
// OCI Artifact Manifest 示例(引用签名制品)
{
  "schemaVersion": 2,
  "mediaType": "application/vnd.oci.artifact.manifest.v1+json",
  "artifactType": "application/vnd.dev.cosign.artifact.sig.v1+json",
  "blobs": [
    {
      "mediaType": "application/octet-stream",
      "size": 238,
      "digest": "sha256:xyz789..."
    }
  ],
  "subject": {
    "mediaType": "application/vnd.oci.image.manifest.v1+json",
    "size": 1024,
    "digest": "sha256:abc123..."
  },
  "annotations": {
    "org.opencontainers.image.created": "2025-01-15T12:00:00Z"
  }
}
信任边界扩展: Artifact Manifest 的 subject 字段将签名、SBOM 等信任元数据直接绑定到目标镜像的 Digest 上。Sigstore 的 Cosign 工具正是利用这一机制,将签名作为 Artifact 推送到镜像仓库,实现“镜像 + 签名”的原子化存储与分发。

2.4 三层规范的关系与信任边界

下图展示了 OCI Image Spec、Distribution Spec 和 Artifact Manifest 在镜像供应链中的协作关系,以及它们如何共同构成信任边界的基础层。

OCI 规范三层架构与信任边界 OCI Image Spec(镜像规范) 定义镜像的标准化结构:Manifest → Config → Layers 内容可寻址存储(CAS),Digest 作为完整性指纹 OCI Distribution Spec(分发规范) 定义 HTTP API:Push / Pull / Delete / List 客户端与仓库之间的标准化交互协议 OCI Artifact Manifest(制品清单) 扩展存储:签名、SBOM、漏洞报告等信任元数据 通过 subject 字段绑定到目标镜像 Digest 信任边界 完整性 可追溯 防篡改 传输安全 接口统一 元数据绑定 签名存储 策略关联

2.5 核心概念对比与选型建议

概念 核心作用 信任边界贡献 Sigstore 集成点
Image Spec 镜像标准化描述 Digest 防篡改 签名对象(Manifest Digest)
Distribution Spec 镜像标准化分发 传输层完整性 API 扩展(Referrers API)
Artifact Manifest 制品标准化存储 信任元数据绑定 签名/SBOM 存储载体
实践建议: 在构建镜像供应链信任体系时,优先确保仓库支持 OCI Artifact Manifest(OCI 1.1+)。这是 Sigstore Cosign 将签名与镜像原子化存储的前提。如果仓库仅支持 Image Spec,签名将无法通过 subject 字段关联,需要额外的索引机制。

2.6 本章小结

  • OCI Image Spec 提供了镜像内容的标准化结构与完整性指纹(Digest)。
  • OCI Distribution Spec 定义了镜像的标准化分发协议,确保跨仓库互操作性。
  • OCI Artifact Manifest 扩展了仓库的存储能力,使签名、SBOM 等信任元数据能够与镜像绑定。
  • 三层规范共同构成了镜像供应链信任边界的基础设施层,为 Sigstore 等签名工具提供了可操作的标准化环境。