Cloud Key Management Service est un service Google Cloud qui vous permet de gérer et d'utiliser des clés cryptographiques. Cette page explique comment utiliser des informations chiffrées à partir de Cloud KMS dans Cloud Build.
Avant de commencer
-
Enable the Cloud Build and Cloud KMS APIs.
Pour utiliser les exemples de ligne de commande de ce guide, installez et configurez Google Cloud CLI.
Chiffrez les informations sensibles à l'aide de Cloud KMS. Cloud KMS enregistre vos contenus chiffrés dans un fichier.
[FACULTATIF] Pour configurer les compilations afin d'utiliser des données chiffrées, convertissez ENCRYPTED_FILE en base64 (cette étape n'est pas nécessaire pour les configurations de compilation utilisant des fichiers chiffrés):
base64 ENCRYPTED_FILE
Autorisations IAM requises
Accordez le
Déchiffreur de CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyDecrypter
)
IAM au compte de service de compilation:
Dans la console Google Cloud, accédez à la page Paramètres de Cloud Build :
Localisez la ligne contenant le rôle Déchiffreur de clé de chiffrement Cloud KMS et définissez son état sur ENABLED.
Configurer des compilations pour utiliser des données chiffrées
Dans le répertoire racine de votre projet, créez un fichier de configuration de compilation Cloud Build nommé
cloudbuild.yaml
oucloudbuild.json
.Dans le fichier de configuration de compilation :
- Après toute la compilation
steps
, ajoutez un champavailableSecrets
pour spécifier la valeur chiffrée en tant que variable d'environnement et lakmsKeyName
à utiliser pour la déchiffrer. Vous pouvez utiliser des variables de substitution dans la valeur dekmsKeyName
. - À l'étape de compilation où vous souhaitez spécifier le secret :
- Ajoutez un champ
entrypoint
pointant versbash
pour utiliser l'outil bash dans l'étape de compilation. Cette valeur est obligatoire pour faire référence à la variable d'environnement du secret. - Ajoutez un champ
secretEnv
spécifiant la variable d'environnement de la valeur chiffrée. - Dans le champ
args
, ajoutez une option-c
en tant que premier argument. Toutes les chaînes que vous transmettez après -c sont traitées comme des commandes. Pour en savoir plus sur l'exécution des commandes bash avec -c, consultez la documentation bash. - Lorsque vous spécifiez la valeur chiffrée dans le champ
args
, spécifiez-la à l'aide de la variable d'environnement précédée de$$
.
- Ajoutez un champ
The following example build config file shows how to login to Docker and pull a private image:
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" } }] } }
Replace the placeholder values in the above commands with the following:
PROJECT_ID
: The ID of the Google Cloud project which contains your Cloud KMS service.USERNAME_KEYRING_NAME
: The key ring name of your Docker username.USERNAME_KEY_NAME
: The key name of your Docker username.ENCRYPTED_USERNAME
: Your encrypted Docker username in base64 format.PASSWORD_KEYRING_NAME
: The key ring name of your Docker password.PASSWORD_KEY_NAME
: The key name of your Docker password.ENCRYPTED_PASSWORD
: Your encrypted Docker password in base64 format.REPOSITORY
: The name of your Docker repository from where you're pulling the image.TAG
: The tag name of your image.
- Après toute la compilation
Use the build config file to manually start a build or to automate builds using triggers.
Configuring builds to use encrypted files
In your project root directory, create a Cloud Build build config file named
cloudbuild.yaml
orcloudbuild.json
.In your build config file, before any build steps that interact with the decrypted file, add a
gcloud
build step to decrypt the encrypted file using the encryption key. The following example build config file shows how to login to Docker using the encrypted file with Docker password: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" ] } ] }
Replace the placeholder values in the above commands with the following:
KEYRING_NAME
: The key ring name of your Docker password.KEY_NAME
: The key name of your Docker password.ENCRYPTED_PASSWORD_FILE
: Encrypted file with your Docker password.PLAINTEXT_PASSWORD_FILE
: Plaintext file with your Docker password.
Use the build config file to manually start a build or to automate builds using triggers.
Configuring builds to use encrypted data (legacy)
To encrypt sensitive data using Cloud KMS and use that data in a build config file:
In your build config file, add a
secrets
field to specify the encrypted value and theCryptoKey
to use to decrypt it. Then, in the build step where you want to use the encrypted variable, add asecretEnv
field to specify the variable as an environment variable. Include the variable's name in thesecretEnv
field. If you specify the variable value, or a non-secret environment variable with the same name, Cloud Build throws an error.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" } } ] }
Étape suivante
- Découvrez comment configurer des compilations pour accéder aux secrets depuis Secret Manager.
- Découvrez comment accéder à des dépôts GitHub privés.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2024/11/20 (UTC).