Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Secrets aus Secret Manager verwenden

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 im Secret Manager speichern und dann den Build so konfigurieren, dass der Zugriff auf die Informationen im Secret Manager erfolgt.

Hinweis

  • Cloud Build and Secret Manager APIs aktivieren.

    Aktivieren Sie die APIs

  • Um die Befehlszeilenbeispiele in dieser Anleitung zu verwenden, installieren und konfigurieren Sie das Cloud SDK.

  • Achten Sie darauf, dass Sie das Secret im Secret Manager gespeichert haben. Eine Anleitung finden Sie unter Secret erstellen.

    • Notieren Sie den Secret-Namen 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 Cloud Build-Dienstkonto die IAM-Rolle Secret Manager Secret Accessor (roles/secretmanager.secretAccessor) für das Secret zu:

  1. Öffnen Sie die Seite "Secret Manager" in der Google Cloud Console:

    Zur Seite "Secret Manager"

  2. Klicken Sie das Kästchen des Secrets an, das Sie in Ihrem Build verwenden möchten.

  3. Falls der Bereich noch nicht geöffnet ist, klicken Sie auf Infofeld ansehen, um das Feld zu öffnen.

  4. Klicken Sie unter Berechtigungen auf Mitglied hinzufügen.

  5. Geben Sie im Textfeld Neue Mitglieder die E-Mail-Adresse Ihres Cloud Build-Dienstkontos im Format PROJECT_NUMBER@cloudbuild.gserviceaccount.com ein. PROJECT_NUMBER ist die Projektnummer des Projekts, in dem Sie Builds ausführen. Die Projektnummer finden Sie auf der Seite mit den Projekteinstellungen.

  6. Wählen Sie im Drop-down-Menü Rolle auswählen die Option Zugriffsfunktion für Secret Manager-Secret aus.

  7. Klicken Sie auf Speichern.

Builds konfigurieren, um über Secret Manager auf das Secret zuzugreifen

  1. Erstellen Sie im Stammverzeichnis des Projekts eine Cloud Build-Konfigurationsdatei mit dem Namen cloudbuild.yaml oder cloudbuild.json.

  2. In der Build-Konfigurationsdatei:

    • Fügen Sie nach dem Build steps das Feld availableSecrets hinzu, um die Secret-Version und die Umgebungsvariablen anzugeben, die für Ihr Secret verwendet werden sollen. Sie können im Feld secretVersion das Feld Substitutionsvariablen einfügen. Sie können in einem Build mehrere Secrets angeben.
    • Im Build-Schritt, in dem Sie das Secret angeben möchten:
      • Fügen Sie das Feld entrypoint hinzu, das auf bash 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 ein secretEnv-Feld hinzu, das die Umgebungsvariable angibt.
      • Fügen Sie im Feld args als erstes Argument das Flag -c 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.
      • Geben Sie das Secret im Feld args mit der Umgebungsvariablen mit dem Präfix $$ an.

    Die folgende Build-Konfigurationsdatei zeigt, wie Sie sich mit dem Docker-Nutzernamen und -Passwort aus Secret Manager in Docker anmelden.

    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"
         }]
      }
    }
    

    Ersetzen Sie die Platzhalterwerte in den obigen Befehlen durch Folgendes:

    • PROJECT_ID: Die ID des Cloud-Projekts, in dem Sie Ihre Secrets gespeichert haben.
    • DOCKER_USERNAME_SECRET_NAME: Der geheime Name für Ihren Docker-Nutzernamen. Sie können den Secret-Namen in der Cloud Console auf der Seite Secret Manager abrufen.
    • DOCKER_USERNAME_SECRET_VERSION: Die Secret-Version Ihres Docker-Nutzernamens. Sie können die Secret-Version abrufen. Klicken Sie dazu in der Cloud Console auf der Seite Secret Manager auf einen Secret-Namen.
    • DOCKER_PASSWORD_SECRET_NAME: Der Secret-Name Ihres Docker-Passworts. Sie können den Secret-Namen in der Cloud Console auf der Seite Secret Manager abrufen.
    • DOCKER_PASSWORD_SECRET_VERSION: Die Secret-Version Ihres Docker-Passworts. Sie können die Secret-Version abrufen. Klicken Sie dazu in der Cloud Console auf der Seite Secret Manager auf einen Secret-Namen.
  3. Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.

Beispiel: Authentifizierung bei Docker

In einigen Situationen muss sich der Build bei der Authentifizierung bei Docker gegenüber Docker authentifizieren. Docker-Authentifizierung ist zum Beispiel erforderlich, damit Builds private Images abrufen und private oder öffentliche Images an Docker Hub übertragen können. In diesen Fällen können Sie Ihren Docker-Nutzernamen und Ihr Passwort im Secret Manager speichern und anschließend Cloud Build für den Zugriff auf den Nutzernamen und das Passwort aus Secret Manager konfigurieren. Eine Anleitung dazu finden Sie unter Mit Docker Hub-Images interagieren.

Beispiel: GitHub-Pull-Anfrage erstellen

Ein weiteres Beispiel: Sie möchten Ihren Build für den Zugriff auf vertrauliche Informationen aus Secret Manager konfigurieren. Dazu erstellen Sie eine GitHub-Pull-Anfrage als Reaktion auf Builds. So gehen Sie dazu vor:

  • Erstellen Sie ein GitHub-Token.
  • Speichern Sie das GitHub-Token in Secret Manager.
  • In Ihrer Build-Konfigurationsdatei:
    • Fügen Sie nach dem Build steps das Feld availableSecrets hinzu, um die Secret-Version und die Umgebungsvariable anzugeben, die für das GitHub-Token verwendet werden sollen.
    • Fügen Sie einen Build-Schritt hinzu, um den Befehl zum Erstellen einer GitHub-Pull-Anfrage aufzurufen.
  • Erstellen Sie einen GitHub-App-Trigger und verwenden Sie die Build-Konfigurationsdatei, um den Trigger aufzurufen.

Die folgende Beispielkonfigurationsdatei zeigt, wie Sie mithilfe des GitHub-Tokens eine GitHub-Pull-Anfrage erstellen:

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 Cloud-Projekts, in dem Sie Ihre Secrets gespeichert haben.
  • GITHUB_USERNAME: Der GitHub-Nutzername des Repository-Inhabers.
  • REPO_NAME: Der Name des GitHub-Repositorys.
  • HEAD_BRANCH: Der Name des Branch, in dem die Änderungen implementiert werden. Für Cross-Repository-Pull-Anfragen im selben Netzwerk verwenden Sie den Namespace head mit einem Nutzer wie diesem: username:branch.
  • BASE_BRANCH: Der Name des Branch, in den die Änderungen per Pull übertragen 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 einen Basis eines anderen Repositorys anfordert.
  • GH_TOKEN_SECRET_NAME: Der geheime Name für Ihr GitHub-Token.
  • NEW_PR: Die neue Pull-Anfrage, die Sie erstellen möchten.

Nächste Schritte