Container Registry and Software Supply Chain Platform  ·  View 07 of 33  ·  2 · Structure

OCI Artifact Model

How a tag, a digest and its evidence relate, and why only one of the three is an identity.

Editable source SVG draw.io All views
Repository apps/checkout · release class, tags immutable Tags — pointers, never identity 2026.09.1 immutable latest mutable · dev only Tag History actor + timestamp Digest — the identity sha256:9f3c… image index Manifest amd64 Config Blob Layer Blobs × 7 shared across images Evidence attached to the digest by the referrers relationship Origin SLSA Provenance in-toto predicate Base Image Lineage layer composition Contents CycloneDX SBOM 1,800 components Scan Result OpenVEX Verification and lifecycle Cosign Signature DSSE envelope Inclusion Proof Rekor SET Promotion Attestation stage → prod Referrers API GET /v2/…/referrers GC Reference Guard running set + retained pointer only resolved digests subject digest subject digest lists evidence never collect OCI Artifact Model — Digest, Tags and Referrers Interface / broker Data store Application we own Security / platform synchronous failure / alternate A provenance document whose subject digest is absent from the registry is rejected on receipt. v 1.0 · owner Platform Engineering · date 2026-09

Decisions

  • The digest is the identity. Every policy statement, attestation and audit record binds to it
  • Tags are pointers, immutable by default in release repositories, and their full history is recorded with actor and timestamp
  • Evidence attaches by the OCI referrers relationship, so it is discoverable from the image with no out-of-band index

Consequences

  • A provenance document cannot be transplanted: the subject digest is part of what is signed
  • An attestation whose subject digest is not in the registry is rejected on receipt
  • Garbage collection consults the running-workload set and retained attestations, so evidence never outlives its subject

Answering question 5

  • Tag to digest is resolved in CI and pinned into the GitOps manifest
  • Production admission denies a tag-only reference outright, so the enforcement point is not a registry client
  • Non-production keeps a mutating webhook that resolves tags, accepting the ergonomic cost of drift for developer speed