En este documento, se describe cómo proteger los datos sensibles que deseas especificar para un trabajo por lotes con secretos de Secret Manager.
Secretos de Secret Manager proteger datos sensibles mediante encriptación. En un trabajo por lotes, puedes especificar uno o más secretos existentes para pasar de forma segura los datos sensibles que contienen, lo siguiente:
Definir de forma segura variables de entorno personalizadas que contienen datos sensibles.
Especifica de forma segura las credenciales de acceso de un Docker Registry para permitir que los elementos ejecutables de una tarea accedan a sus imágenes de contenedor privadas.
Antes de comenzar
- Si nunca antes usaste Batch, consulta Cómo comenzar 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 deseas especificar de forma segura para un trabajo.
-
A fin de obtener los permisos que necesitas para crear un trabajo, solicita a tu administrador que te otorgue el los siguientes roles de IAM:
-
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 otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
-
Editor de trabajos por lotes (
-
Para garantizar que la cuenta de servicio del trabajo tenga los permisos necesarios para acceder a los secretos, pídele a tu administrador que le otorgue a la cuenta de servicio del trabajo el rol de IAM de Descriptor de acceso a secretos de Secret Manager (
roles/secretmanager.secretAccessor
) en el secreto.
Pasa datos sensibles de forma segura a variables de entorno personalizadas
Para pasar de forma segura datos sensibles de los secretos de Secret Manager a variables de entorno personalizadas, debes definir cada variable de entorno en el subcampo de variables secretas (secretVariables
) para un entorno y especificar un secreto para cada valor.
Cada vez que especificas un secreto en un trabajo, debes darle el formato de una ruta de acceso.
a una versión del Secret:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Puedes crear un trabajo que defina variables secretas con la CLI de gcloud, la API de Batch, Java, Node.js o Python.
En el siguiente ejemplo, se explica cómo crear un trabajo que
define y usa una variable secreta para el
entorno de todos los ejecutables (subcampo environment
de taskSpec
).
gcloud
Crea un archivo JSON que especifique los detalles de configuración del trabajo y incluya el subcampo
secretVariables
para uno o más entornos.Por ejemplo, para crear un trabajo de secuencia de comandos básico que use un en el entorno para todos los 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" } }
Reemplaza lo siguiente:
SECRET_VARIABLE_NAME
: Es el nombre de la variable secreta. Por convención, los nombres de variable de entorno mayúsculas.Para acceder de forma segura a los datos sensibles desde el Secret Manager, especifica el nombre de esta variable en esta ejecutables del trabajo. Todos los elementos ejecutables que se encuentran en el mismo entorno en el que defines la variable secreta pueden acceder a ella.
PROJECT_ID
: Es el ID del proyecto.SECRET_NAME
: Es el nombre de un secreto existente de Secret Manager.VERSION
: el versión del Secret especificado que contiene los datos que deseas para pasar 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
Reemplaza lo siguiente:
JOB_NAME
: Es el nombre del trabajo.LOCATION
: Es la ubicación del trabajo.JSON_CONFIGURATION_FILE
: Es la ruta de acceso para un JSON. con los detalles de configuración del trabajo.
API
Realiza una solicitud POST
al método jobs.create
que especifique el subcampo secretVariables
para uno o más entornos.
Por ejemplo, para crear un trabajo de secuencia de comandos básico que use una variable secreta en el entorno para todos los elementos ejecutables, realiza 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"
}
}
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto.LOCATION
: Es la ubicación del trabajo.JOB_NAME
: Es el nombre del trabajo.SECRET_VARIABLE_NAME
: Es el nombre de la variable secreta. Por convención, los nombres de variable de entorno mayúsculas.Para acceder de forma segura a los datos sensibles del secreto de Secret Manager de la variable, especifica el nombre de esta variable en los elementos ejecutables de esta tarea. Todos los elementos ejecutables que se encuentran en el mismo entorno en el que defines la variable secreta pueden acceder a ella.
SECRET_NAME
: Es el nombre de un secreto de Secret Manager existente.VERSION
: Es la versión del secreto especificado que contiene los datos que deseas pasar al trabajo. Puede ser el número de versión olatest
.
Java
Node.js
Python
Accede de forma segura a las imágenes de contenedor que requieren credenciales del registro de Docker
Para usar una imagen de contenedor de un registro privado de Docker, un ejecutable debe especificar credenciales de acceso que le permitan acceder a ese registro de Docker.
Específicamente, para cualquier contenedor ejecutable con el campo URI de la imagen (imageUri
) establecido en una imagen de un registro privado de Docker, debes especificar las credenciales necesarias para acceder a ese registro de Docker con el campo de nombre de usuario (username
) y el campo de contraseña (password
).
Para proteger las credenciales sensibles de un registro de Docker, especifica secretos existentes 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
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 con 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 privado de Docker especificando el nombre de usuario directamente y la contraseña como un secreto.
gcloud
Crea un archivo JSON que especifique los detalles de configuración del trabajo. Para cualquier contenedor ejecutable que use imágenes de un contenedor Docker, 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 privado de Docker, 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" } }
Reemplaza lo siguiente:
PRIVATE_IMAGE_URI
: Es el URI de imagen de un contenedor de un registro privado de Docker. Si esta imagen requiere cualquier otra configuración de contenedor debes incluirlos también.USERNAME
: Es el nombre de usuario del registro privado de Docker, que se puede especificar como un secreto o directamente.PASSWORD
: el contraseña para el registro privado de Docker, que se puede especificar como secreto (recomendado) o directamente.Por ejemplo, para especificar la contraseña como un secreto, configura
PASSWORD
de la siguiente manera:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto.SECRET_NAME
: Es el nombre de un secreto existente de Secret Manager.VERSION
: el versión del Secret especificado que contiene los datos que deseas para pasar al trabajo. Puede ser el número de versión olatest
.
Para crear y ejecutar la tarea, usa el comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Reemplaza lo siguiente:
JOB_NAME
: Es el nombre del trabajo.LOCATION
: Es la ubicación. del trabajo.JSON_CONFIGURATION_FILE
: Es la ruta de acceso a un archivo JSON con los detalles de configuración de la tarea.
API
Realiza una solicitud POST
al método jobs.create
.
Para cualquier contenedor ejecutable que use imágenes de un contenedor
Docker, 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 privado de Docker, realiza 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"
}
}
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto.LOCATION
: Es la ubicación. del trabajo.JOB_NAME
: Es el nombre del trabajo.PRIVATE_IMAGE_URI
: Es el URI de imagen para un de contenedor desde un registro privado de Docker. Si esta imagen requiere cualquier otra configuración de contenedor debes incluirlos también.USERNAME
: el nombre de usuario para el registro privado de Docker, que se puede especificar como secreto o directamente.PASSWORD
: el contraseña para el registro privado de Docker, que se puede especificar como secreto (recomendado) o directamente.Por ejemplo, para especificar la contraseña como un secreto, configura
PASSWORD
de la siguiente manera:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID del proyecto.SECRET_NAME
: Es el nombre de un secreto de Secret Manager existente.VERSION
: Es la versión del secreto especificado que contiene los datos que deseas pasar al trabajo. Puede ser el número de versión olatest
.
¿Qué sigue?
Si tienes problemas para crear o ejecutar un trabajo, consulta Solución de problemas.
Obtén más información sobre las variables de entorno.
Obtener más información sobre el administrador de secretos.
Obtén más información sobre las opciones de creación de trabajos.