Ce document explique comment protéger les données sensibles que vous souhaitez spécifier pour un job Batch à l'aide de secrets Secret Manager.
Les secrets Secret Manager protègent les données sensibles grâce au chiffrement. Dans un job Batch, 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'un job 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-en un pour les données sensibles que vous souhaitez spécifier de manière sécurisée pour un job.
-
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 du job, qui par défaut est le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec 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 du job dispose des autorisations nécessaires pour accéder aux secrets, demandez à votre administrateur d'accorder au compte de service du job 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 provenant de secrets Secret Manager à des variables d'environnement personnalisées, vous devez définir chaque variable d'environnement dans le sous-champ "Variables secrètes" (secretVariables
) d'un environnement et spécifier un secret pour chaque valeur.
Chaque fois que vous spécifiez un secret dans un job, vous devez le mettre en forme en tant que chemin d'accès à une version secrète : projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
Vous pouvez créer un job qui définit des variables secrètes à l'aide de gcloud CLI, de l'API Batch, de Java, de Node.js ou de Python.
L'exemple suivant explique comment créer un job 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 du job et incluez le sous-champ
secretVariables
pour un ou plusieurs environnements.Par exemple, pour créer un job 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 des variable d'environnement sont en majuscules.Pour accéder de manière sécurisée aux données sensibles du secret Secret Manager de la variable, spécifiez le nom de cette variable dans les exécutables de ce job. 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é contenant les données que vous souhaitez transmettre au job. Il peut s'agir du numéro de version ou delatest
.
Pour créer et exécuter le job, 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 du job.LOCATION
: emplacement du job.JSON_CONFIGURATION_FILE
: chemin d'accès à un fichier JSON contenant les détails de configuration du job.
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 un job 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 du job.JOB_NAME
: nom du job.SECRET_VARIABLE_NAME
: nom de la variable secrète. Par convention, les noms des variable d'environnement sont en majuscules.Pour accéder de manière sécurisée aux données sensibles du secret Secret Manager de la variable, spécifiez le nom de cette variable dans les exécutables de ce job. 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é contenant les données que vous souhaitez transmettre au job. 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 provenant d'un registre Docker privé, un exécutable doit spécifier des identifiants de connexion lui permettant 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 registre Docker privé, vous devez spécifier les identifiants requis pour accéder à ce registre Docker à l'aide des champs nom d'utilisateur (username
) et mot de passe (password
).
Vous pouvez protéger les identifiants sensibles d'un registre Docker en spécifiant des secrets existants contenant les informations au lieu de définir directement ces champs.
Chaque fois que vous spécifiez un secret dans un job, vous devez le mettre en forme en tant que chemin d'accès à une version secrète : projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
Vous pouvez créer un job qui utilise des images de conteneurs provenant d'un registre Docker privé à l'aide de la gcloud CLI ou de l'API Batch. L'exemple suivant explique comment créer un job qui utilise une image de conteneur provenant 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 du job. Pour tous les exécutables de conteneur qui utilisent des images provenant d'un registre Docker privé, incluez les identifiants requis pour y accéder dans les champs
username
etpassword
.Par exemple, pour créer un job de conteneur de base qui spécifie une image provenant d'un registre Docker privé, créez un fichier JSON avec le contenu suivant :
{ "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 provenant 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
sur la valeur suivante :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é contenant les données que vous souhaitez transmettre au job. Il peut s'agir du numéro de version ou delatest
.
Pour créer et exécuter le job, 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 du job.LOCATION
: emplacement du job.JSON_CONFIGURATION_FILE
: chemin d'accès à un fichier JSON contenant les détails de configuration du job.
API
Envoyez une requête POST
à la méthode jobs.create
.
Pour tous les exécutables de conteneur qui utilisent des images provenant d'un registre Docker privé, incluez les identifiants requis pour y accéder dans les champs username
et password
.
Par exemple, pour créer un job de conteneur de base qui spécifie une image provenant d'un registre Docker privé, envoyez 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 du job.JOB_NAME
: nom du job.PRIVATE_IMAGE_URI
: URI de l'image pour une image de conteneur provenant 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
sur la valeur suivante :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é contenant les données que vous souhaitez transmettre au job. Il peut s'agir du numéro de version ou delatest
.
Étapes suivantes
Si vous rencontrez des problèmes pour créer ou exécuter un job, 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.