Ce document explique comment protéger les données sensibles que vous souhaitez spécifier pour une tâche de traitement par lot à l'aide de secrets Secret Manager.
Les secrets Secret Manager protègent les données sensibles par chiffrement. Dans un job Batch, vous pouvez spécifier un ou plusieurs secrets existants pour transmettre en toute sécurité les données sensibles qu'ils contiennent, ce qui vous permet 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éer un secret ou identifier un secret des 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 jobs par lot (
roles/batch.jobsEditor
) sur le projet -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service du job, 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 jobs 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 de façon sécurisée les données sensibles à des variables d'environnement personnalisées
Pour transférer de manière sécurisée les données sensibles des secrets Secret Manager vers des
variables d'environnement, vous devez définir chaque variable d'environnement dans
Sous-champ des 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 de un secret Secret Manager existant.VERSION
: le 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 de la tâche.LOCATION
: emplacement du travail.JSON_CONFIGURATION_FILE
: chemin d'accès d'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 une tâche de script de base qui utilise un code secret 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 façon sécurisée aux données sensibles à partir du Secret Manager, spécifiez ce nom de variable dans ce et les exécutables du 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
: le 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 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 les identifiants sensibles d'un registre Docker en spécifiant
des secrets existants contenant ces informations au lieu de les définir
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 un job de conteneur de base qui spécifie une image à partir 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 d'un registre Docker privé. Si cette image nécessite d'autres paramètres de conteneur ; vous devez également les inclure.USERNAME
: le dans le registre Docker privé, qui peut être spécifié de manière confidentielle ou directe.PASSWORD
: le le 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 votre projet.SECRET_NAME
: nom de 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 d'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 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 un job de conteneur de base qui spécifie une image à partir 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 de la tâche.JOB_NAME
: nom de la tâche.PRIVATE_IMAGE_URI
: URI de l'image pour d'un registre Docker privé. Si cette image nécessite d'autres paramètres de conteneur ; vous devez également les inclure.USERNAME
: le dans le registre Docker privé, qui peut être spécifié de manière confidentielle ou directe.PASSWORD
: le le 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 votre projet.SECRET_NAME
: nom d'un secret Secret Manager existant.VERSION
: le 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
.
É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.