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:
build
: Erstellen Sie ein Beispiel-Container-Image.push
: Image in Container Registry hochladenattest
: 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:
- Ruft Daten zum SCM-Repository für das neu erstellte Container-Image ab.
- Führt eine Übersicht über die Rohdaten aus und wertet das SCM-Repository anhand der benutzerdefinierten Richtlinie aus.
- Wenn alle Richtlinien erfüllt sind, erstellt der Scorecard-Attestierer die Attestierung.
- 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:
- Richten Sie den Scorecard Attestor als benutzerdefinierten Cloud Build-Builder ein.
- Richtlinie für den Attestierer von Kurzübersichten aufrufen und konfigurieren.
- Führen Sie den Scorecard-Attestierer in einem Beispiel-Repository aus, um eine Attestierung basierend auf einer Richtlinie zu erstellen.
- 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
Speichern Sie Ihr Google Cloud-Projekt in einer Umgebungsvariable.
export PROJECT_ID=PROJECT_ID
Ersetzen Sie PROJECT_ID durch Ihr Google Cloud-Projekt.
Legen Sie als Standardprojekt-ID Ihr Google Cloud-Projekt fest:
gcloud config set project $PROJECT_ID
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)")
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 verwaltencontaineranalysis.notes.occurrences.viewer
: fügt die Rolle Container Analysis-Vorkommen für Hinweise hinzu, um sowohl Sicherheitslücken als auch Attestierungen zu verwaltenroles/containeranalysis.occurrences.editor
: fügt die Rolle Bearbeiter von Container Analysis-Vorkommen hinzu, um Attestierungen in Container Analysis zu erstellencloudkms.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.
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
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"
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
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"
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.
Klonen Sie das Test-Repository: scorecard-binauthz-test-bad.
Sehen Sie sich die Datei mit der Attestierungsrichtlinie für den Fehlerfall an.
cat policy-binauthz.yaml
(Optional) Rufen Sie die Build-Konfigurationsdatei für den Fehlerfall auf.
cat samples/signer/cloudbuild.yaml
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"
Speichern Sie die Build-ID aus dem letzten Build:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
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:
Klonen Sie das Test-Repository: scorecard-binauthz-test-good.
Sehen Sie sich die Datei mit der Attestierungsrichtlinie für den Fehlerfall an.
sh cat policy-binauthz.yaml
(Optional) Rufen Sie die Build-Konfigurationsdatei für den Fehlerfall auf.
cat samples/signer/cloudbuild.yaml
Reichen Sie den Build ein:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Ergebnis prüfen:
gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
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 '"')
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 Hinweisnamenprojects/${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
- Dokumentation zum Scorecard-Attestierer ansehen
- Weitere Informationen zur Übersicht
- Weitere Informationen zur Binärautorisierung
- Erstellen Sie Attestierer über die Google Cloud Console oder das Befehlszeilentool.