Configurar secretos para grupos de trabajadores

Es posible que tu grupo de trabajadores necesite claves de API, contraseñas, certificados u otra información sensible para sus dependencias. En Cloud Run, Google recomienda almacenar esta información sensible en un secreto que crees en Secret Manager.

Puedes hacer que un secreto esté disponible para tus contenedores de una de las siguientes formas:

  • Cuando montas cada secreto como un volumen, Cloud Run hace que el secreto esté disponible para el contenedor como archivos. Al leer un volumen, Cloud Run siempre obtiene el valor del secreto de Secret Manager para usar el valor con la versión más reciente. Este método también funciona bien con la rotación de secretos.
  • Transfiere un secreto mediante variables de entorno. Las variables de entorno se resuelven en el momento de iniciar la instancia, por lo que, si utilizas este método, Google te recomienda que fijes el secreto a una versión concreta en lugar de usar latest como versión.

Para obtener más información, consulta las prácticas recomendadas de Secret Manager.

Cómo se comprueban los secretos en el momento de la implementación y durante el tiempo de ejecución

Durante la implementación del grupo de trabajadores, Cloud Run comprueba todos los secretos que utilizas. Esta comprobación asegura que la cuenta de servicio que ejecuta el contenedor tenga permiso para acceder a estos secretos.

Durante el tiempo de ejecución, cuando se inician las instancias:

  • Si el secreto es una variable de entorno, Cloud Run recupera el valor del secreto antes de iniciar la instancia. Si el proceso de recuperación de secretos falla, la instancia no se inicia.
  • Si montas el secreto como un volumen, Cloud Run no realizará ninguna comprobació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 montado fallarán.

Propiedad del volumen

La propiedad de un volumen secreto de Cloud Run varía en función del entorno de ejecución y del tipo de implementación.

Cuando montas un volumen secreto con el entorno de ejecución de segunda generación, que es siempre el caso del grupo de trabajadores, el propietario del volumen es root.

Antes de empezar

  1. Enable the Secret Manager API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  2. Usa un secreto que ya tengas o crea uno en Secret Manager, tal como se describe en el artículo Crear un secreto.

Roles obligatorios

Para obtener los permisos que necesitas para configurar secretos, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Para permitir que Cloud Run acceda al secreto, la identidad de servicio debe tener el siguiente rol:

Para obtener instrucciones sobre cómo añadir la identidad de servicio principal al rol Lector de recursos de Secret Manager, consulta el artículo Gestionar el acceso a los secretos.

Para ver una lista de los roles y permisos de gestión de identidades y accesos asociados a Cloud Run, consulta los artículos sobre roles de gestión de identidades y accesos de Cloud Run y permisos de gestión de identidades y accesos de Cloud Run. Si tu grupo de trabajadores de Cloud Run interactúa con APIs deGoogle Cloud , como las bibliotecas de cliente de Cloud, consulta la guía de configuración de identidades de servicio. Para obtener más información sobre cómo conceder roles, consulta los artículos sobre permisos de implementación y gestión del acceso.

Hacer que un secreto sea accesible para Cloud Run

Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.

Puedes hacer que un secreto sea accesible para tu grupo de trabajadores mediante la Google Cloud consola o la CLI de Google Cloud cuando despliegues un nuevo grupo de trabajadores o actualices uno que ya tengas, y despliegues una revisión. Haga clic en la pestaña que quiera:

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Selecciona Grupos de trabajadores en el menú y haz clic en Implementar contenedor para configurar un nuevo grupo de trabajadores. Rellena la página de configuración inicial del grupo de trabajadores y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración.

  3. Si vas a configurar un grupo de trabajadores que ya existe, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.

  4. Sigue los pasos para montar el secreto como un volumen o exponerlo como una variable de entorno.

    • Para exponer el secreto como una variable de entorno, sigue estos pasos:

      1. Haz clic en la pestaña Contenedores.
      2. En la pestaña Variables y secretos, haga clic en Hacer referencia a un secreto.
      3. En el campo Nombre 1, introduce el nombre de la variable de entorno.
      4. En la lista Secreto, selecciona el secreto que quieras usar.
      5. En la lista Versión 1, selecciona la versión del secreto al que quieras hacer referencia.
      6. Haz clic en Listo.
      7. Haz clic en Crear o en Implementar.
    • Para montar un secreto como volumen, sigue estos pasos:

      1. Haz clic en la pestaña Volúmenes y selecciona Añadir volumen.
      2. En la lista Tipo de volumen, selecciona Secreto.
      3. En el campo Nombre del volumen, introduce un nombre o acepta el predeterminado.
      4. En la lista Secreto, selecciona el secreto que quieras usar.
      5. En el campo Ruta 1, introduce el nombre del archivo que quieras montar.
      6. En la lista Versión 1, selecciona la versión del secreto al que quieras hacer referencia. De forma predeterminada, se selecciona la versión más reciente. Puedes seleccionar una versión específica si quieres.
      7. Haz clic en Listo.
      8. Vaya a la pestaña Contenedores para montar su secreto en el contenedor.
      9. En la pestaña Volúmenes montados, haz clic en Montar volumen.
      10. En la lista Nombre 1, selecciona el nombre del volumen.
      11. En el campo Ruta de montaje 1, introduce la ruta de montaje de este secreto. Este es el directorio en el que se colocan todas las versiones de tu secreto.
      12. Haz clic en Listo.
      13. Haz clic en Crear o en Implementar.

gcloud

  • Para exponer el secreto como una variable de entorno al implementar un grupo de trabajadores, ejecuta el siguiente comando:

    gcloud beta run worker-pools deploy WORKER_POOL \
    --image IMAGE_URL \
    --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION

    Haz los cambios siguientes:

    • WORKER_POOL: el nombre del grupo de trabajadores.
    • IMAGE_URL: referencia a la imagen del contenedor que contiene el grupo de trabajadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
    • ENV_VAR_NAME: el nombre de la variable de entorno que quieras usar con el secreto.
    • SECRET_NAME: el nombre del secreto en el mismo proyecto, por ejemplo, mysecret.
    • VERSION: la versión del secreto. Usa latest para obtener la versión más reciente o un número (por ejemplo, 2).
  • Para actualizar varios secretos al mismo tiempo, separa las opciones de configuración de cada secreto con una coma. El siguiente comando actualiza un secreto montado como volumen y otro secreto expuesto como variable de entorno. Para actualizar los secretos, ejecuta el siguiente comando:

    gcloud beta run worker-pools deploy WORKER_POOL \
    --image IMAGE_URL \
    --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
  • Para borrar los secretos y hacer que un nuevo secreto sea accesible para el grupo de trabajadores, usa la marca --set-secrets:

    gcloud beta run worker-pools update WORKER_POOL \
    --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"

Hacer referencia a secretos de otros proyectos

Para hacer referencia a un secreto de otro proyecto, comprueba que la cuenta del grupo de trabajadores de tu proyecto tenga acceso al secreto.

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Selecciona Grupos de trabajadores en el menú y haz clic en Implementar contenedor para configurar un nuevo grupo de trabajadores. Rellena la página de configuración inicial del grupo de trabajadores y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración.

  3. Si vas a configurar un grupo de trabajadores que ya existe, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.

  4. Sigue los pasos para montar el secreto como un volumen o exponerlo como una variable de entorno.

    • Para exponer el secreto como una variable de entorno, sigue estos pasos:

      1. Haz clic en la pestaña Contenedores.
      2. En la pestaña Variables y secretos, haga clic en Hacer referencia a un secreto.
      3. En el campo Nombre 1, introduce el nombre de la variable de entorno.
      4. En la lista Secreto, haz clic en Introducir secreto manualmente.
      5. Introduce el ID de recurso del secreto con el siguiente formato:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

        Haz los cambios siguientes:

        • PROJECT_NUMBER con el número de tu proyecto Google Cloud . Para obtener instrucciones detalladas sobre cómo encontrar el número de tu proyecto, consulta el artículo Crea y gestiona proyectos.

        • SECRET_NAME: nombre del secreto en Secret Manager.

      6. En la lista Versión 1, selecciona la versión del secreto al que quieras hacer referencia.

      7. Haz clic en Listo.

      8. Haz clic en Crear o en Implementar.

    • Para montar un secreto como volumen, sigue estos pasos:

      1. Haz clic en la pestaña Volúmenes y selecciona Añadir volumen.
      2. En la lista Tipo de volumen, selecciona Secreto.
      3. En el campo Nombre del volumen, introduce un nombre o acepta el predeterminado.
      4. En la lista Secreto, haz clic en Introducir secreto manualmente.
      5. Introduce el ID de recurso del secreto con el siguiente formato:

        projects/PROJECT_NUMBER/secrets/SECRET_NAME
        

        Haz los cambios siguientes:

        • PROJECT_NUMBER con el número de tu proyecto Google Cloud . Para obtener instrucciones detalladas sobre cómo encontrar el número de tu proyecto, consulta el artículo Crea y gestiona proyectos.

        • SECRET_NAME: nombre del secreto en Secret Manager.

      6. En el campo Ruta 1, introduce el nombre del archivo que quieras montar.

      7. En la lista Versión 1, selecciona la versión del secreto al que quieras hacer referencia. De forma predeterminada, se selecciona la versión más reciente. Puedes seleccionar una versión específica si quieres.

      8. Haz clic en Listo.

      9. Vaya a la pestaña Contenedores para montar su secreto en el contenedor.

      10. En la pestaña Volúmenes montados, haz clic en Montar volumen.

      11. En la lista Nombre 1, selecciona el nombre del volumen.

      12. En el campo Ruta de montaje 1, introduce la ruta de montaje de este secreto. Este es el directorio en el que se colocan todas las versiones de tu secreto.

      13. Haz clic en Listo.

      14. Haz clic en Crear o en Implementar.

gcloud

Para hacer referencia a un secreto como variable de entorno, ejecuta el siguiente comando:

gcloud beta run worker-pools deploy WORKER_POOL \
--image IMAGE_URL \
--update-secrets=ENV_VAR_NAME=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION

Haz los cambios siguientes:

  • WORKER_POOL: el nombre del grupo de trabajadores.
  • IMAGE_URL: referencia a la imagen del contenedor que contiene el grupo de trabajadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • PROJECT_NUMBER con el número del proyecto en el que se creó el secreto.
  • SECRET_NAME: el nombre del secreto (por ejemplo, mysecret).
  • VERSION con la versión del secreto. Usa latest para obtener la versión más reciente o un número (por ejemplo, 2).

Ver ajustes de secretos

Para ver la configuración actual de secretos de tu grupo de trabajadores de Cloud Run, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página de grupos de trabajadores de Cloud Run:

    Ir a los grupos de trabajadores de Cloud Run

  2. Haz clic en el grupo de trabajadores que te interese para abrir la página Detalles del grupo de trabajadores.

  3. Haz clic en Editar y desplegar nueva revisión.

  4. Busca el ajuste de secretos en los detalles de la configuración.

gcloud

  1. Usa el siguiente comando:

    gcloud beta run worker-pools describe WORKER_POOL
  2. Localiza el ajuste de secretos en la configuración devuelta.

Quitar secretos de un grupo de trabajadores

Puedes quitar secretos de un grupo de trabajadores mediante la Google Cloud consola o la CLI de gcloud:

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Selecciona tu grupo de trabajadores en la lista y haz clic en Editar y desplegar nueva revisión.

  3. Haz clic en la pestaña Contenedores.

  4. Para eliminar secretos montados como un volumen, selecciona la pestaña Montajes de volumen, coloca el puntero sobre el secreto que quieras eliminar y haz clic en Eliminar.

  5. Para eliminar los secretos expuestos como variables de entorno, selecciona la pestaña Variables y secretos, coloca el puntero sobre el secreto que quieras eliminar y haz clic en Eliminar.

  6. Haz clic en Desplegar.

gcloud

Puedes quitar todos los secretos de un grupo de trabajadores o especificar uno o varios secretos que quieras quitar:

  • Para eliminar todos los secretos, ejecuta el siguiente comando:
  gcloud beta run worker-pools deploy WORKER_POOL --image IMAGE_URL \
  --clear-secrets

Haz los cambios siguientes:

  • WORKER_POOL: el nombre del grupo de trabajadores.
  • IMAGE_URL: referencia a la imagen del contenedor que contiene el grupo de trabajadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.

  • Para especificar una lista de secretos que quieras eliminar, usa la marca --remove-secrets. El siguiente comando elimina un secreto montado como un volumen y otro secreto expuesto como una variable de entorno:

  gcloud beta run worker-pools deploy WORKER_POOL --image IMAGE_URL \
  --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH

Haz los cambios siguientes:

  • WORKER_POOL: el nombre del grupo de trabajadores.
  • IMAGE_URL: referencia a la imagen del contenedor que contiene el grupo de trabajadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • ENV_VAR_NAME: el nombre de la variable de entorno.
  • SECRET_FILE_PATH: la ruta completa del secreto. Por ejemplo, /mnt/secrets/primary/latest, donde /mnt/secrets/primary/ es la ruta de montaje y latest es la ruta secreta. También puedes especificar las rutas de montaje y de secreto por separado:

    --set-secrets MOUNT_PATH:SECRET_PATH=SECRET:VERSION

Usar secretos en el código

Para ver ejemplos de cómo acceder a secretos en tu código como variables de entorno, consulta el tutorial sobre la autenticación de usuarios finales, en concreto la sección Gestionar configuraciones sensibles con Secret Manager.

Rutas no permitidas y limitaciones

Se aplican las siguientes limitaciones al montar secretos:

  • Cloud Run no te permite montar secretos en /dev, /proc ni /sys, ni en sus subdirectorios.
  • Cloud Run no permite montar varios secretos en la misma ruta, ya que no se pueden montar dos volúmenes en la misma ubicación.

Anular un directorio

Si el secreto se monta como un volumen en Cloud Run y ya existe el último directorio de la ruta de montaje del volumen, no se podrá acceder a ningún archivo ni carpeta del directorio.

Por ejemplo, si se monta un secreto llamado my-secret en la ruta /etc/app_data, se sobrescribirá todo el contenido del directorio app_data y el único archivo visible será /etc/app_data/my-secret.

Para evitar que se sobrescriban archivos en un directorio, crea un directorio para montar el secreto (por ejemplo, /etc/app_data/secrets) de forma que la ruta de montaje del secreto sea /etc/app_data/secrets/my-secret.