In dieser Anleitung wird gezeigt, wie Sie mit OpenSSF-Scorecard 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 geprüft werden kann. Mit diesem Bestätigungsschritt wird verhindert, dass manipulierte Containerartefakte für die Produktion bereitgestellt werden. Dadurch können mehrere Klassen von Sicherheitslücken in der Lieferkette verhindert werden.
Übersicht
Die Open Source Security Foundation (OpenSSF) ist eine Organisation, die Tools, Dienste und Infrastruktur für Open-Source-Sicherheitsinitiativen bereitstellt. Scorecard ist ein von OpenSSF verwaltetes Tool, das SCM-Repositories (Quellcodeverwaltung) auf Best Practices für die Sicherheit von Lieferketten prüft.
Der Scorecard-Attestierer ist ein in Scorecard eingebundenes Tool, mit dem Sie Attestierungen für Binärautorisierung auf der Grundlage einer von Ihnen konfigurierten Richtlinie erstellen können. Der Scorecard-Attestierer führt Scorecard für das SCM-Repository eines Container-Images aus, generiert Ergebnisse, bewertet die Ergebnisse anhand der Richtlinie und generiert eine Attestierung, wenn die Richtlinie erfüllt ist.
In dieser Anleitung erstellen Sie ein Beispiel-Repository und verwenden dann Scorecard-Attestierer. Jede Beispielpipeline enthält die folgenden Build-Schritte:
build
: Beispiel-Container-Image erstellenpush
: Image in Container Registry hochladenattest
: Prüfen und signieren Sie das Image mit dem Scorecard-Attestierer, um eine Attestierung basierend auf der Richtlinie zu erstellen.
Im Schritt attest
jeder Pipeline führt der Scorecard-Attestierer folgende Schritte aus:
- Hier werden Daten zum SCM-Repository für das neu erstellte Container-Image abgerufen.
- Führt Scorecard für die Rohdaten aus und bewertet das SCM-Repository anhand der vom Nutzer angegebenen Richtlinie.
- Wenn alle Richtlinien erfüllt sind, erstellt der Scorecard-Attestierer die Attestierung.
- Wenn eine der Richtlinien nicht erfüllt ist, erstellt der Scorecard-Attestierer die Attestierung nicht.
Bei der Bereitstellung prüft die Binärautorisierung nach einer überprüfbaren Attestierung. Ohne eines kann der Erzwinger das Image nicht bereitstellen.
Kosten
Hinweis: In dieser Anleitung werden die folgenden Google Cloud-Produkte verwendet.
- Container Registry
- Artefaktanalyse
- Cloud Build
- Cloud Key Management Service
Mithilfe des Preisrechners können Sie anhand Ihrer voraussichtlichen Nutzung eine Kostenschätzung vornehmen.
Ziele
In dieser Anleitung tun Sie Folgendes:
- Richten Sie den Scorecard-Attestierer als benutzerdefinierten Cloud Build-Builder ein.
- Sehen Sie sich die Scorecard-Attestierer-Richtlinie an und konfigurieren Sie sie.
- Führen Sie Scorecard-Attestierer in einem Beispiel-Repository aus, um eine Attestierung anhand einer Richtlinie zu erstellen.
- Führen Sie den Scorecard-Attestierer für ein Beispiel-Repository im Nur-Prüfmodus aus, ohne eine Attestierung zu erstellen. ## Hinweise
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 Artefaktanalyse-Hinweisen hinzu, um den Attestierer zu verwaltencontaineranalysis.notes.occurrences.viewer
: fügt die Rolle Artefaktanalyse-Vorkommen für Hinweise hinzu, um sowohl Sicherheitslücken als auch Attestierungen zu verwaltenroles/containeranalysis.occurrences.editor
: Fügt die Rolle Bearbeiter von Artefaktanalysen hinzu, um Attestierungen in Artifact 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.
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
Erstellen Sie den Binärautorisierungs-Attestierer. Später erstellt der Scorecard-Attestierer einen Hinweis, der mit diesem Attestierer verknüpft 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
Informationen zu anderen Signaturalgorithmen finden Sie unter Asymmetrische Schlüssel erstellen.
Attestierungen mit 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 erfolgreich erstellt, aber keine Attestierung erstellt. Das Basis-Repository enthält einige nicht empfohlene Sicherheitspraktiken für die Lieferkette, z. B. eine losgelöste Abhängigkeit zu Debian 10 im Dockerfile und ein kompiliertes Binärartefakt, das in das Quell-Repository eingecheckt wird. Dies sind Verstöße gegen die Attestierungsrichtlinie im Repository.
Klonen Sie das Test-Repository: scorecard-binauthz-test-bad.
Rufen Sie die Attestierungsrichtliniendatei für den Fehlerfall auf.
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:
gcloud storage 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 Scorecard-Attestierungsrichtlinie 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 Attestierungsrichtliniendatei 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:
gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
URL des Container-Images abrufen, das von der Kurzübersicht erstellt und geprüft wurde
export IMAGE_URI=$(gcloud storage 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 Notiz-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 zu Scorecard-Attestierer ansehen
- Weitere Informationen zur Kurzübersicht
- Weitere Informationen zur Binärautorisierung
- Erstellen Sie Attestierer über die Google Cloud Console oder das Befehlszeilentool.