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.
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:
Nella console Google Cloud, vai alla pagina Impostazioni di Cloud Build:
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
Nella directory root del progetto, crea un file di configurazione della build di Cloud Build denominato
cloudbuild.yaml
ocloudbuild.json
.Nel file di configurazione della build:
- Dopo aver completato tutta la build
steps
, aggiungi un campoavailableSecrets
per specificare il valore criptato come variabile di ambiente e il campokmsKeyName
da utilizzare per decriptarlo. Puoi utilizzare le variabili di sostituzione nel valore dikmsKeyName
. - Nel passaggio della build in cui vuoi specificare il secret:
- Aggiungi un campo
entrypoint
che punta abash
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$$
.
- Aggiungi un campo
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.
- Dopo aver completato tutta la build
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
Nella directory root del progetto, crea un file di configurazione della build di Cloud Build denominato
cloudbuild.yaml
ocloudbuild.json
.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.
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:
Nel file di configurazione della build, aggiungi un campo
secrets
per specificare il valore criptato e il valoreCryptoKey
da utilizzare per decriptarlo. Quindi, nel passaggio di build in cui vuoi utilizzare la variabile criptata, aggiungi un camposecretEnv
per specificarla come variabile di ambiente. Includi il nome della variabile nel camposecretEnv
. 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
- Scopri come configurare le build per accedere ai secret da Secret Manager.
- Scopri come accedere ai repository privati GitHub.