Configura secretos (1ª gen.)

Puedes usar Secret Manager para almacenar de forma segura claves de API, contraseñas y otra información sensible. En esta guía, se muestra cómo configurar Cloud Run Functions para acceder a secretos almacenados en Secret Manager.

En este documento, se describen las dos formas de hacer que un secreto esté disponible para tu función:

  • Activa el secreto como un volumen. Esto hace que esté disponible para la función como un archivo. Si haces referencia a un secreto como un volumen, la función accede al valor desde Secret Manager cada vez que el archivo se lee desde el disco. Esto hace que la activación como un volumen sea una buena estrategia si deseas hacer referencia a la última versión del secreto en lugar de a una versión fijada. Este método también funciona bien si planeas implementar la rotación de secretos.

  • Pasa el secreto como una variable de entorno. Los valores de las variables de entorno se resuelven en el momento del inicio de la instancia. Por esto, si usas este método, te recomendamos que hagas referencia a una versión fijada del secreto en lugar de la última versión.

Para obtener más información sobre cómo usar Secret Manager, consulta la descripción general de Secret Manager. Para obtener información sobre cómo crear secretos y acceder a ellos, consulta Crea un secreto.

Antes de comenzar

  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. Si aún no lo hiciste, crea un secreto en Secret Manager, como se describe en Crea un secreto.

Otorga acceso a secretos

Tu función puede acceder a los secretos que estén en el mismo proyecto que la función y a los que pertenezcan a otro proyecto. Para acceder a un secreto, la cuenta de servicio del entorno de ejecución de la función debe tener acceso a este.

De forma predeterminada, Cloud Run Functions usa la cuenta de servicio predeterminada de App Engine para autenticarse con Secret Manager. Para la producción, Google recomienda que configures tu función para realizar la autenticación con una cuenta de servicio administrada por el usuario que tenga asignada el conjunto de roles menos permisivos necesario para lograr las tareas de tu función.

Para usar Secret Manager con Cloud Run Functions, asigna el rol roles/secretmanager.secretAccessor a la cuenta de servicio asociada con tu función:

  1. Ve a la página Secret Manager en la consola de Google Cloud :
    Ir a Secret Manager

  2. Haz clic en la casilla de verificación junto al secreto.

  3. Si aún no está abierto, haz clic en Mostrar panel de información para abrir el panel.

  4. En el panel de información, haz clic en Agregar principal.

  5. En el campo Principales nuevas, ingresa la cuenta de servicio que tu función usa para su identidad. La cuenta de servicio de la función es una de las siguientes opciones:

  6. En el menú desplegable Seleccionar un rol, elige Secret Manager y, luego, Usuario con acceso a secretos de Secret Manager.

Prepara la función para acceder a los secretos

Hay dos formas de hacer que un secreto esté disponible para tu función:

  • Pasa el secreto como una variable de entorno.
  • Activa el secreto como un volumen.

Variables de entorno

Para usar variables de entorno y que los secretos estén disponibles para tu función, sigue estos pasos:

  1. Configura una variable de entorno de entorno de ejecución durante la implementación de la función.
  2. Haz que el secreto sea accesible para tu función en una variable de entorno.
  3. Accede a la variable de entorno de manera programática en el entorno de ejecución.

Activa el secreto como un volumen

Activa un secreto como volumen:

  1. Crea un archivo que contenga el secreto.

  2. Elige un directorio sin usar que no sea del sistema, como /mnt/secrets, como la ruta de activación del secreto. Cualquier archivo o subdirectorio preexistente en ese directorio que no sea el secreto y sus versiones se vuelven inaccesibles una vez que este se activa.

  3. Haz que el secreto sea accesible para tu función como un volumen activado.

  4. En el entorno de ejecución, lee el contenido del archivo de manera programática para acceder al valor del secreto.

Por ejemplo, si el secreto se activó en /mnt/secrets/secret1, la función debe leer este archivo. A continuación, te mostramos un ejemplo de cómo puedes leer el archivo de forma síncrona con Node.js:

fs.readFileSync('/mnt/secrets/secret1')

Haz que un secreto esté disponible para una función

Para hacer referencia al secreto de una función, primero debes hacer que este sea accesible para la función. Puedes hacer que un secreto sea accesible para funciones nuevas o existentes con la consola de Google Cloud o la Google Cloud CLI:

Consola

Para que un secreto sea accesible para una función, sigue estos pasos:

  1. Ve a la página de Cloud Run Functions en la consola de Google Cloud :
    Ir a la página de Cloud Run Functions

  2. Haz clic en el nombre de la función a la que deseas acceder con el secreto.

  3. Haz clic en Editar.

  4. Haz clic en Configuración del entorno de ejecución, la compilación… para expandir las opciones de configuración avanzada.

  5. Haz clic en Seguridad y repositorio de imágenes para abrir la pestaña.

  6. Haz clic en Agregar referencia de Secret para establecer un secreto en la función.

  7. Selecciona el secreto que quieres hacer accesible. Si es necesario, crea un secreto.

    • Para hacer referencia a un secreto en el mismo proyecto que tu función, ejecuta el siguiente comando:

      1. Selecciona el mensaje de la lista desplegable.
    • Para hacer referencia a un secreto de otro proyecto:

      1. Verifica que la cuenta de servicio de tu proyecto tenga acceso al secreto.

      2. Selecciona Ingresar un secreto manualmente.

      3. Ingresa el ID de recurso del secreto en el siguiente formato:

        projects/PROJECT_ID/secrets/SECRET_NAME

        Reemplaza lo siguiente:

        • PROJECT_ID: Es el ID del proyecto en el que reside el secreto.

        • SECRET_NAME: Es el nombre del secreto en Secret Manager.

  8. Selecciona el método de referencia del secreto. Puedes activar el secreto como un volumen o exponerlo como una variable de entorno.

    • Para activar el secreto como un volumen, sigue estos pasos:

      1. Selecciona Activado como volumen.

      2. En el campo Ruta de activación, ingresa la ruta de activación para este secreto. Este es el directorio en el que se encuentran todas las versiones de tu secreto.

      3. En el campo Ruta 1, ingresa el nombre del archivo que deseas activar. Este nombre se concatena con la ruta de activación del paso anterior para formar la ruta de activación completa en la que está activado tu secreto.

      4. En el menú desplegable Versión 1, selecciona la versión del secreto al que deseas hacer referencia.

      5. Puedes activar versiones adicionales de este secreto; para ello, haz clic en +Agregar para definir las rutas adicionales y las versiones de este secreto que se activarán en ellas.

    • Para exponer el secreto como una variable de entorno, haz lo siguiente:

      1. Selecciona Expuesto como variable de entorno.

      2. En el campo Nombre 1, ingresa el nombre de la variable de entorno.

      3. En el menú desplegable Versión 1, selecciona la versión del secreto al que deseas hacer referencia.

      4. Puedes exponer versiones adicionales de este secreto a tu función; para ello, haz clic en +Agregar para definir variables de entorno adicionales y las versiones de este secreto para almacenarlas en ellas.

  9. Haz clic en Listo.

  10. Haz clic en Siguiente.

  11. Haz clic en Implementar.

El código de tu función ahora puede hacer referencia al secreto.

gcloud

Para que un secreto sea accesible para una función, ingresa uno de los siguientes comandos.

  • Para activar el secreto como un volumen, ingresa el siguiente comando:

    gcloud functions deploy FUNCTION_NAME \
    --no-gen2 \
    --runtime RUNTIME \
    --set-secrets 'SECRET_FILE_PATH=SECRET:VERSION'
    

    Reemplaza lo siguiente:

    • FUNCTION_NAME: Es el nombre de la función.

    • RUNTIME: Es el entorno de ejecución en el que se ejecutará la función.

    • SECRET_FILE_PATH: Es la ruta completa del secreto. Por ejemplo, /mnt/secrets/primary/latest, en el que /mnt/secrets/primary/ es la ruta de activación y latest es la ruta del secreto. También puedes especificar las rutas de activación y del secreto por separado:

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

    • SECRET: Es el nombre del secreto en Secret Manager.

    • VERSION: Es la versión del secreto que se usará. Por ejemplo, 1 o latest.

    La marca --set-secrets anula los secretos existentes. Para conservar los secretos existentes de la función, usa la marca --update-secrets en su lugar.

  • Para exponer el secreto como una variable de entorno, ingresa el siguiente comando:

    gcloud functions deploy FUNCTION_NAME \
    --no-gen2 \
    --runtime RUNTIME \
    --set-secrets 'ENV_VAR_NAME=SECRET:VERSION'
    

    Reemplaza lo siguiente:

    • FUNCTION_NAME: Es el nombre de la función.

    • RUNTIME: Es el entorno de ejecución en el que se ejecutará la función.

    • ENV_VAR_NAME: Es el nombre de la variable de entorno.

    • SECRET: Es el nombre del secreto en Secret Manager.

    • VERSION: Es la versión del secreto que se usará. Por ejemplo, 1 o latest.

    La marca --set-secrets anula los secretos existentes. Para conservar los secretos existentes de la función, usa la marca --update-secrets en su lugar.

  • Puedes hacer referencia a un secreto de otro proyecto si se le otorgó acceso a este a la cuenta de servicio de la función. Para hacer referencia a un secreto de otro proyecto, usa la ruta del recurso del secreto:

    gcloud functions deploy FUNCTION_NAME \
    --no-gen2 \
    --runtime RUNTIME \
    --update-secrets 'SECRET_FILE_PATH=SECRET_RESOURCE_PATH:VERSION'
    

    Reemplaza lo siguiente:

    • FUNCTION_NAME: Es el nombre de la función.

    • SECRET_RESOURCE_PATH: Es la ruta del recurso del secreto que reside en otro proyecto. La ruta del recurso usa el siguiente formato:

      projects/PROJECT_ID/secrets/SECRET_NAME

      Reemplaza lo siguiente:

      • PROJECT_ID: Es el ID del proyecto en el que reside el secreto.

      • SECRET_NAME: Es el nombre del secreto en Secret Manager.

    • RUNTIME: Es el entorno de ejecución en el que se ejecutará la función.

    • SECRET_FILE_PATH: Es la ruta completa del secreto. Por ejemplo, /mnt/secrets/primary/latest, en el que /mnt/secrets/primary/ es la ruta de activación y latest es la ruta del secreto. También puedes especificar las rutas de activación y del secreto por separado:

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

    • SECRET: Es el nombre del secreto en Secret Manager.

    • VERSION: Es la versión del secreto que se usará. Por ejemplo, 1 o latest.

  • Puedes actualizar varios secretos a la vez. Separa las opciones de configuración para cada uno con una coma. Con el siguiente comando, se actualiza un secreto activado como un volumen y otro expuesto como una variable de entorno.

    Para actualizar los secretos existentes, ingresa el siguiente comando:

    gcloud functions deploy FUNCTION_NAME \
    --no-gen2 \
    --runtime RUNTIME \
    --update-secrets 'ENV_VAR_NAME=SECRET:VERSION, \
    SECRET_FILE_PATH=SECRET:VERSION'
    

    Reemplaza lo siguiente:

    • FUNCTION_NAME: Es el nombre de la función.

    • RUNTIME: Es el entorno de ejecución en el que se ejecutará la función.

    • ENV_VAR_NAME: Es el nombre de la variable de entorno.

    • SECRET: Es el nombre del secreto en Secret Manager.

    • VERSION: Es la versión del secreto que se usará. Por ejemplo, 1 o latest.

    • SECRET_FILE_PATH: Es la ruta completa del secreto. Por ejemplo, /mnt/secrets/primary/latest, en el que /mnt/secrets/primary/ es la ruta de activación y latest es la ruta del secreto. También puedes especificar las rutas de activación y del secreto por separado:

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

Quita los secretos de una función

Puedes quitar secretos de una función con la consola de Google Cloud o la gcloud CLI:

Consola

  1. Ve a la página de Cloud Run Functions en la consola de Google Cloud :
    Ir a la página de Cloud Run Functions

  2. Haz clic en el nombre de la función para quitar uno de sus secretos.

  3. Haz clic en Editar.

  4. Haz clic en Configuración del entorno de ejecución, la compilación, las conexiones y la seguridad para expandir las opciones de configuración avanzada.

  5. Haz clic en Seguridad y repositorio de imágenes para abrir la pestaña de seguridad.

  6. Mantén el puntero sobre el secreto que deseas quitar y, luego, haz clic en Borrar.

  7. Haz clic en Siguiente.

  8. Haz clic en Implementar.

gcloud

Puedes quitar todos los secretos de una función o especificar uno o más secretos para quitarlos:

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

    gcloud functions deploy FUNCTION_NAME \
    --no-gen2 \
    --runtime RUNTIME \
    --clear-secrets
    

    Reemplaza lo siguiente:

    • FUNCTION_NAME: Es el nombre de la función.

    • RUNTIME: Es el entorno de ejecución en el que se ejecutará la función.

    Se borran todos los secretos de la función.

  • Para especificar una lista de secretos que deseas quitar, usa la marca --remove-secrets. Con el siguiente comando, se quita un secreto activado como un volumen y otro expuesto como una variable de entorno:

    gcloud functions deploy FUNCTION_NAME \
    --no-gen2 \
    --runtime RUNTIME \
    --remove-secrets='ENV_VAR_NAME,SECRET_FILE_PATH, ...'
    

    Reemplaza lo siguiente:

    • FUNCTION_NAME: Es el nombre de la función.

    • RUNTIME: Es el entorno de ejecución en el que se ejecutará la función.

    • ENV_VAR_NAME: Es el nombre de la variable de entorno.

    • SECRET_FILE_PATH: Es la ruta completa del secreto. Por ejemplo, /mnt/secrets/primary/latest, en el que /mnt/secrets/primary/ es la ruta de activación y latest es la ruta del secreto. También puedes especificar las rutas de activación y del secreto por separado:

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

    Los secretos especificados se quitan de la función.

Visualiza los secretos accesibles de la función

Puedes ver a qué secretos puede acceder tu función con la consola de Google Cloud o la gcloud CLI:

Consola

  1. Ve a la página de Cloud Run Functions en la consola de Google Cloud :
    Ir a la página de Cloud Run Functions

  2. Haz clic en el nombre de la función para ver sus secretos disponibles.

  3. Haz clic en Editar.

  4. Haz clic en Configuración del entorno de ejecución, la compilación, las conexiones y la seguridad para expandir las opciones de configuración avanzada.

  5. Haz clic en Seguridad para abrir la pestaña de seguridad.

La pestaña "Seguridad" muestra una lista de los secretos accesibles para tu función.

gcloud

Si quieres ver qué secretos están disponibles para tu función, usa el comando gcloud functions describe:

gcloud functions describe FUNCTION_NAME

Reemplaza FUNCTION_NAME por el nombre de tu función.

¿Qué sigue?