Auf dieser Seite wird erläutert, wie Sie vertrauliche Informationen wie Passwörter und API-Schlüssel in Cloud Build einbinden.
Bevor Sie vertrauliche Informationen in Ihre Builds aufnehmen, müssen Sie sie entweder im Secret Manager speichern oder mit dem Cloud Key Management Service verschlüsseln und nur die verschlüsselten Informationen in Cloud Build einschließen. Secret Manager wird für die Verwaltung vertraulicher Daten mit Cloud Build empfohlen. Für bestehende Projekte können Sie weiterhin Cloud KMS verwenden, für neue Projekte jedoch Secret Manager.
Hinweis
Installieren Sie das gcloud
-Befehlszeilentool, um die auf dieser Seite beschriebenen gcloud
-Befehle auszuführen.
- Wenn Sie das Cloud SDK bereits installiert haben, prüfen Sie, ob Sie die neueste verfügbare Version haben. Führen Sie dazu den Befehl
gcloud components update
aus.
Secret Manager verwenden
Secret Manager ist ein Google Cloud-Dienst, der API-Schlüssel, Passwörter und andere sensible Daten sicher speichert.
So speichern Sie Daten im Secret Manager und verwenden diese Daten in Cloud Build:
Aktivieren Sie die Secret Manager API:
Weisen Sie dem Cloud Build-Dienstkonto die IAM-Rolle
Secret Accessor
zu:Öffnen Sie in der Cloud Console die Seite "IAM".
Wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.
Suchen Sie in der Berechtigungstabelle nach der E-Mail mit der Endung
@cloudbuild.gserviceaccount.com
und klicken Sie auf das Stiftsymbol.Fügen Sie die Rolle
Secret Manager Secret Accessor
hinzu.Klicken Sie auf Speichern.
Daten in Secret Manager speichern:
Rufen Sie in der Cloud Console die Seite "Secret Manager" auf:
Klicken Sie auf der Seite Secret Manager auf Secret erstellen.
Geben Sie auf der Seite Secret erstellen unter Name den Wert
secret-name
ein.Geben Sie im Feld Secret-Wert Ihre Daten ein.
Lassen Sie den Abschnitt Regionen unverändert.
Klicken Sie auf Secret erstellen.
Eine Anleitung zur Verwendung von Secret Manager mit dem
gcloud
-Befehlszeilentool finden Sie in der Secret Manager-Kurzanleitung. Informationen zum Gewähren des Zugriffs auf ein bestimmtes Secret finden Sie unter Zugriff auf Secrets verwalten.Fügen Sie in Ihrer Build-Konfigurationsdatei einen Build-Schritt hinzu, um im Secret Manager auf die geheime Version zuzugreifen und sie in einer Datei zu speichern. Mit dem folgenden Build-Schritt wird auf secret-name zugegriffen und in der Datei decrypted-data.txt gespeichert:
YAML
steps: - name: gcr.io/cloud-builders/gcloud entrypoint: 'bash' args: [ '-c', "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ]
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "entrypoint": "bash", "args": [ "-c", "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ] } ] }
Verwenden Sie die Datei mit den entschlüsselten Daten in einem Build-Schritt. Das folgende Code-Snippet verwendet zur Anmeldung bei einer privaten Docker-Registry decrypted-data.txt:
YAML
steps: - name: gcr.io/cloud-builders/gcloud entrypoint: 'bash' args: [ '-c', "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > decrypted-data.txt" ] - name: gcr.io/cloud-builders/docker entrypoint: 'bash' args: [ '-c', 'docker login --username=my-user --password-stdin < decrypted-data.txt']
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "entrypoint": "bash", "args": [ "-c", "gcloud secrets versions access latest --secret=secret-name --format='get(payload.data)' | tr '_-' '/+' | base64 -d > password.txt" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=my-user --password-stdin < decrypted-data.txt" ] } ] }
- Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.
Cloud KMS verwenden
Cloud KMS ist ein Google Cloud-Dienst, mit dem Sie kryptografische Schlüssel verwalten und verwenden können.
So verschlüsseln Sie vertrauliche Daten mit Cloud KMS und verwenden diese Daten in einer Build-Konfigurationsdatei:
Aktivieren Sie die Cloud KMS API.
Weisen Sie dem Cloud Build-Dienstkonto die IAM-Rolle
Cloud KMS CryptoKey Decrypter
zu:Rufen Sie in der Cloud Console die Cloud Build-Seite "Einstellungen" auf:
Suchen Sie die Zeile mit der Rolle Cloud KMS CryptoKey-Entschlüsseler und setzen Sie ihren Status auf AKTIVIERT.
Öffnen Sie ein Terminalfenster.
Erstellen Sie eine neue Cloud KMS
key-ring
mit dem Namen keyring-name:gcloud kms keyrings create keyring-name --location global
Erstellen Sie ein neues Cloud KMS
key
key-name fürkey-ring
keyring-name:gcloud kms keys create key-name \ --location global --keyring keyring-name \ --purpose encryption
Konfigurieren Sie Cloud Build für die Verwendung verschlüsselter Daten:
So verwenden Sie verschlüsselte Variablen:
Verschlüsseln Sie secret-name mit key-name und keyring-name. Der verschlüsselte Wert ist ein base64-codierter String. Achten Sie darauf, in secret-name keine überflüssigen Zeichen wie Leerzeichen oder Zeilenumbrüche einzufügen. Das Flag
-n
weistecho
an, keinen abschließenden Zeilenumbruch einzufügen:echo -n secret-name | gcloud kms encrypt --plaintext-file=- \ --ciphertext-file=- --location=global --keyring=keyring-name \ --key=key-name | base64
Fügen Sie in Ihre Build-Konfigurationsdatei das Feld
secrets
ein, um den verschlüsselten Wert und dasCryptoKey
zum Entschlüsseln anzugeben. Fügen Sie dann im Build-Schritt, in dem Sie die verschlüsselte Variable verwenden möchten, das FeldsecretEnv
hinzu, um die Variable als Umgebungsvariable anzugeben. Fügen Sie den Namen der Variablen in das FeldsecretEnv
ein. Wenn Sie den Variablenwert oder eine nicht Secret-Umgebungsvariable mit demselben Namen angeben, gibt Cloud Build einen Fehler aus.YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=user-name --password=$$PASSWORD'] secretEnv: ['PASSWORD'] - name: 'gcr.io/cloud-builders/docker' args: ['push', 'user-name/myubuntu'] secrets: - kmsKeyName: projects/project-id/locations/global/keyRings/keyring-name/cryptoKeys/key-name secretEnv: PASSWORD: 'encrypted-password'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=user-name --password=$$PASSWORD" ], "secretEnv": [ "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "push", "user-name/myubuntu" ] } ], "secrets": [ { "kmsKeyName": "projects/project-id/locations/global/keyRings/keyring-name/cryptoKeys/key-name", "secretEnv": { "PASSWORD": "encrypted-password" } } ] }
So verwenden Sie verschlüsselte Dateien:
Verschlüsseln Sie die Datei secrets.json mit keyring-name und keyring-name. Dadurch wird eine verschlüsselte Datei mit dem Namen secrets.json.enc erstellt. secrets.jsonDarf nicht größer als 64 KiB sein.
gcloud kms encrypt --plaintext-file=secrets.json \ --ciphertext-file=secrets.json.enc \ --location=global --keyring=keyring-name\ --key=key-name
Fügen Sie in Ihrer Build-Konfigurationsdatei vor allen Build-Schritten, die mit der entschlüsselten Datei secrets.json interagieren, einen Build-Schritt hinzu, der
gcloud
Cloud Build zum Entschlüsseln von secrets.json.enc mithilfe des Verschlüsselungsschlüssels aufruft. Dieser Build-Schritt ähnelt den Befehlen zum Verschlüsseln der Datei.YAML
steps: - name: gcr.io/cloud-builders/gcloud args: - kms - decrypt - --ciphertext-file=secrets.json.enc - --plaintext-file=secrets.json - --location=global - --keyring=keyring-name - --key=key-name # more steps here
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "args": [ "kms", "decrypt", "--ciphertext-file=secrets.json.enc", "--plaintext-file=secrets.json", "--location=global", "--keyring=keyring-name", "--key=key-name" ] } ] }
Nachdem dieser Schritt abgeschlossen ist, können alle nachfolgenden Schritte die entschlüsselte Datei secrets.json verwenden. Sie haben beispielsweise die Möglichkeit, mit den in der Datei enthaltenen Secrets externe Abhängigkeiten abzurufen oder den von Ihnen erstellten Docker-Container-Images Secret-Token hinzuzufügen.
Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.
Nächste Schritte
- Mehr über zusätzliche authentifizierte Daten erfahren
- Mehr über die Cloud KMS-Objekthierarchie erfahren