In dieser Anleitung erfahren Sie, wie Sie eine Attestierung für die Binärautorisierung in einer Cloud Build-Pipeline erstellen. Durch diese Einrichtung wird sichergestellt, dass nur Container-Images, die im Rahmen des Build-Prozesses von Cloud Build erstellt und signiert wurden, automatisch zur Ausführung in Ihrer Deployment-Umgebung autorisiert werden.
Wie Sie Scans auf Sicherheitslücken in der Artefaktanalyse in Ihrer Cloud Build-Build-Pipeline durchführen, finden Sie weitere Informationen unter Attestierungen mit Voucher erstellen oder Attestierungen mit Kritis Signer erstellen.
Cloud Build – Übersicht
Cloud Build (Übersicht) verwendet in Cloud Source Repositories oder einem anderen gehosteten Repository gespeicherten Quellcode, führt Ihre Builds und Tests aus und speichert die resultierenden Softwareausgaben in Container Registry oder einem anderen Speicherdienst auf der Google Cloud Platform.
Überblick zur Binärautorisierung
Die Binärautorisierung (Übersicht) ist ein Google Cloud-Produkt, das Beschränkungen für Anwendungen beim Deployment erzwingt. Durch die Einbindung von Google Kubernetes Engine (GKE) können Nutzer erzwingen, dass Container, die in einem Kubernetes-Cluster bereitgestellt werden, von einer vertrauenswürdigen Instanz kryptografisch signiert und von einem Attestierer von Binärautorisierungen geprüft werden.
Sie können die Binärautorisierung so konfigurieren, dass auf dem Speicherort des Quellcodes basierende Attestierungen erforderlich sind, um zu verhindern, dass Container-Images aus nicht autorisierten Quellen bereitgestellt werden.
Weitere Informationen:
- Allgemeine Einführung in die Binärautorisierung
- Codelab: GKE-Deployments mit Binärautorisierung sichern
Architektur
Das folgende Diagramm zeigt die Komponenten in einer Einrichtung mit Binärautorisierung/Cloud Build:
In dieser Pipeline gilt:
Der Code zum Erstellen des Container-Images wird in ein Quell-Repository wie Cloud Source Repositories übertragen.
Das CI-Tool (Continuous Integration) Cloud Build erstellt und testet den Container.
Der Build überträgt das Container-Image per Push an Container Registry oder eine andere Registry, in der Ihre erstellten Images gespeichert sind.
Cloud Key Management Service, der die Schlüsselverwaltung für das kryptografische Schlüsselpaar bereitstellt, signiert das Container-Image. Die resultierende Signatur wird dann in einer neu erstellten Attestierung gespeichert.
Bei der Bereitstellung prüft der Attestierer die Attestierung mit dem öffentlichen Schlüssel aus dem Schlüsselpaar. Die Binärautorisierung erzwingt die Richtlinie. Dazu sind signierte Attestierungen zum Bereitstellen des Container-Images erforderlich.
Attestierung mit Cloud Build mit Cloud Key Management Service erstellen
In diesem Abschnitt erfahren Sie, wie Sie die obige Architektur implementieren. Sie verwendet einen benutzerdefinierten Open-Source-Build-Schritt aus der Cloud Build-Community. Der benutzerdefinierte Build-Schritt signiert ein Container-Image, erstellt die Attestierung und lädt sie in die Binärautorisierung hoch.
Identitäts- und Zugriffsverwaltung konfigurieren
Zur Verwendung dieses Build-Schritts benötigt das Cloud Build-Dienstkonto die folgenden IAM-Rollen:
- Betrachter der Attestierer von Binärautorisierungen
roles/binaryauthorization.attestorsViewer
- Cloud KMS CryptoKey-Signer/Prüffunktion (wenn Schlüssel in KMS zum Signieren der Attestierung verwendet werden)
roles/cloudkms.signerVerifier
- Hinzufüger von Artefaktanalyse-Hinweisen
roles/containeranalysis.notes.attacher
Mit den folgenden Befehlen können Sie diese Rollen dem Cloud Build-Dienstkonto Ihres Projekts hinzufügen:
Aktivieren Sie Cloud Build:
Aktivieren Sie die Cloud Build API im Google Cloud-Zielprojekt.
Speichern Sie Ihre Projekt-ID in einer Umgebungsvariablen:
PROJECT_ID=PROJECT_ID
Dabei ist PROJECT_ID Ihre Google Cloud-Projekt-ID.
Legen Sie die Google Cloud CLI für das Projekt fest:
gcloud config set project ${PROJECT_ID}
Rufen Sie die Projektnummer ab:
PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)")
Fügen Sie dem Cloud Build-Dienstkonto die Rolle "Betrachter der Attestierer von Binärautorisierungen" hinzu:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/binaryauthorization.attestorsViewer
Fügen Sie dem Cloud Build-Dienstkonto (KMS-basierte Signatur) die Rolle "Cloud KMS CryptoKey-Signer/Prüffunktion" hinzu:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/cloudkms.signerVerifier
Fügen Sie dem Cloud Build-Dienstkonto die Rolle "Hinzufüger von Artefaktanalyse-Hinweisen" hinzu:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/containeranalysis.notes.attacher
Benutzerdefinierten Build-Schritt in Cloud Build erstellen und registrieren
Klonen Sie das Repository der Google Cloud Build-Community:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
Konfigurieren Sie den Binärautorisierungs-Signer für Cloud Build:
Vor der Verwendung muss der Code für den benutzerdefinierten Build-Schritt in einen Container eingebunden und an Cloud Build übertragen werden. Führen Sie dazu die folgenden Befehle aus:
cd cloud-builders-community/binauthz-attestation gcloud builds submit . --config cloudbuild.yaml
Der benutzerdefinierte Build-Schritt wurde in die Google Container Registry Ihres aktuellen Projekts übertragen und kann nun verwendet werden.
Attestierer in der Binärautorisierung erstellen
Erstellen Sie einen Attestierer, den die Binärautorisierung zur Bestätigung der Attestierung beim Deployment verwendet.
Richten Sie in der Binärautorisierung ein Schlüsselpaar für Cloud Key Management Service und den Attestierer ein:
Siehe Attestierer mit der Befehlszeile erstellen.
Erstellung des Attestierers prüfen
gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
Fügen Sie Ihrem cloudbuild.yaml
einen Schritt zum Erstellen einer Attestierung ("create-attestation") hinzu.
Zur Verwendung des Schritts binauthz-attestation
müssen Sie cloudbuild.yaml
aktualisieren. Fügen Sie dazu den Schritt hinzu, über den der in Container Registry übertragene Build signiert wird.
Es gibt zwei Methoden:
Aktualisieren Sie die Datei
cloudbuild.yaml
manuell.Führen Sie eine Beispielpipeline mit den zuvor festgelegten Umgebungsvariablen aus.
Datei cloudbuild.yaml
manuell aktualisieren
Sie müssen die Datei
cloudbuild.yaml
manuell aktualisieren. Dazu fügen Sie den Build-Schritt unten nach dem Schritt zum Hochladen des Containers in Container Registry hinzu. Hinweis: Sie müssen ATTESTOR_NAME, KMS_KEY_LOCATION, KMS_KEYRING_NAME, KMS_KEY_NAME und KMS_KEY_VERSION manuell durch Ihre eigenen Werte ersetzen:- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'projects/${PROJECT_ID}/attestors/ATTESTOR_NAME' - '--keyversion' - 'projects/${PROJECT_ID}/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION'
Folgendes ist ebenfalls gültig:
- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'ATTESTOR_NAME' - '--attestor-project' - '${PROJECT_ID}' - '--keyversion' - 'KEY_VERSION' - '--keyversion-project' - '${PROJECT_ID}' - '--keyversion-location' - 'KEY_LOCATION' - '--keyversion-keyring' - 'KEYRING_NAME' - '--keyversion-key' - 'KEY_NAME'
Optional: Pipeline testen
Führen Sie die folgenden Schritte aus, um ein Beispiel für eine Cloud Build-Attestierungspipeline zu testen:
Erstellen Sie eine
cloudbuild.yaml
-Datei mit den zuvor festgelegten Umgebungsvariablen:cd example cat <<EOM > cloudbuild_example.yaml steps: - id: 'build' name: 'gcr.io/cloud-builders/docker' args: - 'build' - '-t' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '.' - id: 'publish' name: 'gcr.io/cloud-builders/docker' args: - 'push' - 'gcr.io/$PROJECT_ID/helloworld:latest' - id: 'create-attestation' name: 'gcr.io/$PROJECT_ID/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '--attestor' - 'projects/$PROJECT_ID/attestors/${ATTESTOR_NAME}' - '--keyversion' - 'projects/${PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}' tags: ['cloud-builders-community'] EOM
Führen Sie Cloud Build mit der Beispieldatei
cloudbuild_example.yaml
aus:Führen Sie im Verzeichnis
cloud-builders-community/binauthz-attestation/example
die folgenden Befehle aus:gcloud builds submit . --config cloudbuild_example.yaml
Nächste Schritte
- Erstellen Sie Attestierungen, nachdem Sie ein Image mit Kritis Signer oder Voucher auf Sicherheitslücken überprüft haben.
- Erstellen Sie einen benutzerdefinierten Cloud Build-Schritt, um Attestierungen der Binärautorisierung auf GitHub zu signieren und hochzuladen.