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

Secrets und Anmeldedaten verwenden

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:

  1. Aktivieren Sie die Secret Manager API:

    Aktivieren Sie die Secret Manager API

  2. Weisen Sie dem Cloud Build-Dienstkonto die IAM-Rolle Secret Accessor zu:

    1. Öffnen Sie in der Cloud Console die Seite "IAM".

      IAM-Seite öffnen

    2. Wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.

    3. Suchen Sie in der Berechtigungstabelle nach der E-Mail mit der Endung @cloudbuild.gserviceaccount.com und klicken Sie auf das Stiftsymbol.

    4. Fügen Sie die Rolle Secret Manager Secret Accessor hinzu.

    5. Klicken Sie auf Speichern.

  3. Daten in Secret Manager speichern:

    1. Rufen Sie in der Cloud Console die Seite "Secret Manager" auf:

      Zur Seite "Secret Manager"

    2. Klicken Sie auf der Seite Secret Manager auf Secret erstellen.

    3. Geben Sie auf der Seite Secret erstellen unter Name den Wert secret-name ein.

    4. Geben Sie im Feld Secret-Wert Ihre Daten ein.

    5. Lassen Sie den Abschnitt Regionen unverändert.

    6. 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.

  4. 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"
        ]
      }
      ]
    }
    
  5. 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"
         ]
      }
      ]
    }
    
  1. 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:

  1. Aktivieren Sie die Cloud KMS API.

    Cloud KMS API aktivieren

  2. Weisen Sie dem Cloud Build-Dienstkonto die IAM-Rolle Cloud KMS CryptoKey Decrypter zu:

    1. Rufen Sie in der Cloud Console die Cloud Build-Seite "Einstellungen" auf:

      Zur Seite "Einstellungen"

    2. Suchen Sie die Zeile mit der Rolle Cloud KMS CryptoKey-Entschlüsseler und setzen Sie ihren Status auf AKTIVIERT.

  3. Öffnen Sie ein Terminalfenster.

  4. Erstellen Sie eine neue Cloud KMS key-ring mit dem Namen keyring-name:

      gcloud kms keyrings create keyring-name --location global
    
  5. Erstellen Sie ein neues Cloud KMS key key-name für key-ring keyring-name:

      gcloud kms keys create key-name \
          --location global --keyring keyring-name \
          --purpose encryption
    
  6. Konfigurieren Sie Cloud Build für die Verwendung verschlüsselter Daten:

    • So verwenden Sie verschlüsselte Variablen:

      1. 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 weist echo 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
        
      2. Fügen Sie in Ihre Build-Konfigurationsdatei das Feld secrets ein, um den verschlüsselten Wert und das CryptoKey zum Entschlüsseln anzugeben. Fügen Sie dann im Build-Schritt, in dem Sie die verschlüsselte Variable verwenden möchten, das Feld secretEnv hinzu, um die Variable als Umgebungsvariable anzugeben. Fügen Sie den Namen der Variablen in das Feld secretEnv 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:

      1. 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
        
      2. 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.

  7. Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.

Nächste Schritte