Verschlüsselte Anmeldedaten von Cloud KMS verwenden

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.

Hinweis

  • Cloud Build and Cloud KMS APIs aktivieren.

    Aktivieren Sie die APIs

  • Installieren und konfigurieren Sie die Google Cloud CLI, um die Befehlszeilenbeispiele in dieser Anleitung zu verwenden.

  • 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:

  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 Abschluss des Builds steps ein availableSecrets-Feld hinzu, um den verschlüsselten Wert als Umgebungsvariable und den zur Entschlüsselung zu verwendenden kmsKeyName anzugeben. Sie können Substitutionsvariablen im Wert von kmsKeyName verwenden.
    • Geben Sie im Build-Schritt, in dem Sie das Secret angeben möchten, Folgendes an:
      • 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 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.

    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 ist die ID des 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.

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

Weitere Informationen