En este documento, se describe cómo proteger los datos sensibles que deseas especificar para un trabajo por lotes con secretos de Secret Manager.
Los secretos de Secret Manager protegen los datos sensibles a través del encriptado. En un trabajo por lotes, puedes especificar uno o más secretos existentes para pasar de forma segura los datos sensibles que contienen, que puedes usar para hacer lo siguiente:
Definir de forma segura variables de entorno personalizadas que contengan datos sensibles
Especificar de forma segura las credenciales de acceso para un registro de Docker para permitir que los ejecutables de un trabajo accedan a sus imágenes de contenedor privadas.
Antes de comenzar
- Si nunca usaste Batch, revisa Comienza a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
- Crea un secreto o identifica uno para los datos sensibles que deseas especificar de forma segura para un trabajo.
-
Para obtener los permisos que necesitas para crear un trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- Editor de trabajos de Batch (
roles/batch.jobsEditor) en el proyecto - Usuario de la 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 a través de roles personalizados o cualquier otro rol predefinido.
- Editor de trabajos de Batch (
-
Para garantizar que la cuenta de servicio del trabajo tenga los permisos necesarios para acceder a los secretos, pídele a tu administrador que otorgue el rol de IAM de Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) a la cuenta de servicio del trabajo en el secreto.
Pasa datos sensibles de forma segura a variables de entorno personalizadas
Para pasar datos sensibles de forma segura desde 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 especifiques un secreto en un trabajo, debes darle formato como una ruta de acceso
a una versión secreta:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.
Puedes crear un trabajo que defina variables secretas con gcloud CLI, 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 (environment subcampo de taskSpec).
gcloud
Crea un archivo JSON que especifique los detalles de configuración del trabajo y que incluya el subcampo
secretVariablespara 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 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 se escriben con mayúscula capitalizada.Para acceder de forma segura a los datos sensibles del secreto de Secret Manager de la variable, especifica este nombre de variable en los ejecutables de este trabajo. Se puede acceder a la variable secreta desde todos los ejecutables que se encuentran en el mismo entorno en el que defines la variable secreta.
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.
Para crear y ejecutar el trabajo, usa el
gcloud batch jobs submitcomando:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEReemplaza 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 del trabajo.
API
Realiza una POST solicitud al
jobs.create método
que especifique el secretVariables subcampo 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 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 se escriben con mayúscula capitalizada.Para acceder de forma segura a los datos sensibles del secreto de Secret Manager de la variable, especifica este nombre de variable en los ejecutables de este trabajo. Se puede acceder a la variable secreta desde todos los ejecutables que se encuentran en el mismo entorno en el que defines la variable secreta.
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 imágenes de contenedor que requieren credenciales de registro de Docker
Para usar una imagen de contenedor de un registro de Docker privado, un ejecutable debe especificar credenciales de acceso que le permitan acceder a ese registro de Docker.
En particular, para cualquier ejecutable de contenedor con el
campo URI de imagen (imageUri)
configurado en una imagen de un registro de Docker privado, 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).
Puedes proteger las credenciales sensibles de un registro de Docker si especificas 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 formato como una ruta de acceso
a una versión secreta:
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 gcloud CLI o la API de Batch. En el siguiente ejemplo, se explica cómo crear un trabajo que usa una imagen de contenedor de un registro de Docker privado 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 ejecutable de contenedor que use imágenes de un registro de Docker privado, incluye las credenciales necesarias para acceder a él en los campos
usernameypassword.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" } }Reemplaza lo siguiente:
PRIVATE_IMAGE_URI: Es el URI de imagen para una imagen de contenedor de un registro de Docker privado. Si esta imagen requiere cualquier otra configuración de contenedor, también debes incluirla.USERNAME: Es el nombre de usuario del registro de Docker privado, que se puede especificar como un secreto o directamente.PASSWORD: Es la contraseña del registro de Docker privado, que se puede especificar como un secreto (recomendado) o directamente.Por ejemplo, para especificar la contraseña como un secreto, configura
PASSWORDde la siguiente manera:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSIONReemplaza 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.
Para crear y ejecutar el trabajo, usa el
gcloud batch jobs submitcomando:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEReemplaza 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 del trabajo.
API
Realiza una solicitud POST al
jobs.create método.
Para cualquier ejecutable de contenedor que use 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, 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 una imagen de contenedor de un registro de Docker privado. Si esta imagen requiere cualquier otra configuración de contenedor, también debes incluirla.USERNAME: Es el nombre de usuario del registro de Docker privado, que se puede especificar como un secreto o directamente.PASSWORD: Es la contraseña del registro de Docker privado, que se puede especificar como un secreto (recomendado) o directamente.Por ejemplo, para especificar la contraseña como un secreto, configura
PASSWORDde la siguiente manera:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSIONReemplaza 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.
Obtén más información sobre Secret Manager.
Obtén información sobre más opciones de creación de trabajos.