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
-
Activer les API Cloud Build and Cloud KMS.
Pour utiliser les exemples de ligne de commande de ce guide, installez et configurez la 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 rôle IAM Déchiffreur de CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyDecrypter
) au compte de service Cloud Build:
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
L'exemple de fichier de configuration de compilation suivant montre comment se connecter à Docker et extraire une image privée:
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" } }] } }
Remplacez les valeurs d'espace réservé dans les commandes ci-dessus par les éléments suivants :
PROJECT_ID
: ID du projet Google Cloud qui contient votre service Cloud KMS.USERNAME_KEYRING_NAME
: nom du trousseau de clés correspondant à votre nom d'utilisateur DockerUSERNAME_KEY_NAME
: nom de la clé de votre nom d'utilisateur Docker.ENCRYPTED_USERNAME
: nom d'utilisateur Docker chiffré au format base64PASSWORD_KEYRING_NAME
: nom du trousseau de clés contenant votre mot de passe DockerPASSWORD_KEY_NAME
: nom de la clé de votre mot de passe Docker.ENCRYPTED_PASSWORD
: votre mot de passe Docker chiffré au format base64REPOSITORY
: nom du dépôt Docker à partir duquel vous extrayez l'image.TAG
: nom du tag de votre image.
- Après toute la compilation
Vous pouvez utiliser le fichier de configuration de compilation pour démarrer manuellement une compilation ou pour automatiser les compilations à l'aide de déclencheurs.
Configurer les compilations pour utiliser des fichiers chiffrés
Dans le répertoire racine de votre projet, créez un fichier de configuration de compilation Cloud Build nommé
cloudbuild.yaml
oucloudbuild.json
.Dans votre fichier de configuration de compilation, avant toute étape de compilation qui interagit avec le fichier déchiffré, ajoutez une étape de compilation
gcloud
pour déchiffrer le fichier chiffré à l'aide de la clé de chiffrement. L'exemple de fichier de configuration de compilation suivant montre comment se connecter à Docker à l'aide du fichier chiffré avec un mot de passe 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" ] } ] }
Remplacez les valeurs d'espace réservé dans les commandes ci-dessus par les éléments suivants :
KEYRING_NAME
: nom du trousseau de clés contenant votre mot de passe DockerKEY_NAME
: nom de la clé de votre mot de passe Docker.ENCRYPTED_PASSWORD_FILE
: fichier chiffré avec votre mot de passe DockerPLAINTEXT_PASSWORD_FILE
: fichier en texte brut avec votre mot de passe Docker.
Vous pouvez utiliser le fichier de configuration de compilation pour démarrer manuellement une compilation ou pour automatiser les compilations à l'aide de déclencheurs.
Configurer des compilations pour utiliser des données chiffrées (ancien)
Pour chiffrer des données sensibles à l'aide de Cloud KMS et les utiliser dans un fichier de configuration de compilation, procédez comme suit :
Dans votre fichier de configuration de compilation, ajoutez un champ
secrets
pour spécifier la valeur chiffrée et la valeurCryptoKey
à utiliser pour la déchiffrer. Ensuite, à l'étape de compilation où vous souhaitez utiliser la variable chiffrée, ajoutez un champsecretEnv
pour spécifier la variable en tant que variable d'environnement. Incluez le nom de la variable dans le champsecretEnv
. Si vous spécifiez une valeur ou s'il existe une variable d'environnement non secrète portant le même nom, Cloud Build génère une erreur.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" } } ] }
Étapes suivantes
- 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.