Der Cloud Key Management Service ist ein Google Cloud-Dienst, mit dem Sie kryptografische Schlüssel verwalten und verwenden können. Auf dieser Seite wird erläutert, wie Sie verschlüsselte Informationen aus Cloud KMS in Cloud Build verwenden.
Hinweise
-
Cloud Build and Cloud KMS APIs aktivieren.
Wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten, installieren und konfigurieren Sie die Google Cloud CLI.
Verschlüsseln Sie die vertraulichen Informationen mit Cloud KMS. Cloud KMS speichert Ihre verschlüsselten Inhalte in einer Datei.
[OPTIONAL] Um Builds für die Verwendung verschlüsselter Daten zu konfigurieren, konvertieren Sie das ENCRYPTED_FILE in base64: (Dieser Schritt ist für Build-Konfigurationen, die verschlüsselte Dateien verwenden, nicht erforderlich.)
base64 ENCRYPTED_FILE
Erforderliche IAM-Berechtigungen
Weisen Sie dem Cloud Build-Dienstkonto die IAM-Rolle Cloud KMS CryptoKey-Entschlüsseler (roles/cloudkms.cryptoKeyDecrypter
) zu:
Rufen Sie in der Google 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.
Builds für die Verwendung verschlüsselter Daten konfigurieren
Erstellen Sie im Stammverzeichnis des Projekts eine Cloud Build-Konfigurationsdatei mit dem Namen
cloudbuild.yaml
odercloudbuild.json
.In Ihrer Build-Konfigurationsdatei:
- Fügen Sie nach Abschluss des Builds
steps
einavailableSecrets
-Feld hinzu, um den verschlüsselten Wert als Umgebungsvariable und den zur Entschlüsselung zu verwendendenkmsKeyName
anzugeben. Sie können Substitutionsvariablen im Wert vonkmsKeyName
verwenden. - Geben Sie im Build-Schritt, in dem Sie das Secret angeben möchten, Folgendes an:
- Fügen Sie das Feld
entrypoint
hinzu, das aufbash
verweist, um das Bash-Tool im Build-Schritt zu verwenden. Dies ist erforderlich, um auf die Umgebungsvariable für das Secret zu verweisen. - Fügen Sie das Feld
secretEnv
hinzu, das die Umgebungsvariable für den verschlüsselten Wert angibt. - Fügen Sie im Feld
args
das Flag-c
als erstes Argument hinzu. Jeder String, den Sie nach -c übergeben, wird als Befehl behandelt. Weitere Informationen zum Ausführen von Bash-Befehlen mit -c finden Sie in der Bash-Dokumentation. - Wenn Sie den verschlüsselten Wert im Feld
args
angeben, geben Sie ihn mit der Umgebungsvariable$$
an.
- Fügen Sie das Feld
Die folgende Build-Konfigurationsdatei zeigt, wie Sie sich bei Docker anmelden und ein privates Image abrufen:
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker pull $$USERNAME/IMAGE:TAG'] secretEnv: ['USERNAME'] availableSecrets: inline: - kmsKeyName: projects/PROJECT_ID/locations/global/keyRings/USERNAME_KEYRING_NAME/cryptoKeys/USERNAME_KEY_NAME envMap: USERNAME: 'ENCRYPTED_USERNAME' - kmsKeyName: projects/PROJECT_ID/locations/global/keyRings/PASSWORD_KEYRING_NAME/cryptoKeys/PASSWORD_KEY_NAME envMap: PASSWORD: 'ENCRYPTED_PASSWORD'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker pull $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "inline": [{ "kmsKeyName": "projects/PROJECT_ID/locations/global/keyRings/USERNAME_KEYRING_NAME/cryptoKeys/USERNAME_KEY_NAME", "envMap": { "USERNAME": "ENCRYPTED_USERNAME" } }, { "kmsKeyName": "projects/PROJECT_ID/locations/global/keyRings/PASSWORD_KEYRING_NAME/cryptoKeys/PASSWORD_KEY_NAME", "envMap": { "PASSWORD": "ENCRYPTED_PASSWORD" } }] } }
Ersetzen Sie die Platzhalterwerte in den obigen Befehlen durch Folgendes:
PROJECT_ID
: Die ID des Google Cloud-Projekts, das Ihren Cloud KMS-Dienst enthält.USERNAME_KEYRING_NAME
ist der Schlüsselbundname Ihres Docker-Nutzernamens.USERNAME_KEY_NAME
ist der Schlüsselname Ihres Docker-Nutzernamens.ENCRYPTED_USERNAME
ist Ihr verschlüsselter Docker-Nutzername im base64-Format.PASSWORD_KEYRING_NAME
ist der Schlüsselbundname Ihres Docker-Passworts.PASSWORD_KEY_NAME
ist der Schlüsselname Ihres Docker-Passworts.ENCRYPTED_PASSWORD
ist Ihr verschlüsseltes Docker-Passwort im base64-Format.REPOSITORY
: Der Name des Docker-Repositories, aus dem Sie das Image abrufen.TAG
: Der Tag-Name Ihres Images.
- Fügen Sie nach Abschluss des Builds
Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.
Builds für die Verwendung verschlüsselter Dateien konfigurieren
Erstellen Sie im Stammverzeichnis des Projekts eine Cloud Build-Konfigurationsdatei mit dem Namen
cloudbuild.yaml
odercloudbuild.json
.Fügen Sie Ihrer Build-Konfigurationsdatei vor allen Build-Schritten, die mit der entschlüsselten Datei interagieren, einen
gcloud
-Build-Schritt hinzu, um die verschlüsselte Datei mit dem Verschlüsselungsschlüssel zu entschlüsseln. Das folgende Beispiel einer Build-Konfigurationsdatei zeigt, wie Sie sich mit der verschlüsselten Datei mit Docker-Passwort in Docker anmelden:YAML
steps: - name: gcr.io/cloud-builders/gcloud args: - kms - decrypt - "--ciphertext-file=ENCRYPTED_PASSWORD_FILE" - "--plaintext-file=PLAINTEXT_PASSWORD_FILE" - "--location=global" - "--keyring=KEYRING_NAME" - "--key=KEY_NAME" - name: gcr.io/cloud-builders/docker entrypoint: bash args: - "-c" - docker login --username=DOCKER_USERNAME --password-stdin < PLAINTEXT_PASSWORD_FILE
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gcloud", "args": [ "kms", "decrypt", "--ciphertext-file=ENCRYPTED_PASSWORD_FILE", "--plaintext-file=PLAINTEXT_PASSWORD_FILE", "--location=global", "--keyring=KEYRING_NAME", "--key=KEY_NAME" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=DOCKER_USERNAME --password-stdin < PLAINTEXT_PASSWORD_FILE" ] } ] }
Ersetzen Sie die Platzhalterwerte in den obigen Befehlen durch Folgendes:
KEYRING_NAME
ist der Schlüsselbundname Ihres Docker-Passworts.KEY_NAME
ist der Schlüsselname Ihres Docker-Passworts.ENCRYPTED_PASSWORD_FILE
ist die verschlüsselte Datei mit Ihrem Docker-Passwort.PLAINTEXT_PASSWORD_FILE
ist die Nur-Text-Datei mit Ihrem Docker-Passwort.
Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.
Builds für die Verwendung verschlüsselter Daten konfigurieren (Legacy)
So verschlüsseln Sie vertrauliche Daten mit Cloud KMS und verwenden diese Daten in einer Build-Konfigurationsdatei:
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" } } ] }
Nächste Schritte
- Builds für den Zugriff auf Secrets von Secret Manager konfigurieren
- Weitere Informationen finden Sie unter Auf private GitHub-Repositories zugreifen.