Utilizza credenziali criptate di Cloud KMS

Cloud Key Management Service è un servizio Google Cloud che consente di gestire e utilizzare le chiavi di crittografia. Questa pagina spiega come utilizzare le informazioni criptate di Cloud KMS in Cloud Build.

Prima di iniziare

  • Abilita le API Cloud Build and Cloud KMS.

    Abilita le API

  • Per utilizzare gli esempi di riga di comando in questa guida, installa e configura Google Cloud CLI.

  • Cripta le informazioni sensibili utilizzando Cloud KMS. Cloud KMS salva i contenuti criptati in un file.

  • [FACOLTATIVO] Per configurare le build in modo che utilizzino i dati criptati, converti ENCRYPTED_FILE in base64 (questo passaggio non è obbligatorio per le configurazioni di build che utilizzano file criptati):

        base64 ENCRYPTED_FILE
    

Autorizzazioni IAM richieste

Concedi il ruolo IAM Autore crittografia CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyDecrypter) all'account di servizio Cloud Build:

  1. Nella console Google Cloud, vai alla pagina Impostazioni di Cloud Build:

    Apri la pagina Impostazioni

  2. Individua la riga con il ruolo Autore crittografia CryptoKey Cloud KMS e imposta il suo Stato su ABILITATA.

Configurazione delle build per l'utilizzo di dati criptati

  1. Nella directory root del progetto, crea un file di configurazione della build di Cloud Build denominato cloudbuild.yaml o cloudbuild.json.

  2. Nel file di configurazione della build:

    • Dopo aver completato tutta la build steps, aggiungi un campo availableSecrets per specificare il valore criptato come variabile di ambiente e il campo kmsKeyName da utilizzare per decriptarlo. Puoi utilizzare le variabili di sostituzione nel valore di kmsKeyName.
    • Nel passaggio della build in cui vuoi specificare il secret:
      • Aggiungi un campo entrypoint che punta a bash per utilizzare lo strumento bash nel passaggio di creazione. È obbligatorio per fare riferimento alla variabile di ambiente per il secret.
      • Aggiungi un campo secretEnv che specifichi la variabile di ambiente per il valore criptato.
      • Nel campo args, aggiungi un flag -c come primo argomento. Qualsiasi stringa passata dopo -c viene trattata come un comando. Per saperne di più sull'esecuzione dei comandi Bash con -c, consulta la documentazione di Bash.
      • Quando specifichi il valore criptato nel campo args, specificalo utilizzando la variabile di ambiente preceduta dal prefisso $$.

    Il seguente file di configurazione di compilazione di esempio mostra come accedere a Docker ed eseguire il pull di un'immagine privata:

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

    Sostituisci i valori segnaposto nei comandi riportati sopra con quanto segue:

    • PROJECT_ID: l'ID del progetto Google Cloud che contiene il servizio Cloud KMS.
    • USERNAME_KEYRING_NAME: il nome del keyring del nome utente Docker.
    • USERNAME_KEY_NAME: il nome della chiave del tuo nome utente Docker.
    • ENCRYPTED_USERNAME: il tuo nome utente Docker criptato in formato base64.
    • PASSWORD_KEYRING_NAME: il nome del keyring della password Docker.
    • PASSWORD_KEY_NAME: il nome della chiave della password Docker.
    • ENCRYPTED_PASSWORD: la tua password Docker criptata in formato base64.
    • REPOSITORY: il nome del repository Docker da dove esegui il pull dell'immagine.
    • TAG: il nome tag della tua immagine.

  3. Utilizza il file di configurazione della build per avviare manualmente una build o per automatizzare le build utilizzando i trigger.

Configurazione delle build per l'utilizzo di file criptati

  1. Nella directory root del progetto, crea un file di configurazione della build di Cloud Build denominato cloudbuild.yaml o cloudbuild.json.

  2. Nel file di configurazione della build, prima di qualsiasi passaggio di build che interagisca con il file decriptato, aggiungi un passaggio di build gcloud per decriptare il file criptato utilizzando la chiave di crittografia. Il seguente file di configurazione di compilazione di esempio mostra come accedere a Docker utilizzando il file criptato con la password Docker:

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

    Sostituisci i valori segnaposto nei comandi riportati sopra con quanto segue:

    • KEYRING_NAME: il nome del keyring della password Docker.
    • KEY_NAME: il nome della chiave della password Docker.
    • ENCRYPTED_PASSWORD_FILE: file criptato con la password Docker.
    • PLAINTEXT_PASSWORD_FILE: file di testo non crittografato con la password Docker.
  3. Utilizza il file di configurazione della build per avviare manualmente una build o per automatizzare le build utilizzando i trigger.

Configurazione delle build per l'utilizzo dei dati criptati (legacy)

Per criptare i dati sensibili con Cloud KMS e utilizzarli in un file di configurazione della build:

  1. Nel file di configurazione della build, aggiungi un campo secrets per specificare il valore criptato e il valore CryptoKey da utilizzare per decriptarlo. Quindi, nel passaggio di build in cui vuoi utilizzare la variabile criptata, aggiungi un campo secretEnv per specificarla come variabile di ambiente. Includi il nome della variabile nel campo secretEnv. Se specifichi il valore della variabile o una variabile di ambiente non segreta con lo stesso nome, Cloud Build genera un errore.

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

Passaggi successivi