Attestierungen mit der OpenSSF-Kurzübersicht erstellen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

In dieser Anleitung wird gezeigt, wie Sie mit der OpenSSF-Kurzübersicht Container-Images auf Best Practices für die Sicherheit der Lieferkette prüfen. Der Scorecard-Attestierer wird als Teil der Cloud Build-Pipeline ausgeführt, um eine Attestierung zu generieren, die vor der Bereitstellung von der Binärautorisierung überprüft werden kann. Mit diesem Bestätigungsschritt wird verhindert, dass manipulierte Containerartefakte für die Produktion bereitgestellt werden. Dadurch lassen sich Sicherheitslücken in verschiedenen Lieferkettenklassen vermeiden.

Übersicht

Die Open Source Security Foundation (OpenSSF) ist eine Organisation, die Tools, Dienste und Infrastrukturen für Open-Source-Sicherheitsinitiativen bereitstellt. Die Kurzübersicht ist ein Tool, das von OpenSSF verwaltet wird und die Repositories zur Quellcodeverwaltung auf Best Practices für die Lieferkette prüft.

Der Kurzübersicht-Attestierer ist ein in die Kurzübersicht integriertes Tool, mit dem Sie Attestierungen der Binärautorisierung auf der Grundlage einer von Ihnen konfigurierten Richtlinie erstellen können. Der Scorecard Attestor führt die Kurzübersicht für das SCM-Repository eines Container-Images aus, generiert Ergebnisse, wertet die Ergebnisse anhand der Richtlinie aus und generiert eine Attestierung, wenn die Richtlinie erfüllt ist.

In dieser Anleitung erstellen Sie ein Beispiel-Repository und verwenden dann den Scorecard-Attestierer. Jede Beispielpipeline enthält die folgenden Build-Schritte:

  1. build: Erstellen Sie ein Beispiel-Container-Image.
  2. push: Image in Container Registry hochladen
  3. attest: Prüfen und signieren Sie das Image und verwenden Sie den Attestierer von Scorecard, um eine Attestierung auf der Grundlage der Richtlinie zu erstellen.

Im Schritt attest jeder Pipeline führt der Scorecard-Attestierer Folgendes aus:

  1. Ruft Daten zum SCM-Repository für das neu erstellte Container-Image ab.
  2. Führt eine Übersicht über die Rohdaten aus und wertet das SCM-Repository anhand der benutzerdefinierten Richtlinie aus.
    1. Wenn alle Richtlinien erfüllt sind, erstellt der Scorecard-Attestierer die Attestierung.
    2. Wenn eine der Richtlinien nicht erfüllt ist, erstellt der Scorecard-Attestierer keine Attestierung.

Bei der Bereitstellung prüft die Binärautorisierung auf eine überprüfbare Attestierung. Ohne eines kann der Erzwinger das Image nicht bereitstellen.

Kosten

Hinweis: In dieser Anleitung werden die folgenden Google Cloud-Produkte verwendet.

  • Container Registry
  • Container Analysis
  • Cloud Build
  • Cloud Key Management Service

Mithilfe des Preisrechners können Sie anhand Ihrer voraussichtlichen Nutzung eine Kostenschätzung vornehmen.

Lernziele

In dieser Anleitung tun Sie Folgendes:

  1. Richten Sie den Scorecard Attestor als benutzerdefinierten Cloud Build-Builder ein.
  2. Richtlinie für den Attestierer von Kurzübersichten aufrufen und konfigurieren.
  3. Führen Sie den Scorecard-Attestierer in einem Beispiel-Repository aus, um eine Attestierung basierend auf einer Richtlinie zu erstellen.
  4. Führen Sie den Scorecard-Attestierer in einem Beispiel-Repository im Modus „Nur überprüfen“ aus, ohne eine Attestierung zu erstellen. ## Vorbereitung

In diesem Abschnitt führen Sie eine einmalige Einrichtung des Systems durch.

Umgebung einrichten

  1. Speichern Sie Ihr Google Cloud-Projekt in einer Umgebungsvariable.

    export PROJECT_ID=PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch Ihr Google Cloud-Projekt.

  2. Legen Sie als Standardprojekt-ID Ihr Google Cloud-Projekt fest:

    gcloud config set project $PROJECT_ID
    
  3. Speichern Sie die Projektnummer für zukünftige Schritte in einer Umgebungsvariable:

    export PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" \
     --format="value(PROJECT_NUMBER)")
    
  4. APIs aktivieren:

    Führen Sie den folgenden Befehl aus, um sicherzustellen, dass die für diese Anleitung erforderlichen Dienste aktiviert sind:

    gcloud services enable \
      cloudbuild.googleapis.com \
      containerregistry.googleapis.com \
      containerscanning.googleapis.com \
      cloudkms.googleapis.com
    

IAM-Rollen einrichten

Führen Sie die folgenden Befehle aus, um das Cloud Build-Dienstkonto mit den folgenden Rollen zu konfigurieren:

  • containeranalysis.notes.editor: fügt die Rolle Bearbeiter von Container Analysis-Hinweisen hinzu, um den Attestierer zu verwalten
  • containeranalysis.notes.occurrences.viewer: fügt die Rolle Container Analysis-Vorkommen für Hinweise hinzu, um sowohl Sicherheitslücken als auch Attestierungen zu verwalten
  • roles/containeranalysis.occurrences.editor: fügt die Rolle Bearbeiter von Container Analysis-Vorkommen hinzu, um Attestierungen in Container Analysis zu erstellen
  • cloudkms.signer: fügt die Rolle Cloud KMS CryptoKey-Signer hinzu, mit der das Dienstkonto auf den Cloud KMS-Signaturdienst zugreifen kann.

    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.editor
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.occurrences.viewer
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.occurrences.editor
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/cloudkms.signer
    

Cloud KMS-Signaturschlüssel erstellen

Schlüssel des Cloud Key Management Service werden zum Erstellen der Attestierung verwendet.

  1. Erstellen Sie einen neuen Cloud KMS-Schlüsselbund mit dem Namen scorecard-attestor-key-ring:

    gcloud kms keyrings create scorecard-attestor-key-ring \
        --location global
    
  2. Erstellen Sie im Schlüsselbund einen neuen Cloud KMS-Schlüssel mit dem Namen scorecard-attestor-key:

    gcloud kms keys create scorecard-attestor-key \
        --keyring scorecard-attestor-key-ring \
        --location global \
        --purpose "asymmetric-signing" \
        --default-algorithm "rsa-sign-pkcs1-2048-sha256"
    
  3. Speichern Sie den Digest-Algorithmus und Cloud KMS für eine weitere Vorgehensweise in einer Umgebungsvariable:

    export KMS_DIGEST_ALG=SHA256
    export KMS_KEY_NAME=projects/$PROJECT_ID/locations/global/keyRings/scorecard-attestor-key-ring/cryptoKeys/scorecard-attestor-key/cryptoKeyVersions/1
    
  4. Attestierer für Binärautorisierungen erstellen. Später erstellt der Scorecard-Attestierer einen Hinweis, der diesem Attestierer zugeordnet ist.

    gcloud container binauthz attestors create scorecard-attestor \
        --attestation-authority-note=scorecard-attestation \
        --attestation-authority-note-project=$PROJECT_ID \
        --description="Attest that ossf/scorecard policy checks pass"
    
  5. Verknüpfen Sie den Attestierer der Binärautorisierung mit dem KMS-Schlüssel:

    gcloud container binauthz attestors public-keys add \
        --attestor=scorecard-attestor \
        --keyversion=1 \
        --keyversion-key=scorecard-attestor-key \
        --keyversion-keyring=scorecard-attestor-key-ring \
        --keyversion-location=global \
        --keyversion-project=$PROJECT_ID
    

Weitere Informationen zu anderen Signaturalgorithmen finden Sie unter Asymmetrische Schlüssel erstellen.

Attestierungen mit dem Scorecard-Attestierer in einer Cloud Build-Pipeline erstellen

Beispiel-Build für den Fehlerfall senden

In diesem Abschnitt erstellen Sie ein Container-Image und prüfen die Sicherheitspraktiken der Lieferkette mit OpenSSF Scorecard. Das Image wird erstellt, aber keine Attestierung erstellt. Das Basis-Repository enthält einige nicht empfohlene Sicherheitsmaßnahmen für die Lieferkette, z. B. eine losgelöste Abhängigkeit von Debian 10 im Dockerfile und ein kompiliertes binäres Artefakt, das im Quell-Repository eingecheckt wurde. Dies sind Verstöße gegen die Bestätigungsrichtlinie im Repository.

  1. Klonen Sie das Test-Repository: scorecard-binauthz-test-bad.

  2. Sehen Sie sich die Datei mit der Attestierungsrichtlinie für den Fehlerfall an.

    cat policy-binauthz.yaml
    
  3. (Optional) Rufen Sie die Build-Konfigurationsdatei für den Fehlerfall auf.

    cat samples/signer/cloudbuild.yaml
    
  4. Reichen Sie den Build ein:

    gcloud builds submit \
        --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \
        --config=cloudbuild.yaml
    

Die Ausgabe sollte etwa so aussehen:

time="2022-12-20T22:30:14Z" level=info msg="image failed scorecard attestation policy check"
  1. Speichern Sie die Build-ID aus dem letzten Build:

    export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
    
  2. Ergebnis prüfen:

    gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "failed scorecard attestation policy check"
    

Beispiel-Build für den Erfolgsfall senden

In diesem Abschnitt erstellen Sie ein Container-Image, das die Richtlinie für die Kurzübersicht zur Attestierung erfüllt. In diesem Fall erstellt der Scorecard-Attestierer eine Attestierung.

So senden Sie den Beispiel-Build für den Erfolgsfall an Cloud Build:

  1. Klonen Sie das Test-Repository: scorecard-binauthz-test-good.

  2. Sehen Sie sich die Datei mit der Attestierungsrichtlinie für den Fehlerfall an. sh cat policy-binauthz.yaml

  3. (Optional) Rufen Sie die Build-Konfigurationsdatei für den Fehlerfall auf.

    cat samples/signer/cloudbuild.yaml
    
  4. Reichen Sie den Build ein:

    gcloud builds submit \
        --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \
        --config=cloudbuild.yaml
    
  5. Ergebnis prüfen:

    gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
    
  6. URL des Container-Images abrufen, das in der Kurzübersicht erstellt und geprüft wurde

    export IMAGE_URI=$(gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep -o "Attestation for image .* is successfully uploaded" txt | cut -d' ' -f4 | tr -d '"')
    
  7. Prüfen Sie, ob eine Attestierung für das Container-Image erstellt wurde. Der Scorecard-Attestierer verwendet die Hinweis-ID ossf-scorecard-attestation und den Hinweisnamen projects/${PROJECT_ID}/notes/ossf-scorecard-attestation.

    gcloud container binauthz attestations list \
        --attestor="projects/${PROJECT_ID}/attestors/ossf-scorecard-attestor" \
        --filter="resourceUri='https://${IMAGE_URI}'"
    

Bereinigen

Um die in diesem Dokument verwendeten Ressourcen zu bereinigen, können Sie das Projekt löschen:

gcloud projects delete $PROJECT_ID

Nächste Schritte