Auf dieser Seite finden Sie eine Anleitung dazu, wie Sie mit Cloud Build Image-Deployments in Cloud Run und Google Kubernetes Engine sichern können.
Mehr zum Konfigurieren der Binärautorisierung zur Prüfung auf Build-Attestierungen und zum Blockieren von Deployments von Images, die nicht von Cloud Build generiert wurden So verringern Sie das Risiko der Bereitstellung nicht autorisierter Software.
Hinweise
Cloud Build, Binary Authorization, and Artifact Registry APIs aktivieren.
Wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten, installieren und konfigurieren Sie das Google Cloud SDK.
Bereitstellungen mit Binärautorisierung steuern
Eine Richtlinie im Rahmen der Binärautorisierung ist eine Reihe von Regeln für das Deployment von Images. Sie können eine Regel so konfigurieren, dass digital signierte attestations erforderlich sind.
Cloud Build generiert und signiert die Attestierungen zur Build-Zeit. Mit der Binärautorisierung können Sie mit dem Attestierer built-by-cloud-build
die Attestierungen prüfen und nur von Cloud Build erstellte Images bereitstellen.
Führen Sie in diesem Projekt einen Build aus, um den Attestierer built-by-cloud-build
in Ihrem Projekt zu erstellen.
Führen Sie die folgenden Schritte aus, um die Bereitstellung von Images zu erlauben, die von Cloud Build erstellt wurden:
Console
Rufen Sie in der Google Cloud Console die Seite Binärautorisierung auf.
Im Tab Richtlinie klicken Sie auf Richtlinie bearbeiten.
Wählen Sie im Dialogfeld Richtlinie bearbeiten die Option Nur Images zulassen, die von allen folgenden Attestierern genehmigt wurden aus.
Klicken Sie auf Attestierer hinzufügen.
Führen Sie im Dialogfeld Attestierer hinzufügen die folgenden Schritte aus:
- Wählen Sie Nach Projekt und Attestierername hinzufügen aus und führen Sie die folgenden Schritte aus:
- Geben Sie im Feld Projektname das Projekt ein, in dem Sie Cloud Build ausführen.
- Klicken Sie auf das Feld Name des Attestierers und prüfen Sie, ob der Attestierer
built-by-cloud-build
verfügbar ist. - Klicken Sie auf
built-by-cloud-build
.
Alternativ können Sie Nach Attestierer-Ressourcen-ID hinzufügen auswählen. Geben Sie unter Attestor-Ressourcen-ID Folgendes ein:
projects/PROJECT_ID/attestors/built-by-cloud-build
Ersetzen Sie
PROJECT_ID
durch das Projekt, in dem Sie Cloud Build ausführen.
- Wählen Sie Nach Projekt und Attestierername hinzufügen aus und führen Sie die folgenden Schritte aus:
Klicken Sie auf 1 Attestierer hinzufügen.
Klicken Sie auf Save Policy (Richtlinie speichern).
gcloud
Exportieren Sie Ihre vorhandene Richtlinie mit dem folgenden Befehl in eine Datei:
gcloud container binauthz policy export > /tmp/policy.yaml
Bearbeiten Sie die Richtliniendatei.
Bearbeiten Sie eine der folgenden Regeln:
defaultAdmissionRule
clusterAdmissionRules
istioServiceIdentityAdmissionRules
kubernetesServiceAccountAdmissionRules
Fügen Sie der Regel einen
requireAttestationsBy
-Block hinzu, sofern noch keiner vorhanden ist.Fügen Sie im
requireAttestationsBy
-Blockprojects/PROJECT_ID/attestors/built-by-cloud-build
Ersetzen Sie
PROJECT_ID
durch das Projekt, in dem Sie Cloud Build ausführen.Speichern Sie die Richtliniendatei.
Importieren Sie die Richtliniendatei.
gcloud container binauthz policy import /tmp/policy.yaml
Das folgende Beispiel zeigt eine Richtliniendatei, die den Verweis auf
built-by-cloud-build-attestor
enthält:defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policy
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID, in der Sie Cloud Build ausführen.
Sie können Richtlinienfehler in den Nachrichten der Binärautorisierung für GKE oder Cloud Run aufrufen.
Probelaufmodus verwenden
Im Probelaufmodus prüft die Binärautorisierung die Richtliniencompliance, ohne die Bereitstellung tatsächlich zu blockieren. Stattdessen werden Statusmeldungen zur Einhaltung von Richtlinien in Cloud Logging protokolliert. Anhand dieser Logs können Sie feststellen, ob Ihre Blockierrichtlinie korrekt funktioniert, und falsch positive Ergebnisse identifizieren.
So aktivieren Sie den Probelauf:
Console
Rufen Sie in der Google Cloud Console die Seite "Binärautorisierung" auf.
Klicken Sie auf Richtlinie bearbeiten.
Wählen Sie in der Standardregel oder eine bestimmte Regel den Probelaufmodus aus.
Klicken Sie auf Save Policy (Richtlinie speichern).
gcloud
Exportieren Sie die Richtlinie für die Binärautorisierung in eine YAML-Datei:
gcloud container binauthz policy export > /tmp/policy.yaml
Legen Sie in einem Texteditor
enforcementMode
aufDRYRUN_AUDIT_LOG_ONLY
fest und speichern Sie die Datei.Importieren Sie zum Aktualisieren der Richtlinie die Datei mit dem folgenden Befehl:
gcloud container binauthz policy import /tmp/policy.yaml
Sie können sich Richtlinienfehler in den Lognachrichten der Binärautorisierung für GKE oder Cloud Run ansehen.
Beschränkungen
Cloud Build und die Binärautorisierung müssen sich im selben Projekt befinden. Wenn Sie Ihre Bereitstellungsplattform in einem anderen Projekt ausführen, konfigurieren Sie IAM-Rollen für eine Einrichtung mit mehreren Projekten. Verweisen Sie auf das Cloud Build-Projekt, wenn Sie den Attestierer
built-by-cloud-build
zur Binärautorisierung hinzufügen.Cloud Build generiert keine Attestierungen, wenn Sie Images mit einem expliziten
docker push
-Build-Schritt an Artifact Registry übertragen. Übertragen Sie die Daten über das Feldimages
imdocker build
-Build-Schritt an Artifact Registry. Weitere Informationen zuimages
finden Sie unter Verschiedene Möglichkeiten zum Speichern von Images in Artifact Registry.Sie müssen separate Build-Konfigurationsdateien für Ihre Build-Pipeline und Ihre Bereitstellungspipeline verwenden. Das liegt daran, dass Cloud Build erst dann Attestierungen erstellt, nachdem die Build-Pipeline erfolgreich abgeschlossen wurde. Die Binärautorisierung prüft dann die Attestierung, bevor das Image bereitgestellt wird.
Attestierungen in privaten Pools aktivieren
Standardmäßig generiert Cloud Build keine Attestierungen für die Binärautorisierung für Builds in privaten Pools. Fügen Sie der Build-Konfigurationsdatei die Option requestedVerifyOption: VERIFIED
hinzu, um Attestierungen zu generieren:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
requestedVerifyOption: VERIFIED
Nachdem Sie die requestedVerifyOption
hinzugefügt haben, aktiviert Cloud Build die Attestierungsgenerierung und Herkunftsmetadaten für das Image.
Attestierermetadaten ansehen
Ein Attestierer wird erstellt, wenn Sie zum ersten Mal einen Build in einem Projekt ausführen. Die Attestierer-ID hat das Format projects/PROJECT_ID/attestors/built-by-cloud-build
, wobei PROJECT_ID
Ihre Projekt-ID ist.
Sie können die Metadaten des Build-Attestierers mit dem folgenden Befehl prüfen:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build
Ersetzen Sie PROJECT_ID
durch das Projekt, in der Sie Cloud Build ausführen.
Die Ausgabe enthält Informationen zum Attestierer und zu den entsprechenden öffentlichen Schlüsseln. Beispiel:
name": "projects/PROJECT_ID/attestors/built-by-cloud-build", "userOwnedDrydockNote": { "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build", "publicKeys": [ { "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1", "pkixPublicKey": { "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n", "signatureAlgorithm": "ECDSA_P256_SHA256" } }, ... } ], "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com" }, "updateTime": "2021-09-24T15:26:44.808914Z", "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"