Auf dieser Seite wird erläutert, wie Sie vertrauliche Informationen wie Passwörter und API-Schlüssel in Cloud Build einbinden.
Secret Manager ist ein Google Cloud-Dienst, der API-Schlüssel, Passwörter und andere sensible Daten sicher speichert. Wenn Sie vertrauliche Informationen in Ihre Builds aufnehmen möchten, können Sie die Informationen in Secret Manager speichern und dann den Build für den Zugriff auf die Informationen aus Secret Manager konfigurieren.
Hinweis
-
Enable the Cloud Build and Secret Manager APIs.
Um die Befehlszeilenbeispiele in dieser Anleitung zu verwenden, installieren und Konfigurieren Sie die Google Cloud CLI.
Das Secret muss in Secret Manager gespeichert werden. Eine Anleitung finden Sie unter Secret erstellen.
- Notieren Sie sich den Namen des Secrets und die Secret-Version Ihres Secrets. Sie benötigen diese Informationen, um Cloud Build für den Zugriff auf das Secret zu konfigurieren.
Erforderliche IAM-Berechtigungen
Weisen Sie dem Dienstkonto, das Sie für den Build verwenden, die IAM-Rolle Zugriffsperson für Secret Manager-Secret (roles/secretmanager.secretAccessor
) für das Secret zu:
Öffnen Sie in der Google Cloud Console die Seite „Secret Manager“:
Klicken Sie auf das Kästchen des Secrets, das Sie in Ihrem Build verwenden möchten.
Falls das Fenster noch nicht geöffnet ist, klicken Sie auf Infofeld ansehen, um es zu öffnen.
Klicken Sie im Steuerfeld unter Berechtigungen auf Hauptkonto hinzufügen.
Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse Ihres Dienstkontos ein.
Wählen Sie im Drop-down-Menü Rolle auswählen die Option Auf Secret Manager-Secret zugreifende Person.
Klicken Sie auf Speichern.
Builds für den Zugriff auf UTF-8-Secrets aus Secret Manager konfigurieren
Erstellen Sie im Stammverzeichnis des Projekts eine Cloud Build-Konfigurationsdatei mit dem Namen
cloudbuild.yaml
odercloudbuild.json
.In der Build-Konfigurationsdatei:
- Fügen Sie nach allen Build-
steps
ein FeldavailableSecrets
hinzu, um die Secret-Version und die Umgebungsvariablen anzugeben, die für Ihr Secret verwendet werden sollen. In den Wert des FeldssecretVersion
können Sie Substitutionsvariablen einfügen. Sie können in einem Build mehrere Secrets angeben. - 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 den geheim halten. - Fügen Sie das Feld
secretEnv
hinzu, das die Umgebungsvariable 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 das Secret im Feld
args
angeben, geben Sie es mithilfe der Methode Umgebungsvariable mit dem Präfix$$
.
- Fügen Sie das Feld
The following example build config file shows how to login to Docker using the Docker username and password stored in Secret Manager.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }
Replace the placeholder values in the above commands with the following:
PROJECT_ID
: The ID of the Google Cloud project where you've stored your secrets.DOCKER_USERNAME_SECRET_NAME
: The secret name corresponding to your Docker username. You can get the secret name from the Secret Manager page in the Google Cloud console.DOCKER_USERNAME_SECRET_VERSION
: The secret version of your Docker username. You can get the secret version by clicking on a secret name on the Secret Manager page in the Google Cloud console.DOCKER_PASSWORD_SECRET_NAME
: The secret name corresponding to your Docker password. You can get the secret name from the Secret Manager page in the Google Cloud console.DOCKER_PASSWORD_SECRET_VERSION
: The secret version of your Docker password. You can get the secret version by clicking on a secret name on the Secret Manager page in the Google Cloud console.
- Fügen Sie nach allen Build-
Use the build config file to start a build using the command line or to automate builds using triggers.
Example: Accessing secrets from scripts and processes
secretEnv
field adds the value of the secret to the environment and you can
access this value via environment variable from scripts or processes:
YAML
steps:
- name: python:slim
entrypoint: python
args: ['main.py']
secretEnv: ['MYSECRET']
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/mySecret/versions/latest
env: 'MYSECRET'
JSON
{
"steps": [
{
"name": "python:slim",
"entrypoint": "python",
"args": [
"main.py"
],
"secretEnv": [
"MYSECRET"
]
}
],
"availableSecrets": {
"secretManager": [
{
"versionName": "projects/$PROJECT_ID/secrets/mySecret/versions/latest",
"env": "MYSECRET"
}
]
}
}
The following contents of main.py
prints the first five characters of the secret:
import os
print(os.environ.get("MYSECRET", "Not Found")[:5], "...")
Example: authenticating to Docker
In some situations, before interacting with Docker images, your build would need to authenticate to Docker. For example, Docker authentication is required for builds to pull private images and push private or public images to Docker Hub. In these cases, you can store your Docker username and password in Secret Manager and then configure Cloud Build to access the username and password from Secret Manager. For instructions on doing this see Interacting with Docker Hub images.
Example: GitHub pull request creation
Another example where you might want to configure your build to access a sensitive information from Secret Manager is for creating a GitHub pull request in response to builds. To do this:
- Create a GitHub token.
- Store the GitHub token in Secret Manager.
- In your build config file:
- After all the build
steps
, add anavailableSecrets
field to specify the secret version and the environment variable to use for the GitHub token. - Add a build step to invoke the command to create a GitHub pull request.
- After all the build
- Create a GitHub app trigger and use the build config file to invoke the trigger.
The following example config file shows how to create a GitHub pull request using the GitHub token:
YAML
steps: - name: 'launcher.gcr.io/google/ubuntu1604' id: Create GitHub pull request entrypoint: bash args: - -c - curl -X POST -H "Authorization:Bearer $$GH_TOKEN" -H 'Accept:application/vnd.github.v3 json' https://api.github.com/repos/GITHUB_USERNAME/REPO_NAME/pulls -d '{"head":"HEAD_BRANCH","base":"BASE_BRANCH", "title":"NEW_PR"}' secretEnv: ['GH_TOKEN'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/GH_TOKEN_SECRET_NAME/versions/latest env: GH_TOKEN
JSON
{ "steps": [ { "name": "launcher.gcr.io/google/ubuntu1604", "id": "Create GitHub pull request", "entrypoint": "bash", "args": [ "-c", "curl -X POST -H \"Authorization:Bearer $$GH_TOKEN\" -H 'Accept:application/vnd.github.v3 json' https://api.github.com/repos/GITHUB_USERNAME/REPO_NAME -d '{\"head\":\"HEAD_BRANCH\",\"base\":\"BASE_BRANCH\", \"title\":\"NEW_PR\"}' ], "secretEnv": ['GH_TOKEN'] } ], "availableSecrets": { "secretManager": [ { "versionName": "projects/PROJECT_ID/secrets/GH_TOKEN_SECRET_NAME/versions/latest", "env": "GH_TOKEN" } ] } }
Ersetzen Sie die Platzhalterwerte in den obigen Befehlen durch Folgendes:
PROJECT_ID
: die ID des Google Cloud-Projekts wo Sie Ihre Geheimnisse gespeichert haben.GITHUB_USERNAME
: Der GitHub-Nutzername des Repository-Inhabers.REPO_NAME
: Der Name des GitHub-Repositorys.HEAD_BRANCH
: Der Name des Zweigs, in dem die Änderungen implementiert sind. Geben Sie bei repository-übergreifende Pull-Anfragen im gleichen Netzwerk für den Namespacehead
einen Nutzer wie den folgenden an:username:branch
.BASE_BRANCH
: Der Name des Zweigs, in den die Änderungen übernommen werden sollen. Dies sollte ein vorhandener Zweig im aktuellen Repository sein. Sie können keine Pull-Anfrage an ein Repository senden, das eine Zusammenführung an eine Basis eines anderen Repositorys anfordert.GH_TOKEN_SECRET_NAME
: Der Secret-Name, der Ihrem GitHub-Token entspricht.NEW_PR
: Die neue Pull-Anfrage, die Sie erstellen möchten.
Builds für den Zugriff auf Nicht-UTF-8-Secrets aus Secret Manager konfigurieren
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 über die Befehlszeile zu starten oder Builds mit Triggern zu automatisieren.
Nächste Schritte
- Verschlüsselte Anmeldedaten in Builds verwenden
- Weitere Informationen finden Sie unter Auf private GitHub-Repositories zugreifen.
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-10-17 (UTC).