83 Image-Signing und Vertrauen

Container-Images sind heute zentrale Bausteine moderner Softwarelieferketten. Sie transportieren Applikationslogik, Bibliotheken, Laufzeitabhängigkeiten und Konfigurationen – und sind damit ein idealer Angriffspunkt. Ohne ein strukturiertes Vertrauensmodell gleicht der Umgang mit Images dem Ausführen von Binärpaketen unbekannter Herkunft. Image-Signing ist deshalb kein optionales Feature, sondern eine notwendige Stufe in der Sicherheitsarchitektur, vergleichbar mit Signaturen in Paketmanagern oder Firmware-Updates. Podman, Buildah, Skopeo und Kubernetes bewegen sich in einem gemeinsamen Ökosystem aus Signaturen, Vertrauensankern und Richtlinien, die festlegen, was akzeptiert und was strikt blockiert wird.

83.1 Grundidee: Herkunft und Integrität kryptografisch beweisen

Ein signiertes Image beantwortet zwei Fragen:

  1. Wer hat dieses Image erstellt? (Authentizität)
  2. Wurde das Image seit der Signatur verändert? (Integrität)

Dabei werden nicht einzelne Dateien signiert, sondern Manifest und/oder Config der OCI-Struktur. Jede Änderung am Image macht die Signatur ungültig.

Zentrale Konzepte:

Diese Vertrauenskette funktioniert ähnlich wie TLS – nur dass sie auf Container-Registries und OCI-Objekte angewendet wird.

83.2 Modelle: Simple-Signing vs. Notary v2 vs. Cosign

Das Ökosystem kennt mehrere Verfahren. Podman, Skopeo und Buildah nutzen vorrangig:

83.2.1 Simple Signing (Red Hat/containers/image)

83.2.2 Notary v1/v2 (Docker/OCI)

83.2.3 Cosign / Sigstore

Podman kann heute in Build- und Deploy-Prozessen sowohl Simple Signing als auch Cosign/Notary-Aufbauten verwenden – je nach Sicherheitsanforderung.

83.3 Signaturen in Podman: Buildah und Skopeo als Fundament

Podman nutzt intern die Bibliotheken von containers/image, die sämtliche Signierungsmechanismen bereitstellen. Praktisch bedeutet das:

Beispiel (Simple Signing mit GPG):

skopeo copy --sign-by dev@example.com \
    docker://example.com/app:1.0 \
    docker://registry.local/app:1.0

Beim späteren Pull entscheidet die Trust Policy, ob das Image akzeptiert wird.

83.4 Trust Policies: das eigentliche Sicherheitsmodell

Signaturen sind nutzlos ohne Regeln, die festlegen, welche Signaturen akzeptiert werden dürfen. Diese Regeln stehen in:

/etc/containers/policy.json

oder nutzerspezifisch unter:

~/.config/containers/policy.json

Ein Beispiel:

{
  "default": [{"type": "reject"}],
  "transports": {
    "docker": {
      "registry.local": [
        {
          "type": "signedBy",
          "keyType": "GPGKeys",
          "keyPath": "/etc/pki/myteam.pub"
        }
      ]
    }
  }
}

Interpretation:

Dies ist ein extrem starkes Sicherheitsmodell. Ohne korrekte Signatur verweigert Podman strikt den Containerstart.

83.5 Ablauf eines signierten Image-Downloads

Ein vereinfachter Verifikationsprozess:

Jeder Schritt ist zwingend. Ist die Signatur ungültig, fehlt oder stammt vom falschen Schlüssel, bricht Podman ab.

83.6 Image-Tampering zuverlässig erkennen

Jede Änderung am Image – selbst ein einzelner Byte-Unterschied – verändert den Digest. Da Signaturen den Digest signieren, bedeutet jede Abweichung:

Error: Source image rejected: signature verification failed

Damit sind typische Angriffe praktisch ausgeschlossen:

Diese Zuverlässigkeit ist einer der Gründe, warum Red Hat und OpenShift strikt auf Signaturen setzen.

83.7 Vertrauensketten im Enterprise-Umfeld

Ein Unternehmen benötigt typischerweise:

Die Hierarchie kann wie folgt aussehen:

Die Hostsysteme akzeptieren Images nicht aufgrund ihres Ursprungs, sondern aufgrund ihrer Signatur.

83.8 Image-Signing in Kubernetes

Kubernetes selbst überprüft keine Signaturen – die Nodes bzw. Runtimes tun das. CRI-O (OpenShift) und containerd (Sigstore-Plugins) können so konfiguriert werden, dass:

In OpenShift ist signiertes Pulling Standard. Cosign kann darüber hinaus im Admission Layer validiert werden.

83.9 Häufige Fehler im Umgang mit Signaturen

  1. Signaturen erzeugen, aber keine Policies setzen → Images werden trotzdem unbesehen akzeptiert.

  2. Policies zu breit formuliert → jede gültige Signatur erkennt der Host, nicht nur interne.

  3. Schlüssel nicht zentral verteilt → Nodes verweigern Images, Pipelines brechen.

  4. Key Rotation ohne Re-Signing → ältere Images werden plötzlich ungültig.

  5. Cosign keyless ohne Rekor-Integration → Signaturen können nicht langfristig auditiert werden.

83.10 Best Practices für Architekten


Image-Signing ist kein Nice-to-have, sondern das Fundament einer vertrauenswürdigen Lieferkette. Die Kombination aus kryptografischer Signatur, klaren Trust Policies und einer durchgängigen Integration in Podman, Skopeo, Buildah und Kubernetes schafft die Grundlage, auf der produktionsnahe Architekturen sicher betrieben werden können.