Configura Secrets (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 funciones de Cloud Run 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. Para obtener información sobre cómo crear secretos y acceder a ellos, consulta Crea un secreto.
Antes de comenzar
-
Enable the Secret Manager API.
- Si aún no lo hiciste, crea un Secret en Secret Manager, como se describe en Crea un Secret.
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, funciones de Cloud Run 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 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 funciones de Cloud Run, asigna el rol roles/secretmanager.secretAccessor
a la cuenta de servicio asociada con tu función:
Ve a la página Secret Manager en la consola de Google Cloud:
Ir a la página Secret ManagerHaz clic en la casilla de verificación junto al Secrect.
Si aún no está abierto, haz clic en Mostrar panel de información para abrir el panel.
En el panel de información, haz clic en Agregar principal.
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:
La cuenta de servicio administrada por el usuario que se asignó a la función en el momento de la implementación. Para aprender a implementar una función con una cuenta de servicio administrada por el usuario, consulta Usa cuentas de servicio individuales para la función.
La cuenta de servicio predeterminada de App Engine (no se recomienda para su uso en producción)
En el menú desplegable Seleccionar un rol, selecciona Secret Manager y, luego, Descriptor de acceso a los Secrets de Secret Manager.
Prepara la función para acceder a los Secrets
Hay dos formas de hacer que un Secret esté disponible para tu función:
- Pasar el Secret como una variable de entorno.
- Activa el Secret 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:
- Configura una variable de entorno de entorno de ejecución durante la implementación de la función.
- Haz que el Secret sea accesible para tu función en una variable de entorno.
- Accede a la variable de entorno de manera programática en el entorno de ejecución.
Activa el Secret como un volumen
Para activar el Secret como un volumen, sigue estos pasos:
Crea un archivo que contenga el Secret.
Elige un directorio sin usar que no sea del sistema, como
/mnt/secrets
, como la ruta de activación del Secret. Cualquier archivo o subdirectorio preexistente en ese directorio que no sea el Secret y sus versiones se vuelven inaccesibles una vez que el Secret se activa.Haz que el Secret sea accesible para tu función como un volumen activado.
En el entorno de ejecución, lee el contenido del archivo de manera programática para acceder al valor del Secret.
Por ejemplo, si el Secret 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 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 secreto sea accesible para funciones nuevas o existentes mediante la consola de Google Cloud o Google Cloud CLI:
Console
A fin de que un Secret sea accesible para una función, sigue estos pasos:
Ve a la página de funciones de Cloud Run en la consola de Google Cloud:
Ir a la página de funciones de Cloud RunHaz clic en el nombre de la función a la que deseas acceder con el Secret.
Haz clic en Editar.
Haz clic en Entorno de ejecución, compilación… para expandir las opciones de configuración avanzada.
Haz clic en Seguridad y repositorio de imágenes para abrir la pestaña.
Haz clic en Agregar una referencia de Secret para establecer un Secret de la función.
Selecciona el secret para acceder a él. Si es necesario, crea un Secret.
Para hacer referencia a un secret en el mismo proyecto que tu función, ejecuta el siguiente comando:
- Selecciona el Secret de la lista desplegable.
Para hacer referencia a un secret de otro proyecto:
Verifica que la cuenta de servicio de tu proyecto tenga acceso al secret.
Selecciona Ingresar Secret manualmente.
Ingresa el ID de recurso del Secret en el siguiente formato:
projects/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.
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:
Selecciona Activado como volumen.
En el campo Ruta de activación, ingresa la ruta de activación para este Secret. Este es el directorio en el que se encuentran todas las versiones de tu Secret.
En el campo Path1, 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 Secret.
En el menú desplegable Version1, selecciona la versión del Secret que deseas consultar.
Puedes activar versiones adicionales de este Secret; para ello, haz clic en +Agregar para definir las rutas adicionales y las versiones de este Secret que se activarán en ellas.
Para exponer el Secret como una variable de entorno, haz lo siguiente:
Selecciona Expuesto como variable de entorno.
En el campo Name1, ingresa el nombre de la variable de entorno.
En el menú desplegable Version1, selecciona la versión del Secret que deseas consultar.
Puedes exponer versiones adicionales de este Secret a tu función; para ello, haz clic en +Agregar para definir variables de entorno adicionales y las versiones de este Secret para almacenarlas en ellas.
Haz clic en Listo.
Haz clic en Siguiente.
Haz 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 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: La ruta completa del Secret. Por ejemplo,
/mnt/secrets/primary/latest
, en el que/mnt/secrets/primary/
es la ruta de activación ylatest
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
olatest
.
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 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 Secret en Secret Manager.
VERSION: La versión del Secret que se usará. Por ejemplo,
1
olatest
.
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 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: La ruta del recurso del Secret que reside en otro proyecto. La ruta del recurso usa el siguiente formato:
projects/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,
/mnt/secrets/primary/latest
, en el que/mnt/secrets/primary/
es la ruta de activación ylatest
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
olatest
.
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 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 Secret en Secret Manager.
VERSION: La versión del Secret que se usará. Por ejemplo,
1
olatest
.SECRET_FILE_PATH: La ruta completa del Secret. Por ejemplo,
/mnt/secrets/primary/latest
, en el que/mnt/secrets/primary/
es la ruta de activación ylatest
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 la consola de Google Cloud o la CLI de gcloud:
Console
Ve a la página de funciones de Cloud Run en la consola de Google Cloud:
Ir a la página de funciones de Cloud RunHaz clic en el nombre de la función para quitar uno de sus Secrets.
Haz clic en Editar.
Haz clic en Configuración del entorno de ejecución, compilación y conexiones para expandir las opciones de configuración avanzada.
Haz clic en Security and Image Repo para abrir la pestaña de seguridad.
Mantén el puntero sobre el Secret que deseas quitar y, luego, haz clic en
Borrar.Haz clic en Siguiente.
Haz 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 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 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 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: La ruta completa del Secret. Por ejemplo,
/mnt/secrets/primary/latest
, en el que/mnt/secrets/primary/
es la ruta de activación ylatest
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 con la consola de Google Cloud o gcloud CLI:
Console
Ve a la página de funciones de Cloud Run en la consola de Google Cloud:
Ir a la página de funciones de Cloud RunHaz clic en el nombre de la función para ver sus Secrets disponibles.
Haz clic en Editar.
Haz clic en Configuración del entorno de ejecución, compilación y conexiones para expandir las opciones de configuración avanzada.
Haz clic en Seguridad para abrir la pestaña de seguridad.
La pestaña Seguridad muestra una lista de los Secrets accesibles para tu función.
gcloud
A fin de ver qué Secrets 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?
- Considera desarrollar funciones que usen Secret Manager mediante las bibliotecas cliente de Secret Manager.