Image Signing mit Cosign: Verify, Attest, Provenance nutzen

In modernen Container-Umgebungen wird nicht nur die Erstellung von Images, sondern auch deren Authentizität und Integrität immer wichtiger. Mit Cosign lassen sich Container Images signieren, verifizieren und mit erweiterten Attestierungen versehen. Durch die Nutzung von Provenance können Teams nachvollziehen, wer welches Image erstellt hat und welche Schritte während des Build-Prozesses stattgefunden haben.

1. Einführung in Container Image Signing

Image Signing stellt sicher, dass ein Container Image nicht manipuliert wurde und aus einer vertrauenswürdigen Quelle stammt. Dabei werden kryptografische Schlüssel verwendet, um die Integrität und Authentizität der Images zu garantieren. Cosign ist ein Tool aus der Sigstore-Suite, das diese Funktionen für Container Images einfach umsetzbar macht.

Vorteile von Image Signing

  • Sicherstellung der Authentizität von Images
  • Schutz vor Manipulationen und Supply-Chain-Angriffen
  • Nachvollziehbare Build-Prozesse dank Provenance
  • Integration in CI/CD-Pipelines für automatisierte Signierung

2. Cosign installieren

Cosign kann auf Linux, macOS und Windows installiert werden. Der einfachste Weg ist über das offizielle Installationsskript oder über Paketmanager.

Installation via Script

curl -sSfL https://raw.githubusercontent.com/sigstore/cosign/main/install.sh | sh
cosign version

Installation via Homebrew (macOS/Linux)

brew install sigstore/tap/cosign
cosign version

3. Signieren von Images

Die Signierung eines Images erfolgt mithilfe eines privaten Schlüssels. Cosign unterstützt sowohl lokale Schlüssel als auch Key Management Services (KMS).

Schlüssel generieren

cosign generate-key-pair
# Dies erzeugt cosign.key und cosign.pub

Image signieren

cosign sign --key cosign.key docker.io/meinrepo/meinimage:1.0.0

Die Signatur wird direkt im Container-Registry-Image-Manifest abgelegt, sodass die Verifikation später einfach möglich ist.

4. Verifizieren von Signaturen

Vor dem Deployment oder beim Pullen eines Images kann die Signatur überprüft werden. Dies stellt sicher, dass das Image authentisch ist und von einer vertrauenswürdigen Quelle stammt.

Signatur prüfen

cosign verify --key cosign.pub docker.io/meinrepo/meinimage:1.0.0

Erfolgreiche Verifikation zeigt an, dass das Image unverändert und vertrauenswürdig ist.

5. Attestierungen nutzen

Attestierungen sind Metadaten, die zusätzliche Informationen über ein Image liefern. Dazu gehören Build-Informationen, Prüfergebnisse oder Compliance-Daten.

Attest erzeugen

cosign attest --key cosign.key --type "sbom" docker.io/meinrepo/meinimage:1.0.0 
    --predicate sbom.json

Attest prüfen

cosign verify-attestation --key cosign.pub docker.io/meinrepo/meinimage:1.0.0

So lassen sich z. B. SBOMs oder andere Policy-relevante Informationen direkt an das Image koppeln.

6. Provenance für Nachvollziehbarkeit

Provenance liefert ein Audit-Trail über die Herkunft und Build-Schritte eines Images. Mit Cosign kann diese Information als Teil der Attestierung gespeichert werden.

Build-Provenance generieren

cosign attest --key cosign.key --type "provenance" docker.io/meinrepo/meinimage:1.0.0 
    --predicate provenance.json

Provenance prüfen

cosign verify-attestation --key cosign.pub docker.io/meinrepo/meinimage:1.0.0

Dies erlaubt Teams zu prüfen, wer das Image erstellt hat, welche CI/CD-Pipeline verwendet wurde und welche Build-Artefakte beteiligt waren.

7. Integration in CI/CD-Pipelines

Die Signierung und Verifikation sollte automatisiert im CI/CD-Prozess erfolgen, um menschliche Fehler zu minimieren und sicherzustellen, dass nur geprüfte Images deployed werden.

GitHub Actions Beispiel

jobs:
  sign:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Cosign Sign
        run: |
          cosign sign --key ${{ secrets.COSIGN_KEY }} docker.io/meinrepo/meinimage:1.0.0
      - name: Cosign Verify
        run: |
          cosign verify --key ${{ secrets.COSIGN_PUB }} docker.io/meinrepo/meinimage:1.0.0

GitLab CI Beispiel

stages:
  - sign

sign_image:
stage: sign
image: docker:latest
services:
- docker:dind
script:
- cosign sign --key $COSIGN_KEY docker.io/meinrepo/meinimage:1.0.0
- cosign verify --key $COSIGN_PUB docker.io/meinrepo/meinimage:1.0.0

8. Best Practices

  • Private Schlüssel sicher speichern (z. B. in KMS oder GitHub/GitLab Secrets)
  • Öffentliche Schlüssel versionieren und im Team verfügbar machen
  • Automatische Signierung aller Images im CI/CD-Prozess
  • Attestierungen für SBOM, Provenance und Compliance einbinden
  • Regelmäßige Prüfung der Signaturen vor Deployment

9. Troubleshooting

Häufige Probleme und Lösungen:

  • Fehler beim Zugriff auf Registry: Prüfen von Credentials und Netzwerk
  • Signatur nicht gefunden: Prüfen, ob Image getaggt und signiert wurde
  • CI/CD Secrets falsch gesetzt: Überprüfen der Umgebungsvariablen
  • Veraltete Cosign-Version: Aktualisieren auf die aktuelle Version

10. Zusammenfassung

Mit Cosign lassen sich Container Images zuverlässig signieren, verifizieren und mit Attestierungen versehen. Provenance sorgt für vollständige Nachvollziehbarkeit, während Policy Gates im CI/CD die Integrität und Sicherheit der Deployments automatisiert sichern. Durch diese Maßnahmen wird das Risiko von manipulierten Images reduziert und die Transparenz im Container-Ökosystem erhöht.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles