linux-rhel-centos-fedora container skopeo security auditing registry

Skopeo: Advanced Container Image Auditing (Artikel 106)

Tiefgehende Analyse von Container-Images mit Skopeo. Erfahren Sie, wie Sie Signaturen verifizieren, Manifeste prüfen und Images sicher über Registries hinweg verwalten.

# Skopeo Masterclass: Vertrauen ist gut, Skopeo ist besser

TL;DR / Management Summary Ein podman pull ist ein blinder Vertrauensvorschuss. Sie laden Code herunter, ohne zu wissen, was drin ist. Skopeo ist das Auge des Admins vor dem Download. Es erlaubt das Inspizieren von Remote-Manifesten, das Verifizieren von digitalen Signaturen und den sicheren Transfer von Images zwischen verschiedenen Architekturen (ARM vs x86). In einer Enterprise-Umgebung ist Skopeo das Werkzeug zur Einhaltung von Supply-Chain-Sicherheit.


# 1. Einführung & Architektur

Der Remote-Inspektor.

Skopeo kommuniziert direkt mit der REST-API von Container-Registries (V2). Es muss das Image nicht lokal speichern, um es zu analysieren.

# Der Inspektions-Fluss (Mermaid)

graph LR
    A[Admin Laptop / CI] -->|Skopeo Query| B[Registry API]
    B -->|Return JSON| C[Image Manifest]
    B -->|Return JSON| D[Image Config]
    C --> E[Verify Layers & Hashes]
    D --> F[Verify Entrypoint & Env]
    G[Sigstore / GPG] -->|Verify| C

# 2. Manifest-Analyse: Was ziehen wir da eigentlich?

Hinter die Fassade blicken.

Ein Image kann für verschiedene Architekturen existieren (Multi-Arch).

# Multi-Arch Manifest prüfen

skopeo inspect --raw docker://docker.io/library/nginx:latest | jq

Dies zeigt die Liste aller Architekturen (Digest-Hashes). Sie können dann ein spezifisches Sub-Manifest prüfen:

skopeo inspect docker://docker.io/library/nginx:latest --override-os linux --override-arch arm64

# 3. Image Signaturen & Sicherheit

Echtheit garantieren.

In Enterprise-Umgebungen signieren wir Images mit GPG oder Sigstore (Cosign). Skopeo kann diese Signaturen prüfen.

# Signaturen verifizieren

# Prüft, ob das Image von der vertrauenswürdigen Quelle signiert wurde
skopeo standalone-verify manifest.json docker.io/library/nginx:latest <GPG-KEY-ID> <Signature-File>

# 4. Day-2 Operations: Synchronisation von Environments

Dev-zu-Prod Transfer.

Images sollten niemals zweimal gebaut werden. Ein Image wandert von der dev-Registry zur prod-Registry.

# Skopeo Sync (Massen-Kopieren)

Mit einem YAML-File können Sie ganze Repositories synchronisieren:

skopeo sync --src docker --dest docker registry.dev.local/myapp registry.prod.local/myapp

# 5. Troubleshooting & “War Stories”

Wenn der Transfer hakt.

# Story 1: “Der Manifest-Mismatch”

Symptom: Ein podman run schlägt auf einem ARM-basierten Server (z.B. AWS Graviton) fehl, obwohl das Image existiert. Ursache: Das Image wurde nur für x86 gebaut. Lösung: Nutzen Sie skopeo inspect, um das Architecture Feld zu prüfen. Falls es ein Multi-Arch Image ist, stellen Sie sicher, dass alle Layer in der Ziel-Registry vorhanden sind.

# Story 2: “Registry TLS-Zertifikate”

Symptom: Skopeo meldet “x509: certificate signed by unknown authority”. Ursache: Ihre interne Registry nutzt ein selbstsigniertes Zertifikat. Lösung: Nutzen Sie --tls-verify=false (nur zum Testen!) oder fügen Sie das CA-Zertifikat in /etc/containers/certs.d/<registry_name>/ hinzu. Skopeo respektiert diesen Pfad automatisch.


# 6. Fazit & Empfehlung

  • Vorschau: Machen Sie skopeo inspect zum Teil Ihres Workflows, bevor Sie neue Images in die Produktion aufnehmen.
  • Pipeline: Nutzen Sie Skopeo in GitLab/Jenkins, um Images zwischen Stages zu schieben – es ist hunderte Male schneller als ein Pull/Tag/Push Zyklus mit Podman.
  • Hygiene: Nutzen Sie Skopeo, um Tags in Remote-Registries zu listen und alte Versionen zu identifizieren.

# Anhang: Cheatsheet

Aufgabe Befehl
Remote Tags auflisten skopeo list-tags docker://registry...
Image Metadaten skopeo inspect docker://...
Image ohne Podman kopieren skopeo copy docker://... docker://...
Manifest speichern skopeo inspect --raw docker://... > manifest.json
Digest-Hash finden skopeo inspect --format '{{.Digest}}' docker://...
Registry-Limits prüfen skopeo inspect zeigt oft Rate-Limits im Header (via --debug).