Ce document explique comment protéger les données sensibles que vous souhaitez spécifier pour un job par lot à l'aide de secrets Secret Manager.
Les secrets Secret Manager protègent les données sensibles par chiffrement. Dans un job par lot, vous pouvez spécifier un ou plusieurs secrets existants pour transmettre de manière sécurisée les données sensibles qu'ils contiennent. Vous pouvez les utiliser pour effectuer les opérations suivantes:
Définissez de manière sécurisée des variables d'environnement personnalisées contenant des données sensibles.
Spécifiez de manière sécurisée les identifiants de connexion pour un registre Docker afin de permettre aux exécutables d'une tâche d'accéder à ses images de conteneur privées.
Avant de commencer
- Si vous n'avez jamais utilisé Batch, consultez Premiers pas avec Batch et activez Batch en remplissant les conditions préalables pour les projets et les utilisateurs.
- Créez un secret ou identifiez un secret pour les données sensibles que vous souhaitez spécifier de manière sécurisée pour une tâche.
-
Pour obtenir les autorisations nécessaires pour créer un job, demandez à votre administrateur de vous accorder les rôles IAM suivants:
-
Éditeur de tâches par lot (
roles/batch.jobsEditor
) sur le projet -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service de la tâche, qui est par défaut le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
-
Éditeur de tâches par lot (
-
Pour vous assurer que le compte de service de la tâche dispose des autorisations nécessaires pour accéder aux secrets, demandez à votre administrateur d'accorder au compte de service de la tâche le rôle IAM Accesseur de secrets du gestionnaire de secrets (
roles/secretmanager.secretAccessor
) sur le secret.
Transmettre des données sensibles de manière sécurisée à des variables d'environnement personnalisées
Pour transmettre de manière sécurisée des données sensibles à partir de secrets Secret Manager vers des variables d'environnement personnalisées, vous devez définir chaque variable d'environnement dans le sous-champ "variables de secret (secretVariables
)" pour un environnement et spécifier un secret pour chaque valeur.
Chaque fois que vous spécifiez un secret dans une tâche, vous devez le mettre en forme sous la forme d'un chemin d'accès à une version de secret : projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
Vous pouvez créer un job qui définit des variables secrètes à l'aide de la Google Cloud CLI, de l'API Batch, de Java, de Node.js ou de Python.
L'exemple suivant explique comment créer une tâche qui définit et utilise une variable secrète pour l'environnement de tous les exécutables (sous-champ environment
de taskSpec
).
gcloud
Créez un fichier JSON qui spécifie les détails de configuration de la tâche et inclut le sous-champ
secretVariables
pour un ou plusieurs environnements.Par exemple, pour créer une tâche de script de base qui utilise une variable secrète dans l'environnement pour tous les exécutables, créez un fichier JSON avec le contenu suivant:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo This is the secret: ${SECRET_VARIABLE_NAME}" } } ], "environment": { "secretVariables": { "{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION" } } } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Remplacez les éléments suivants :
SECRET_VARIABLE_NAME
: nom de la variable secrète. Par convention, les noms de variables d'environnement sont mis en majuscules.Pour accéder de manière sécurisée aux données sensibles à partir du secret Secret Manager de la variable, spécifiez ce nom de variable dans les exécutables de cette tâche. La variable secrète est accessible à tous les exécutables qui se trouvent dans le même environnement que celui dans lequel vous définissez la variable secrète.
PROJECT_ID
: ID de projet de votre projet.SECRET_NAME
: nom d'un secret Secret Manager existant.VERSION
: version du secret spécifié qui contient les données que vous souhaitez transmettre à la tâche. Il peut s'agir du numéro de version ou delatest
.
Pour créer et exécuter la tâche, utilisez la commande
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom de la tâche.LOCATION
: emplacement de la tâche.JSON_CONFIGURATION_FILE
: chemin d'accès à un fichier JSON contenant les détails de configuration de la tâche.
API
Envoyez une requête POST
à la méthode jobs.create
qui spécifie le sous-champ secretVariables
pour un ou plusieurs environnements.
Par exemple, pour créer une tâche de script de base qui utilise une variable secrète dans l'environnement pour tous les exécutables, envoyez la requête suivante:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo This is the secret: ${SECRET_VARIABLE_NAME}"
}
}
],
"environment": {
"secretVariables": {
"{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION"
}
}
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.LOCATION
: emplacement de la tâche.JOB_NAME
: nom de la tâche.SECRET_VARIABLE_NAME
: nom de la variable secrète. Par convention, les noms de variables d'environnement sont mis en majuscules.Pour accéder de manière sécurisée aux données sensibles à partir du secret Secret Manager de la variable, spécifiez ce nom de variable dans les exécutables de cette tâche. La variable secrète est accessible à tous les exécutables qui se trouvent dans le même environnement que celui dans lequel vous définissez la variable secrète.
SECRET_NAME
: nom d'un secret Secret Manager existant.VERSION
: version du secret spécifié qui contient les données que vous souhaitez transmettre à la tâche. Il peut s'agir du numéro de version ou delatest
.
Java
Node.js
Python
Accéder de manière sécurisée aux images de conteneur nécessitant des identifiants de registre Docker
Pour utiliser une image de conteneur à partir d'un registre Docker privé, un exécutable doit spécifier des identifiants de connexion qui lui permettent d'accéder à ce registre Docker.
Plus précisément, pour tout conteneur exécutable avec le champ URI de l'image (imageUri
) défini sur une image provenant d'un dépôt Docker privé, vous devez spécifier toutes les identifiants requises pour accéder à ce dépôt Docker à l'aide des champs nom d'utilisateur (username
) et mot de passe (password
).
Vous pouvez protéger tous les identifiants sensibles d'un registre Docker en spécifiant des secrets existants qui contiennent les informations au lieu de définir ces champs directement.
Chaque fois que vous spécifiez un secret dans une tâche, vous devez le mettre en forme sous la forme d'un chemin d'accès à une version de secret : projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
Vous pouvez créer une tâche qui utilise des images de conteneur à partir d'un dépôt Docker privé à l'aide de la CLI gcloud ou de l'API Batch. L'exemple suivant explique comment créer une tâche qui utilise une image de conteneur à partir d'un registre Docker privé en spécifiant directement le nom d'utilisateur et le mot de passe en tant que secret.
gcloud
Créez un fichier JSON qui spécifie les détails de la configuration de la tâche. Pour tous les exécutables de conteneur qui utilisent des images d'un registre Docker privé, incluez tous les identifiants requis pour y accéder dans les champs
username
etpassword
.Par exemple, pour créer une tâche de conteneur de base qui spécifie une image à partir d'un registre Docker privé, créez un fichier JSON contenant les éléments suivants:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "PRIVATE_IMAGE_URI", "commands": [ "-c", "echo This runnable uses a private image." ], "username": "USERNAME", "password": "PASSWORD" } } ], } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Remplacez les éléments suivants :
PRIVATE_IMAGE_URI
: URI de l'image pour une image de conteneur à partir d'un registre Docker privé. Si cette image nécessite d'autres paramètres de conteneur, vous devez également les inclure.USERNAME
: nom d'utilisateur du registre Docker privé, qui peut être spécifié en tant que secret ou directement.PASSWORD
: mot de passe du registre Docker privé, qui peut être spécifié en tant que secret (recommandé) ou directement.Par exemple, pour spécifier le mot de passe en tant que secret, définissez
PASSWORD
comme suit:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.SECRET_NAME
: nom d'un secret Secret Manager existant.VERSION
: version du secret spécifié qui contient les données que vous souhaitez transmettre à la tâche. Il peut s'agir du numéro de version ou delatest
.
Pour créer et exécuter la tâche, utilisez la commande
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom de la tâche.LOCATION
: emplacement de la tâche.JSON_CONFIGURATION_FILE
: chemin d'accès à un fichier JSON contenant les détails de configuration de la tâche.
API
Envoyez une requête POST
à la méthode jobs.create
.
Pour tous les exécutables de conteneur qui utilisent des images d'un registre Docker privé, incluez tous les identifiants requis pour y accéder dans les champs username
et password
.
Par exemple, pour créer une tâche de conteneur de base qui spécifie une image à partir d'un dépôt Docker privé, effectuez la requête suivante:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "PRIVATE_IMAGE_URI",
"commands": [
"-c",
"echo This runnable uses a private image."
],
"username": "USERNAME",
"password": "PASSWORD"
}
}
],
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.LOCATION
: emplacement de la tâche.JOB_NAME
: nom de la tâche.PRIVATE_IMAGE_URI
: URI de l'image pour une image de conteneur à partir d'un registre Docker privé. Si cette image nécessite d'autres paramètres de conteneur, vous devez également les inclure.USERNAME
: nom d'utilisateur du registre Docker privé, qui peut être spécifié en tant que secret ou directement.PASSWORD
: mot de passe du registre Docker privé, qui peut être spécifié en tant que secret (recommandé) ou directement.Par exemple, pour spécifier le mot de passe en tant que secret, définissez
PASSWORD
comme suit:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.SECRET_NAME
: nom d'un secret Secret Manager existant.VERSION
: version du secret spécifié qui contient les données que vous souhaitez transmettre à la tâche. Il peut s'agir du numéro de version ou delatest
.
Étape suivante
Si vous rencontrez des difficultés pour créer ou exécuter une tâche, consultez la section Dépannage.
En savoir plus sur les variables d'environnement
En savoir plus sur Secret Manager.
Découvrez d'autres options de création de tâches.