Usa Secrets

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 Functions para acceder a Secrets almacenados en Secret Manager.

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

  • Activa el Secret como un volumen Esto hace que el Secret esté disponible para la función como un archivo. Si haces referencia a un Secret como un volumen, la función accede al valor de secreto 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 Secret en lugar de a una versión fijada. Este método también funciona bien si planeas implementar la rotación de Secrets.

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

Para obtener más información sobre cómo usar Secret Manager, consulta la descripción general de Secret Manager.

Antes de comenzar

  1. Habilita la API Secret Manager.

    Habilita la API

  2. Si aún no lo hiciste, crea un secreto en Secret Manager. Para obtener información sobre cómo crear secretos y acceder a ellos, consulta Crea un secreto.

Otorga acceso a los Secrets

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

De forma predeterminada, Cloud Functions usa la cuenta de servicio predeterminada de App Engine para autenticarse con el administrador de Secrets. Para la producción, Google recomienda que configures tu función con el fin de autenticar mediante una cuenta de servicio administrada por el usuario que tenga asignada el conjunto de funciones menos permisivos necesario para lograr las tareas de tu función.

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

  1. Ve a la página Administrador de Secrets en Cloud Console:
    Ir a la página Administrador de secrets

  2. Haz clic en el nombre de un secret.

  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 Nuevos principales, 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 Selecciona una función, selecciona Secret Manager y, luego, Administrador y descriptor de acceso a Secretos.

Haz que un secret esté disponible para un servicio

Para hacer referencia al secret de una función, primero debes hacer que este sea accesible para la función. Puedes hacer que un secret sea accesible para funciones nuevas o existentes con Google Cloud Console o la herramienta de línea de comandos de gcloud:

Console

A fin de que un Secret sea accesible para una función, sigue estos pasos:

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

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

  3. Haz clic en Edit.

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

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

  6. Haz clic en Hacer referencia a un secreto para establecer un secret de la función.

  7. Selecciona el secret para acceder a él. Si necesitas crear un secreto, consulta Crea secrets y accede a ellos.

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

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

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

      2. Selecciona ¿No ves tu Secret? Ingresa el ID de recurso del Secret.

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

        project/PROJECT_ID/secrets/SECRET_NAME

        Reemplaza lo siguiente:

        • PROJECT_ID: El ID del proyecto en el que reside el Secret.

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

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

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

      1. Selecciona Activado como volumen.

      2. En el campo Ruta de activación, ingresa la ruta que se usará para el Secret.

      3. En el menú desplegable Versión, selecciona la versión del Secret que deseas consultar.

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

      1. Selecciona Expuesto como variable de entorno.

      2. En el campo Ruta de activación, ingresa la ruta que se usará para el Secret.

      3. En el menú desplegable Versión, selecciona la versión del Secret que deseas consultar.

  9. Haga clic en Listo.

  10. Haga clic en Next.

  11. Haga clic en Implementar.

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

gcloud

A fin de que un Secret sea accesible para una función, ingresa uno de los siguientes comandos.

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

    gcloud beta functions deploy FUNCTION_NAME \
    --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: La ruta completa del Secret. Por ejemplo, /etc/secrets/primary/latest, en el que /etc/secrets/primary/ es la ruta de activación y /latest/ es la ruta del Secret. También puedes especificar las rutas de activación y de Secret por separado:

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

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

    • VERSION: La versión del Secret que se usará. Por ejemplo, 1 o latest.

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

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

    gcloud beta functions deploy FUNCTION_NAME \
    --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 Secret en Secret Manager.

    • VERSION: La versión del Secret que se usará. Por ejemplo, 1 o latest.

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

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

    gcloud beta functions deploy FUNCTION_NAME \
    --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: La ruta del recurso del secreto que reside en otro proyecto. La ruta del recurso usa el siguiente formato:

      project/PROJECT_ID/secrets/SECRET_NAME

      Reemplaza lo siguiente:

      • PROJECT_ID: El ID del proyecto en el que reside el Secret.

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

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

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

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

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

    • VERSION: La versión del Secret que se usará. Por ejemplo, 1 o latest.

  • Puedes actualizar varios Secrets a la vez. Separa las opciones de configuración para cada Secret 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 beta functions deploy FUNCTION_NAME \
    --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 Secret en Secret Manager.

    • VERSION: La versión del Secret que se usará. Por ejemplo, 1 o latest.

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

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

Quita los Secrets de una función

Puedes quitar Secrets de una función con Cloud Console o la herramienta gcloud:

Console

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

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

  3. Haz clic en Edit.

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

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

  6. Coloca el cursor sobre el Secret que deseas quitar y, luego, haz clic en Borrar.

  7. Haga clic en Next.

  8. Haga clic en Implementar.

gcloud

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

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

    gcloud beta functions deploy FUNCTION_NAME \
    --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 Secrets de la función.

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

    gcloud beta functions deploy FUNCTION_NAME \
    --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: La ruta completa del Secret. Por ejemplo, /etc/secrets/primary/latest, en el que /etc/secrets/primary/ es la ruta de activación y /latest/ es la ruta del Secret. También puedes especificar las rutas de activación y de Secret por separado:

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

    Los Secrets especificados se quitan de la función.

Visualiza los Secrets accesibles de la función

Puedes ver a qué Secrets puede acceder tu función mediante Cloud Console o la herramienta gcloud:

Console

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

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

  3. Haz clic en Edit.

  4. Haz clic en Configuración del entorno de ejecución, compilación y conexiones 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 Secrets accesibles actualmente para tu función.

gcloud

A fin de ver qué Secrets están disponibles para tu función, usa el comando gcloud beta functions describe:

gcloud beta functions describe FUNCTION_NAME

Reemplaza FUNCTION_NAME por el nombre de tu función.

¿Qué sigue?