En este documento se describe cómo proteger los datos sensibles que quieras especificar en un trabajo por lotes mediante secretos de Secret Manager.
Los secretos de Secret Manager protegen los datos sensibles mediante el cifrado. En un trabajo por lotes, puedes especificar uno o varios secretos para transferir de forma segura los datos sensibles que contienen, que puedes usar para hacer lo siguiente:
Define de forma segura variables de entorno personalizadas que contengan datos sensibles.
Especifica de forma segura las credenciales de inicio de sesión de un registro de Docker para que los elementos ejecutables de un trabajo puedan acceder a sus imágenes de contenedor privadas.
Antes de empezar
- Si no has usado Batch antes, consulta el artículo Empezar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
- Crea un secreto o identifica un secreto para los datos sensibles que quieras especificar de forma segura en un trabajo.
-
Para obtener los permisos que necesitas para crear un trabajo, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) en el proyecto -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio del trabajo, que de forma predeterminada es la cuenta de servicio predeterminada de Compute Engine
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
-
Editor de trabajos por lotes (
-
Para asegurarte de que la cuenta de servicio del trabajo tiene los permisos necesarios para acceder a los secretos, pide a tu administrador que le conceda el rol de gestión de identidades y accesos Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor
) en el secreto.
Transferir datos sensibles de forma segura a variables de entorno personalizadas
Para transferir de forma segura datos sensibles de secretos de Secret Manager a variables de entorno personalizadas, debes definir cada variable de entorno en el subcampo variables de secreto (secretVariables
) de un entorno y especificar un secreto para cada valor.
Cada vez que especifiques un secreto en un trabajo, debes darle el formato de una ruta de acceso a una versión del secreto:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
Puedes crear un trabajo que defina variables secretas
mediante la CLI de gcloud, la API Batch, Java, Node.js o Python.
En el siguiente ejemplo se explica cómo crear un trabajo que defina y use una variable secreta para el entorno de todos los elementos ejecutables (subcampo environment
de taskSpec
).
gcloud
Crea un archivo JSON que especifique los detalles de configuración del trabajo e incluya el subcampo
secretVariables
de uno o varios entornos.Por ejemplo, para crear un trabajo de secuencia de comandos básico que use una variable secreta en el entorno de todos los elementos ejecutables, crea un archivo JSON con el siguiente contenido:
{ "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" } }
Haz los cambios siguientes:
SECRET_VARIABLE_NAME
: nombre de la variable secreta. Por convención, los nombres de las variables de entorno se escriben en mayúsculas.Para acceder de forma segura a los datos sensibles del secreto de Secret Manager de la variable, especifique el nombre de esta variable en los elementos ejecutables de este trabajo. Se puede acceder a la variable secreta desde todos los elementos ejecutables que se encuentren en el mismo entorno en el que definas la variable secreta.
PROJECT_ID
: el ID de proyecto de tu proyecto.SECRET_NAME
: el nombre de un secreto de Secret Manager.VERSION
: la versión del secreto especificado que contiene los datos que quieres transferir al trabajo. Puede ser el número de versión olatest
.
Para crear y ejecutar el trabajo, usa el comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Haz los cambios siguientes:
JOB_NAME
: el nombre del puesto.LOCATION
: la ubicación del puesto.JSON_CONFIGURATION_FILE
: la ruta de un archivo JSON con los detalles de configuración del trabajo.
API
Envía una solicitud POST
al
método jobs.create
que especifique el subcampo secretVariables
de uno o varios entornos.
Por ejemplo, para crear una tarea de secuencia de comandos básica que use una variable secreta en el entorno de todos los elementos ejecutables, haz la siguiente solicitud:
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"
}
}
Haz los cambios siguientes:
PROJECT_ID
: el ID de proyecto de tu proyecto.LOCATION
: la ubicación del puesto.JOB_NAME
: el nombre del puesto.SECRET_VARIABLE_NAME
: nombre de la variable secreta. Por convención, los nombres de las variables de entorno se escriben en mayúsculas.Para acceder de forma segura a los datos sensibles del secreto de Secret Manager de la variable, especifique el nombre de esta variable en los elementos ejecutables de este trabajo. Se puede acceder a la variable secreta desde todos los elementos ejecutables que se encuentren en el mismo entorno en el que definas la variable secreta.
SECRET_NAME
: el nombre de un secreto de Secret Manager.VERSION
: la versión del secreto especificado que contiene los datos que quieres transferir al trabajo. Puede ser el número de versión olatest
.
Java
Node.js
Python
Acceder de forma segura a imágenes de contenedor que requieren credenciales de registro de Docker
Para usar una imagen de contenedor de un registro de Docker privado, un elemento ejecutable debe especificar las credenciales de inicio de sesión que le permitan acceder a ese registro de Docker.
En concreto, para cualquier contenedor que se pueda ejecutar con el campo URI de la imagen (imageUri
) definido en una imagen de un registro de Docker privado, debes especificar las credenciales necesarias para acceder a ese registro de Docker mediante los campos nombre de usuario (username
) y contraseña (password
).
Puede proteger las credenciales sensibles de un registro de Docker especificando secretos que contengan la información en lugar de definir estos campos directamente.
Cada vez que especifiques un secreto en un trabajo, debes darle el formato de una ruta de acceso a una versión del secreto:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
.
Puedes crear un trabajo que use imágenes de contenedor de un registro de Docker privado mediante la CLI de gcloud o la API de Batch. En el siguiente ejemplo se explica cómo crear un trabajo que use una imagen de contenedor de un registro de Docker privado especificando el nombre de usuario directamente y la contraseña como secreto.
gcloud
Crea un archivo JSON que especifique los detalles de configuración del trabajo. En el caso de los contenedores ejecutables que usen imágenes de un registro de Docker privado, incluye las credenciales necesarias para acceder a él en los campos
username
ypassword
.Por ejemplo, para crear un trabajo de contenedor básico que especifique una imagen de un registro de Docker privado, crea un archivo JSON con el siguiente contenido:
{ "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" } }
Haz los cambios siguientes:
PRIVATE_IMAGE_URI
: el URI de la imagen de un contenedor de un registro de Docker privado. Si esta imagen requiere otros ajustes de contenedor, también debes incluirlos.USERNAME
: el nombre de usuario del registro de Docker privado, que se puede especificar como secreto o directamente.PASSWORD
: la contraseña del registro de Docker privado, que se puede especificar como secreto (opción recomendada) o directamente.Por ejemplo, para especificar la contraseña como secreto, asigna el siguiente valor a
PASSWORD
:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Haz los cambios siguientes:
PROJECT_ID
: el ID de proyecto de tu proyecto.SECRET_NAME
: el nombre de un secreto de Secret Manager.VERSION
: la versión del secreto especificado que contiene los datos que quieres transferir al trabajo. Puede ser el número de versión olatest
.
Para crear y ejecutar el trabajo, usa el comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Haz los cambios siguientes:
JOB_NAME
: el nombre del puesto.LOCATION
: la ubicación del puesto.JSON_CONFIGURATION_FILE
: la ruta de un archivo JSON con los detalles de configuración del trabajo.
API
Realiza una solicitud POST
al método jobs.create
.
En el caso de los contenedores ejecutables que usen imágenes de un registro de Docker privado, incluye las credenciales necesarias para acceder a él en los campos username
y password
.
Por ejemplo, para crear un trabajo de contenedor básico que especifique una imagen de un registro de Docker privado, haz la siguiente solicitud:
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"
}
}
Haz los cambios siguientes:
PROJECT_ID
: el ID de proyecto de tu proyecto.LOCATION
: la ubicación del puesto.JOB_NAME
: el nombre del puesto.PRIVATE_IMAGE_URI
: el URI de la imagen de un contenedor de un registro de Docker privado. Si esta imagen requiere otros ajustes de contenedor, también debes incluirlos.USERNAME
: el nombre de usuario del registro de Docker privado, que se puede especificar como secreto o directamente.PASSWORD
: la contraseña del registro de Docker privado, que se puede especificar como secreto (opción recomendada) o directamente.Por ejemplo, para especificar la contraseña como secreto, asigna el siguiente valor a
PASSWORD
:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Haz los cambios siguientes:
PROJECT_ID
: el ID de proyecto de tu proyecto.SECRET_NAME
: el nombre de un secreto de Secret Manager.VERSION
: la versión del secreto especificado que contiene los datos que quieres transferir al trabajo. Puede ser el número de versión olatest
.
Siguientes pasos
Si tienes problemas para crear o ejecutar un trabajo, consulta la sección Solución de problemas.
Consulta más información sobre Secret Manager.
Consulta más información sobre las opciones de creación de trabajos.