Auf dieser Seite finden Sie eine Anleitung dazu, wie Sie die Bereitstellung von Images in Cloud Run und Google Kubernetes Engine mit Cloud Build schützen können.
Informationen zum Konfigurieren der Binärautorisierung, um nach Build-Attestierungen zu suchen und Bereitstellungen von Images zu blockieren, die nicht von Cloud Build generiert wurden. So kann das Risiko verringert werden, dass nicht autorisierte Software bereitgestellt wird.
Hinweis
Aktivieren Sie die Cloud Build API, die Binärautorisierung API und die Artifact Registry API, falls sie noch nicht aktiviert sind.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von RollenWenn 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 Attestierungen erforderlich sind.
Cloud Build generiert und signiert die Attestierungen zur Build-Zeit. Mit der Binärautorisierung können Sie den Attestierer built-by-cloud-build verwenden, um die Attestierungen zu prüfen und nur von Cloud Build erstellte Images bereitzustellen.
Wenn Sie den Attestierer built-by-cloud-build in Ihrem Projekt erstellen möchten, führen Sie einen Build in diesem Projekt aus.
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-buildverfügbar ist. - Klicken Sie auf
built-by-cloud-build.
Alternativ können Sie Nach Attestierer-Ressourcen-ID hinzufügen auswählen. Geben Sie unter Attestierer-Ressourcen-ID Folgendes ein:
projects/PROJECT_ID/attestors/built-by-cloud-buildErsetzen Sie
PROJECT_IDdurch 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.yamlBearbeiten Sie die Richtliniendatei.
Bearbeiten Sie eine der folgenden Regeln:
defaultAdmissionRuleclusterAdmissionRulesistioServiceIdentityAdmissionRuleskubernetesServiceAccountAdmissionRules
Fügen Sie der Regel einen
requireAttestationsBy-Block hinzu, sofern noch keiner vorhanden ist.Fügen Sie im Block
requireAttestationsByFolgendes hinzu:projects/PROJECT_ID/attestors/built-by-cloud-buildErsetzen Sie
PROJECT_IDdurch das Projekt, in dem Sie Cloud Build ausführen.Speichern Sie die Richtliniendatei.
Importieren Sie die Richtliniendatei.
gcloud container binauthz policy import /tmp/policy.yamlDas folgende Beispiel zeigt eine Richtliniendatei, die den Verweis auf
built-by-cloud-build-attestorenthält:defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policyErsetzen Sie
PROJECT_IDdurch 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.yamlLegen Sie in einem Texteditor
enforcementModeaufDRYRUN_AUDIT_LOG_ONLYfest 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 Richtlinienfehler in den Nachrichten der Binärautorisierung für GKE oder Cloud Run aufrufen.
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 und verweisen Sie beim Hinzufügen des
built-by-cloud-build-Attestierers in der Binärautorisierung auf das Cloud Build-Projekt.Cloud Build generiert keine Attestierungen, wenn Sie Images mit einem expliziten
docker push-Build-Schritt in Artifact Registry übertragen. Achten Sie darauf, dass Sie mit dem Feldimagesin Ihremdocker build-Build-Schritt per Push in Artifact Registry übertragen. Weitere Informationen zuimagesfinden Sie unter Verschiedene Möglichkeiten zum Speichern von Bildern in der Artifact Registry.Sie müssen separate Build-Konfigurationsdateien für Ihre Build-Pipeline und Ihre Bereitstellungs-Pipeline verwenden. Das liegt daran, dass Cloud Build Attestierungen erst nach erfolgreichem Abschluss der Build-Pipeline erstellt. Die Binärautorisierung prüft dann die Attestierung, bevor das Image bereitgestellt wird.
Attestierungen in privaten Pools aktivieren
Standardmäßig werden in Cloud Build keine Attestierungen der Binärautorisierung für Builds in privaten Pools generiert. Wenn Sie Attestierungen generieren möchten, fügen Sie Ihrer Build-Konfigurationsdatei die Option requestedVerifyOption: VERIFIED hinzu:
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 Attestgenerierung und Herkunftsmetadaten für Ihr Image.
Attestierermetadaten ansehen
Ein Attestierer wird erstellt, wenn Sie zum ersten Mal einen Build in einem Projekt ausführen. Die Attestor-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"
Nächste Schritte
- Informationen zur Binärautorisierung.