Es posible que tu trabajo tenga dependencias que requieran claves de API, contraseñas o cualquier otra información sensible. Para Cloud Run, Google recomienda que almacenes este tipo de información sensible en un secreto creado en Secret Manager.
Puedes hacer que un Secret esté disponible para los contenedores de dos maneras:
- Activa cada Secret como un volumen, lo que hace que el Secret esté disponible para el contenedor como archivos. La lectura de un volumen siempre recupera el valor del Secret de Secret Manager, de modo que se puede usar con la versión más reciente. Este método también funciona bien con la rotación de Secrets.
- Pasa un secreto mediante variables de entorno. Las variables de entorno se resuelven en el momento del inicio de la instancia, por lo que si usas este método, Google te recomienda fijar el secreto en una versión específica en lugar de usar la versión más reciente.
Para obtener más información, consulta el documento Prácticas recomendadas de Secret Manager.
Cómo se verifican los secretos en la implementación y el entorno de ejecución
Durante la creación del trabajo, se verifican todos los secretos en uso, ya sea como variables de entorno o activados como un volumen, para garantizar que la cuenta de servicio que se usa en la ejecución del contenedor tenga acceso a ellos. Si alguna verificación falla, la creación del trabajo falla.
Durante el tiempo de ejecución, cuando se inician las instancias:
- Si el secreto es una variable de entorno, su valor se recupera antes de iniciar la instancia, por lo que si se recuperan los secretos, la instancia no se inicia.
- Si el secreto se activa como un volumen, no se realiza ninguna verificación durante el inicio de la instancia. Sin embargo, durante el tiempo de ejecución, si no se puede acceder a un secreto, los intentos de leer el volumen activado fallarán.
La propiedad del volumen difiere según el entorno de ejecución y el tipo de implementación
Cuando activas un volumen con el entorno de ejecución de segunda generación, que es el caso de los trabajos, el volumen es propiedad de la raíz.
Permite que Cloud Run acceda a un Secret
Puedes usar un Secret de Secret Manager existente o crear uno nuevo. Sin embargo, para acceder al objeto Secret, debes otorgar el rol de descriptor de acceso a los objetos Secret de Secret Manager a la cuenta de servicio que se usa para la identidad del servicio de Cloud Run.
Cuando seleccionas un Secret de la página de Cloud Run en la consola de Google Cloud, se realiza una verificación de permisos automáticamente y se te solicita que agregues cualquier permiso que falte.
Para realizar esta acción de forma manual, haz lo siguiente:
Ve a la página de Secret Manager en la consola de Google Cloud:
Haz clic en el Secret de la lista.
En la pestaña Permiso, haz clic en Otorgar acceso.
En el cuadro de texto Principales nuevas, ingresa el correo electrónico de la identidad de tu servicio de Cloud Run.
Otórgale la función Descriptor de acceso a los Secrets de Secret Manager.
Haz que Cloud Run tenga acceso a un Secret
Puedes hacer que un Secret sea accesible para tu trabajo mediante la consola de Google Cloud, Google Cloud CLI o YAML:
Consola
En la consola de Google Cloud, ve a la página de trabajos de Cloud Run:
Si quieres configurar un nuevo trabajo, haz clic en la pestaña Trabajos y completa la página de configuración de trabajo inicial como desees. Si quieres configurar un trabajo existente, haz clic en el trabajo y, luego, en Editar.
Haz clic en Contenedor, variables y secretos, conexiones y seguridad para expandir la página de propiedades del trabajo.
Haz clic en la pestaña Variables y Secrets.
- En la pestaña Variables y Secrets, haz lo siguiente:
- EnSecretos, clicAgrega una referencia secreta
- Selecciona el Secret que quieres usar de la lista desplegable Secret.
- En el menú desplegable Reference Method (Método de referencia), selecciona la forma en la que deseas usar el Secret, activado como un volumen o expuesto como variables de entorno.
- Si activas el secreto como un volumen, haz lo siguiente:
- En Ruta de activación, especifica la ruta de activación que usas para los Secrets.
- De forma predeterminada, se selecciona la versión más reciente. Si lo deseas, puedes seleccionar una versión específica. En Rutas especificadas para las versiones de secretos, especifica la ruta a la versión y su número.
- Haga clic en Listo.
- Si deseas exponer el Secret como una variable de entorno, sigue estos pasos:
- Proporciona el Nombre de la variable y selecciona la versión del Secret, o la más reciente, para usar siempre la versión actual del Secret.
- Haga clic en Listo.
- En la pestaña Variables y Secrets, haz lo siguiente:
Haz clic en Crear o Actualizar.
Línea de comandos
Para especificar el Secret en una variable de entorno cuando crees un trabajo nuevo, haz lo siguiente:
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Reemplazar
- JOB_NAME por el nombre de tu trabajo.
- ENV_VAR_NAME por el nombre de la variable de entorno que se usará para el secreto.
- SECRET_NAME por el nombre secreto en el mismo proyecto, p. ej.,
mysecret
. - VERSION por la versión del Secret Usa
latest
para la versión más reciente o un número, por ejemplo,2
. - Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como
us-docker.pkg.dev/cloudrun/container/job:latest
.
Puedes especificar varios pares de variables entorno y Secret mediante una lista delimitada por comas.
Para especificar el Secret en una variable de entorno cuando actualices un trabajo, haz lo siguiente:
gcloud run jobs update JOB_NAME \ --set-secrets ENV_VAR_NAME=SECRET_NAME:VERSION
Para activar el Secret como un volumen cuando creas un trabajo, haz lo siguiente:
gcloud run jobs create JOB_NAME \ --image IMAGE_URL \ --set-secrets=PATH=SECRET_NAME:VERSION
Reemplaza lo siguiente:
- JOB_NAME por el nombre de tu trabajo.
- IMAGE_URL por una referencia a la imagen de contenedor, como
us-docker.pkg.dev/cloudrun/container/job:latest
PATH
por la ruta de activación del volumen y el nombre de archivo del Secret Debe comenzar con una barra inicial, por ejemplo:/etc/secrets/dbconfig/password
, donde/etc/secrets/dbconfig/
es la ruta de activación del volumen ypassword
es el nombre del archivo del Secret.SECRET_NAME
por el nombre secreto en el mismo proyecto, p. ej.,mysecret
.VERSION
por la versión del Secret Usalatest
para la versión más reciente o un número, por ejemplo,2
.
Para actualizar un Secret en un trabajo existente, haz lo siguiente:
gcloud run jobs update JOB_NAME \ --update-secrets=PATH=SECRET_NAME:VERSION
YAML
Debido a las restricciones en torno a la compatibilidad de la API, las ubicaciones del secreto deben almacenarse en una anotación.
Descarga y visualiza la configuración del trabajo existente mediante el comando gcloud run jobs describe --format export
, que genera resultados limpios en formato YAML. Luego, modifica los campos que se describen a continuación y sube el YAML modificado mediante el comando gcloud run jobs replace
.
Asegúrate de modificar los campos tal como se indica en la documentación.
Para ver y descargar la configuración, ejecuta el siguiente comando:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Para los secretos expuestos como variables de entorno:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: spec: template: spec: containers: - env: - name: SECRET_NAME valueFrom: secretKeyRef: key: VERSION name: SECRET_LOOKUP_NAME image: IMAGE_URL
Reemplaza lo siguiente:
JOB
por el nombre de tu trabajo.- IMAGE_URL por una referencia a la imagen del contenedor, como
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. SECRET_NAME
por el nombre del secreto, p. ej.,mysecret
.VERSION
por la versión del Secret Usalatest
para la versión más reciente o un número, por ejemplo,2
.SECRET_LOOKUP_NAME
por cualquier nombre que tenga una sintaxis de nombre de secreto válida (p. ej.,my-secret
). Puede ser igual aSECRET_NAME
Para los secretos activados como rutas de acceso de archivo:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
Reemplaza lo siguiente:
JOB_NAME
por el nombre de tu trabajo.- IMAGE_URL por una referencia a la imagen del contenedor, como
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
por la ruta de activación del volumen y el nombre de archivo del Secret Debe comenzar con una barra inicial, por ejemplo:/etc/secrets/dbconfig/password
, donde/etc/secrets/dbconfig/
es la ruta de activación del volumen ypassword
es el nombre del archivo del Secret.PROJECT_NUMBER
por el número del proyecto en el que se creó el SecretSECRET_NAME
por el nombre del secreto, por ejemplo,mysecret
.VERSION
por la versión del Secret Usalatest
para la versión más reciente o un número, por ejemplo,2
.SECRET_LOOKUP_NAME
por cualquier nombre que tenga una sintaxis de nombre de secreto válida (p. ej.,my-secret
). Puede ser igual aSECRET_NAME
VOLUME_NAME
por cualquier nombre (p. ej.,my-volume
). Puede ser igual aSECRET_NAME
Haz referencia a Secrets de otros proyectos
Puedes hacer referencia a un secreto desde otro proyecto, si la cuenta de servicio de tu proyecto tiene permiso para acceder al Secret.
Consola
En la consola de Google Cloud, ve a la página de trabajos de Cloud Run:
Si quieres configurar un nuevo trabajo, haz clic en la pestaña Trabajos y completa la página de configuración de trabajo inicial como desees. Si quieres configurar un trabajo existente, haz clic en el trabajo y, luego, en Editar.
Haz clic en Contenedor, variables y secretos, conexiones y seguridad para expandir la página de propiedades del trabajo.
Haz clic en la pestaña Variables y Secrets.
- En la pestaña Variables y Secrets, haz lo siguiente:
- EnSecretos, clicAgrega una referencia secreta
- SeleccionarIngresar un secreto manualmente desdeSecretos lista desplegable para mostrar el siguiente formulario:
- En el formulario Agregar un Secret por ID de recurso, ingresa el Secret del otro proyecto, en el formato
projects/PROJECT_NUMBER/secrets/SECRET_NAME
. De manera alternativa, puedes copiar y pegar el ID de recurso del otro proyecto si tienes acceso a él. Para ello, selecciona el Secret y haz clic en los puntos suspensivos Actions a la derecha del secreto. Selecciona Copiar ID del recurso en el menú desplegable. - Haz clic en Agregar Secret.
- En el menú desplegable Reference Method (Método de referencia), selecciona la forma en la que deseas usar el Secret, activado como un volumen o expuesto como variables de entorno.
- Si activas el secreto como un volumen, haz lo siguiente:
- En Ruta de activación, especifica la ruta de activación que usas para los Secrets.
- De forma predeterminada, se selecciona la versión más reciente. Si lo deseas, puedes seleccionar una versión específica. En Rutas especificadas para las versiones de secretos, especifica la ruta a la versión y su número.
- Haga clic en Listo.
- Si deseas exponer el Secret como una variable de entorno, sigue estos pasos:
- Proporciona el Nombre de la variable y selecciona la versión del Secret, o la más reciente, para usar siempre la versión actual del Secret.
- Haga clic en Listo.
- En la pestaña Variables y Secrets, haz lo siguiente:
Haz clic en Crear o Actualizar.
Línea de comandos
Para activar el Secret como un volumen cuando se actualiza un trabajo, haz lo siguiente:
gcloud run jobs update JOB_NAME \ --image IMAGE_URL \ --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION
- JOB_NAME por el nombre de tu trabajo.
- IMAGE_URL por una referencia a la imagen del contenedor, como
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
por la ruta de activación del volumen y el nombre de archivo del Secret Debe comenzar con una barra inicial, por ejemplo:/etc/secrets/dbconfig/password
, donde/etc/secrets/dbconfig/
es la ruta de activación del volumen ypassword
es el nombre del archivo del Secret.PROJECT_NUMBER
por el número del proyecto en el que se creó el SecretSECRET_NAME
por el nombre del secreto, p. ej.,mysecret
.VERSION
por la versión del Secret Usalatest
para la versión más reciente o un número, por ejemplo,2
.
YAML
Descarga y visualiza la configuración del trabajo existente mediante el comando gcloud run jobs describe --format export
, que genera resultados limpios en formato YAML. Luego, modifica los campos que se describen a continuación y sube el YAML modificado mediante el comando gcloud run jobs replace
.
Asegúrate de modificar los campos tal como se indica en la documentación.
Para ver y descargar la configuración:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Debido a las restricciones en torno a la compatibilidad de la API, las ubicaciones del secreto deben almacenarse en una anotación.
Para los secretos expuestos como variables de entorno:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: template: spec: containers: - env: - name: SECRET_NAME valueFrom: secretKeyRef: key: VERSION name: SECRET_LOOKUP_NAME image: IMAGE_URL
Reemplaza lo siguiente:
JOB
por el nombre de tu trabajo.- IMAGE_URL por una referencia a la imagen del contenedor, como
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. SECRET_NAME
por el nombre del secreto, por ejemplo,mysecret
.VERSION
por la versión del Secret Usalatest
para la versión más reciente o un número, por ejemplo,2
.PROJECT_NUMBER
por el número del proyecto en el que se creó el SecretSECRET_LOOKUP_NAME
por cualquier nombre que tenga una sintaxis de nombre de secreto válida (p. ej.,my-secret
). Puede ser igual aSECRET_NAME
Para los secretos activados como rutas de acceso de archivo:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: metadata: annotations: run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME secret: items: - key: VERSION path: FILENAME secretName: SECRET_LOOKUP_NAME
Reemplaza lo siguiente:
JOB_NAME
por el nombre de tu trabajo.- IMAGE_URL por una referencia a la imagen del contenedor, como
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. PATH
por la ruta de activación del volumen y el nombre de archivo del Secret Debe comenzar con una barra inicial, por ejemplo:/etc/secrets/dbconfig/password
, donde/etc/secrets/dbconfig/
es la ruta de activación del volumen ypassword
es el nombre del archivo del Secret.PROJECT_NUMBER
por el número del proyecto en el que se creó el SecretSECRET_NAME
por el nombre del secreto, por ejemplo,mysecret
.VERSION
por la versión del Secret Usalatest
para la versión más reciente o un número, por ejemplo,2
.SECRET_LOOKUP_NAME
por cualquier nombre que tenga una sintaxis de nombre de secreto válida (p. ej.,my-secret
). Puede ser igual aSECRET_NAME
VOLUME_NAME
por cualquier nombre (p. ej.,my-volume
). Puede ser igual aSECRET_NAME
Visualiza la configuración de los Secrets
Para ver la configuración actual de los Secrets de tu trabajo de Cloud Run, sigue estos pasos:
Consola
En la consola de Google Cloud, ve a la página de trabajos de Cloud Run:
Haz clic en el trabajo que te interesa para abrir la página Detalles del trabajo.
Haz clic en la pestaña Configuración.
Ubica la configuración de secretos en los detalles de configuración.
Línea de comandos
Usa el siguiente comando:
gcloud run jobs describe JOB_NAME
Busca la configuración de Secrets en la configuración mostrada.
Rutas no permitidas y limitaciones
Cloud Run no te permite activar secretos en /dev
, /proc
y /sys
, ni en sus subdirectorios.
Si activas secretos en /tmp
y usas el entorno de ejecución de primera generación, consulta el problema conocido sobre activar secretos en /tmp
.
Cloud Run no te permite activar varios Secrets en la misma ruta porque dos activaciones de volumen no se pueden activar en la misma ubicación.
Anula un directorio
Si el Secret se activa como un volumen en Cloud Run y el último directorio en la ruta de activación de volumen ya existe, los archivos o carpetas del directorio existente se vuelven inaccesibles.
Por ejemplo, si se activa un secreto llamado my-secret
en la ruta de acceso
/etc/app_data
, se reemplazará todo el contenido dentro del
directorio app_data
. Para evitar reemplazar un directorio existente, proporciona una ruta que
cree un directorio nuevo, p. ej., /etc/app_data/secrets
. Esto creará una
ruta de activación /etc/app_data/secrets/my-secret
que contendrá el Secret.