Verschlüsselte Anmeldedaten von Cloud KMS verwenden

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.

Hinweis

  • Cloud Build and Cloud KMS APIs aktivieren.

    Aktivieren Sie die APIs

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

  • Verschlüsseln Sie die vertraulichen Informationen mit Cloud KMS. Cloud KMS speichert Ihren verschlüsselten Inhalt in einer Datei.

  • [OPTIONAL] Um Builds für die Verwendung verschlüsselter Daten zu konfigurieren, wandeln Sie ENCRYPTED_FILE in base64 um. Dieser Schritt ist für Build-Konfigurationen mit verschlüsselten Dateien 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:

  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.

Builds für die Verwendung verschlüsselter Daten konfigurieren

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

  2. In Ihrer Build-Konfigurationsdatei:

    • Fügen Sie nach dem Build steps das Feld availableSecrets hinzu, um den verschlüsselten Wert als Umgebungsvariable und den kmsKeyName zum Entschlüsseln anzugeben. Sie können im Wert von kmsKeyName Substitutionsvariablen verwenden.
    • 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 das Feld secretEnv hinzu, das die Umgebungsvariable für den verschlüsselten Wert 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.
      • Wenn Sie den verschlüsselten Wert im Feld args angeben, geben Sie ihn mit der Umgebungsvariable $$ an.

    Die folgende Build-Konfigurationsdatei zeigt, wie Sie sich bei Docker anmelden und ein privates Image herunterladen:

    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 Cloud-Projekts, das Ihren Cloud KMS-Dienst enthält.
    • USERNAME_KEYRING_NAME: Der Schlüsselbundname Ihres Docker-Nutzernamens.
    • USERNAME_KEY_NAME: Der Schlüsselname Ihres Docker-Nutzernamens.
    • ENCRYPTED_USERNAME: Ihr verschlüsselter Docker-Nutzername im base64-Format.
    • PASSWORD_KEYRING_NAME: Der Schlüsselbundname Ihres Docker-Passworts.
    • PASSWORD_KEY_NAME: Der Schlüsselname Ihres Docker-Passworts.
    • ENCRYPTED_PASSWORD: Das verschlüsselte Docker-Passwort im base64-Format.
    • REPOSITORY ist der Name Ihres Docker-Repositories, aus dem Sie das Image abrufen.
    • TAG: Der Tag-Name des Images.

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

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

  2. Fügen Sie der Build-Konfigurationsdatei vor dem Build-Schritt, der mit der verschlüsselten Datei interagiert, einen gcloud-Build-Schritt hinzu, um die verschlüsselte Datei mit dem Verschlüsselungsschlüssel zu entschlüsseln. Das folgende Beispiel zeigt, wie Sie sich mit der verschlüsselten Datei mit dem 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: Der Schlüsselbundname Ihres Docker-Passworts.
    • KEY_NAME: Der Schlüsselname Ihres Docker-Passworts.
    • ENCRYPTED_PASSWORD_FILE: Verschlüsselte Datei mit Ihrem Docker-Passwort.
    • PLAINTEXT_PASSWORD_FILE: Klartextdatei mit Ihrem Docker-Passwort.
  3. 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:

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

Nächste Schritte