Configurar secretos para servicios

Es posible que tu servicio tenga dependencias que requieran claves de API, contraseñas, certificados u otra información sensible. En Cloud Run, Google recomienda que almacenes este tipo de información sensible en un secreto creado en Secret Manager.

Puedes hacer que un secreto esté disponible para tus contenedores de dos formas:

  • Monta cada secreto como un volumen, lo que hace que el secreto esté disponible para el contenedor como archivos. Al leer un volumen, siempre se obtiene el valor del secreto de Secret Manager, por lo que se puede usar con la versión latest. 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 cuando se inicia la instancia, por lo que, si usas este método, Google te recomienda que fijes el secreto a una versión concreta en lugar de usar latest.

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

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

Durante la implementación del servicio, se comprueban todos los secretos utilizados, ya sea como variable de entorno o montados como un volumen, para asegurarse de que la cuenta de servicio utilizada para ejecutar el contenedor tenga acceso a ellos. Si falla alguna comprobación, el despliegue del servicio no se realizará.

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 no se puede recuperar, la instancia no se inicia.
  • Si el secreto se monta como un volumen, no se realiza 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.

La propiedad del volumen varía según el entorno de ejecución y el tipo de implementación

Cuando montas un volumen de secretos, la identidad propietaria de los archivos y directorios varía en función del entorno de ejecución de la carga de trabajo y de si la implementación consta de uno o varios contenedores.

En el entorno de ejecución de primera generación en el que se implementa un solo contenedor, el volumen secreto es propiedad de la identidad utilizada para el contenedor. En todos los demás casos, el volumen es propiedad de root. Entre los datos que recoge se incluyen los siguientes:

  • Entorno de ejecución de primera generación en el que se implementan varios contenedores
  • Entorno de segunda generación

Antes de empezar

  1. Enable the Secret Manager API.

    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 al rol Permiso para acceder a los 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 servicio de Cloud Run interactúa con APIs, como las bibliotecas de cliente de Cloud, consulta la guía de configuración de la identidad del servicio.Google Cloud 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 servicio mediante la Google Cloud consola, la CLI de Google Cloud o un archivo YAML cuando despliegues un servicio nuevo 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 Servicios en el menú y haz clic en Implementar contenedor para configurar un nuevo servicio. Rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.

  3. Si vas a configurar un servicio que ya tienes, haz clic en él y, luego, 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. Si quieres, puedes seleccionar una versión específica.
      7. Haz clic en Listo.
      8. Vaya a la pestaña Contenedor(es) para montar su secreto en el contenedor.
      9. En la pestaña Montajes de volumen, 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 que tu servicio pueda acceder a un secreto, introduce uno de los siguientes comandos.

  • Para montar el secreto como volumen al desplegar un servicio, sigue estos pasos:

    gcloud run deploy SERVICE --image IMAGE_URL  \
    --update-secrets=PATH=SECRET_NAME:VERSION

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH: la ruta de montaje del volumen y el nombre de archivo del secreto. Debe empezar por una barra diagonal. Por ejemplo: /etc/secrets/dbconfig/password, donde /etc/secrets/dbconfig/ es la ruta de montaje del volumen y password es el nombre de archivo del 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 exponer el secreto como una variable de entorno al implementar un servicio, sigue estos pasos:

    gcloud run deploy SERVICE \
    --image IMAGE_URL \
    --update-secrets=ENV_VAR_NAME=SECRET_NAME:VERSION

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • 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).
  • Puedes actualizar varios secretos a la vez. Para ello, 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, introduce el siguiente comando:

    gcloud run deploy SERVICE --image IMAGE_URL \
    --update-secrets=PATH=SECRET_NAME:VERSION,ENV_VAR_NAME=SECRET_NAME:VERSION
  • Para borrar los secretos actuales y hacer que un nuevo secreto sea accesible para el servicio, usa la marca --set-secrets:

    gcloud run services update SERVICE \
    --set-secrets="ENV_VAR_NAME=SECRET_NAME:VERSION"

YAML

  1. Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. En el caso de los secretos expuestos como variables de entorno, en env, actualiza ENV_VAR, VERSION y/o SECRET_NAME según tus preferencias. Si tienes varios secretos montados como variables de entorno, tendrás varios de estos atributos.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            env:
            - name: ENV_VAR
              valueFrom:
                secretKeyRef:
                  key: VERSION
                  name: SECRET_NAME
  3. En el caso de los secretos montados como rutas de archivo, actualiza MOUNT_PATH, VOLUME_NAME, VERSION, FILENAME o SECRET_NAME según sea necesario. Si tienes varios secretos montados como rutas de archivo, tendrás varios de estos atributos.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: MOUNT_PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            secret:
              items:
              - key: VERSION
                path: FILENAME
              secretName: SECRET_NAME

    Ten en cuenta que VOLUME_NAME puede tener cualquier nombre.

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio de Cloud Run.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • REVISION con un nuevo nombre de revisión o elimínelo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir los siguientes criterios:
      • Empieza por SERVICE-
      • Contiene solo letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
  4. Sustituye el servicio por su nueva configuración con el siguiente comando:

    gcloud run services replace service.yaml

Terraform

  1. Crea un secreto y una versión del secreto.

    resource "google_secret_manager_secret" "default" {
      secret_id = "my-secret"
      replication {
        auto {}
      }
    }
    
    resource "google_secret_manager_secret_version" "default" {
      secret      = google_secret_manager_secret.default.name
      secret_data = "this is secret data"
    }
  2. Crea una cuenta de servicio y concédele acceso al secreto:

    resource "google_service_account" "default" {
      account_id   = "cloud-run-service-account"
      display_name = "Service account for Cloud Run"
    }
    
    resource "google_secret_manager_secret_iam_member" "default" {
      secret_id = google_secret_manager_secret.default.id
      role      = "roles/secretmanager.secretAccessor"
      # Grant the new deployed service account access to this secret.
      member     = "serviceAccount:${google_service_account.default.email}"
      depends_on = [google_secret_manager_secret.default]
    }
  3. Se puede acceder a los secretos de Secret Manager desde Cloud Run como rutas de archivos montadas o como variables de entorno.

    1. En el caso de los secretos montados como rutas de archivo, haz referencia al recurso de Secret Manager en el parámetro volumes. El name se corresponde con una entrada del parámetro volume_mounts:

      resource "google_cloud_run_v2_service" "mounted_secret" {
        name     = "service-with-mounted-secret"
        location = "us-central1"
        ingress  = "INGRESS_TRAFFIC_ALL"
      
        deletion_protection = false # set to "true" in production
      
        template {
          volumes {
            name = "my-service-volume"
            secret {
              secret = google_secret_manager_secret.default.secret_id
              items {
                version = "latest"
                path    = "my-secret"
                mode    = 0 # use default 0444
              }
            }
          }
          containers {
            image = "us-docker.pkg.dev/cloudrun/container/hello"
            volume_mounts {
              name       = "my-service-volume"
              mount_path = "/secrets"
            }
          }
          service_account = google_service_account.default.email
        }
        depends_on = [google_secret_manager_secret_version.default]
      }
    2. En el caso de los secretos expuestos como variables de entorno, haz referencia al recurso de Secret Manager en el parámetro env:

      resource "google_cloud_run_v2_service" "env_variable_secret" {
        name     = "service-with-env-var-secret"
        location = "us-central1"
        ingress  = "INGRESS_TRAFFIC_ALL"
      
        deletion_protection = false # set to "true" in production
      
        template {
          containers {
            image = "us-docker.pkg.dev/cloudrun/container/hello"
            env {
              name = "MY_SECRET"
              value_source {
                secret_key_ref {
                  secret  = google_secret_manager_secret.default.secret_id
                  version = "latest"
                }
              }
            }
          }
          service_account = google_service_account.default.email
        }
        depends_on = [google_secret_manager_secret_version.default]
      }

Hacer referencia a secretos de otros proyectos

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

Consola

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

    Ir a Cloud Run

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

  3. Si vas a configurar un servicio que ya tienes, haz clic en él y, luego, 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. Si quieres, puedes seleccionar una versión específica.

      8. Haz clic en Listo.

      9. Vaya a la pestaña Contenedor(es) para montar su secreto en el contenedor.

      10. En la pestaña Montajes de volumen, 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 montar un secreto como volumen al desplegar un servicio, sigue estos pasos:

    gcloud run deploy SERVICE --image IMAGE_URL  \
    --update-secrets=PATH=projects/PROJECT_NUMBER/secrets/SECRET_NAME:VERSION

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • PATH: la ruta de montaje del volumen y el nombre de archivo del secreto. Debe empezar por una barra diagonal. Por ejemplo: /etc/secrets/dbconfig/password, donde /etc/secrets/dbconfig/ es la ruta de montaje del volumen y password es el nombre de archivo del secreto.
    • 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).

YAML

  1. Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

    gcloud run services describe SERVICE --format export > service.yaml

Debido a las restricciones relacionadas con la compatibilidad de las APIs, las ubicaciones de los secretos deben almacenarse en una anotación.

  1. En el caso de los secretos expuestos como variables de entorno:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        spec:
          containers:
          - image: IMAGE_URL
            env:
            - name: ENV_VAR
              valueFrom:
                secretKeyRef:
                  key: VERSION
                  name: SECRET_LOOKUP_NAME

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • ENV_VAR
    • PROJECT_NUMBER: el número del proyecto en el que se creó el secreto.
    • SECRET_NAME: el nombre del secreto (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).
    • SECRET_LOOKUP_NAME: cualquier nombre que tenga una sintaxis de nombre de secreto válida. Por ejemplo, my-secret puede ser el mismo que SECRET_NAME.
  2. En el caso de los secretos montados como rutas de archivos:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/secrets: SECRET_LOOKUP_NAME:projects/PROJECT_NUMBER/secrets/SECRET_NAME
        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

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • PATH: la ruta de montaje del volumen y el nombre de archivo del secreto. Debe empezar por una barra diagonal. Por ejemplo: /etc/secrets/dbconfig/password, donde /etc/secrets/dbconfig/ es la ruta de montaje del volumen y password es el nombre de archivo del secreto.
    • PROJECT_NUMBER: el número del proyecto en el que se creó el secreto.
    • SECRET_NAME: el nombre del secreto (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).
    • SECRET_LOOKUP_NAME: cualquier nombre que tenga una sintaxis de nombre de secreto válida. Por ejemplo, my-secret puede ser el mismo que SECRET_NAME.
    • VOLUME_NAME: cualquier nombre, por ejemplo, my-volume. Puede ser el mismo que SECRET_NAME.

Terraform

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

Añade lo siguiente a un recurso google_cloud_run_v2_service en tu configuración de Terraform:

Para los secretos expuestos como variables de entorno:

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
      env {
        name = "SECRET_NAME"
        value_source {
          secret_key_ref {
            secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
            version = "VERSION"
          }
        }
      }
    }
  }
}

Haz los cambios siguientes:

  • SERVICE_NAME: el nombre de tu tarea de Cloud Run.
  • REGION: la Google Cloud región. Por ejemplo, europe-west1.
  • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • SECRET_NAME: el nombre del secreto (por ejemplo, mysecret).
  • PROJECT_ID: el ID del proyecto en el que se creó el secreto.
  • VERSION: la versión del secreto. Usa latest para la versión más reciente o un número (por ejemplo, 2).

Para los secretos montados como rutas de archivo:

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"

      volume_mounts {
        name       = "VOLUME_NAME"
        mount_path = "MOUNT_PATH"
      }
    }

    volumes {
      name = "VOLUME_NAME"
      secret {
        secret = "projects/PROJECT_ID/secrets/SECRET_NAME"
      }
    }
  }
}

Haz los cambios siguientes:

  • SERVICE_NAME: el nombre de tu tarea de Cloud Run.
  • REGION con la región Google Cloud . Por ejemplo, europe-west1.
  • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • VOLUME_NAME: cualquier nombre (por ejemplo, my-volume). Puede ser el mismo que SECRET_NAME.
  • MOUNT_PATH: la ruta de montaje del volumen y el nombre de archivo del secreto. Debe empezar por una barra diagonal. Por ejemplo: /etc/secrets/dbconfig/password, donde /etc/secrets/dbconfig/ es la ruta de montaje del volumen y password es el nombre de archivo del secreto.
  • PROJECT_ID: el ID del proyecto en el que se creó el secreto.
  • SECRET_NAME: el nombre del secreto (por ejemplo, mysecret).

Ver ajustes de secretos

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

Consola

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

    Ir a Cloud Run

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

  3. Haz clic en la pestaña Revisiones.

  4. En el panel de detalles de la derecha, el ajuste de secretos se encuentra en la pestaña Contenedor.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Localiza el ajuste de secretos en la configuración devuelta.

Eliminar secretos de un servicio

Puedes quitar secretos de un servicio 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 servicio 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 servicio o especificar uno o varios secretos que quieras quitar:

  • Para eliminar todos los secretos, ejecuta el siguiente comando:

    gcloud run deploy SERVICE --image IMAGE_URL \
    --clear-secrets
    

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • 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 run deploy SERVICE --image IMAGE_URL \
    --remove-secrets=ENV_VAR_NAME,SECRET_FILE_PATH
    

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio.
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • 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 autenticación de usuarios finales, en concreto la sección Gestionar configuraciones sensibles con Secret Manager.

Rutas no permitidas y limitaciones

Cloud Run no te permite montar secretos en /dev, /proc y /sys, ni en sus subdirectorios.

Si estás montando secretos en /tmp y usas el entorno de ejecución de primera generación, consulta el problema conocido sobre montar secretos en /tmp.

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.