Identidad de las funciones (1ª gen.)
Por motivos de seguridad, la mayoría de las interacciones entre entidades en Google Cloud requieren que cada entidad tenga una identidad verificable y protegida por algún tipo de secreto, como una contraseña o una clave. Así como otras entidades necesitan una identidad para acceder a Cloud Run Functions, las funciones en sí, a menudo, necesitan acceso a otros recursos en Google Cloud para realizar su trabajo. Cada función está asociada con una cuenta de servicio que funciona como su identidad cuando accede a otros recursos. La cuenta de servicio que una función usa como su identidad también se conoce como su cuenta de servicio del entorno de ejecución.
Para el uso en producción, Google recomienda dar una cuenta de servicio administrada por el usuario a cada función para asignarle una identidad dedicada. Este tipo de cuentas te permiten controlar el acceso cuando concedes un conjunto mínimo de permisos con Identity and Access Management.
Cuenta de servicio del entorno de ejecución
A menos que especifiques una cuenta de servicio del entorno de ejecución diferente cuando implementes una función, Cloud Run Functions usa una cuenta de servicio predeterminada como su identidad para la ejecución de la función:
Cloud Run Functions usa la cuenta de servicio predeterminada de App Engine,
PROJECT_ID@appspot.gserviceaccount.com.Ten en cuenta que el número del proyecto es distinto de su ID y nombre. Puedes encontrar el número de tu proyecto en la página del panel de la consola de Google Cloud .
Estas cuentas de servicio predeterminadas tienen el rol de editor, que les permite un acceso amplio a muchos servicios de Google Cloud . Si bien esta es la forma más rápida de desarrollar funciones, Google recomienda usar la cuenta de servicio predeterminada solo para pruebas y desarrollo. Para la producción, debes otorgar a la cuenta de servicio del entorno de ejecución solo el conjunto mínimo de permisos necesarios para que logre su objetivo.
Para proteger tus funciones en producción, haz lo siguiente:
- Cambia los permisos en la cuenta de servicio del entorno de ejecución predeterminada.
- O bien, crea cuentas de servicio individuales para tus funciones.
Cambia los permisos en la cuenta de servicio del entorno de ejecución predeterminada
Consola
Dirígete a la página IAM en la consola de Google Cloud .
Selecciona la cuenta de servicio predeterminada de App Engine o la cuenta de servicio predeterminada de Compute en la tabla.
Haz clic en el ícono de lápiz en el lado derecho de la fila para ver la pestaña Editar permisos.
Agrega o quita roles en el menú desplegable Rol para brindar acceso con privilegio mínimo.
Haz clic en Guardar.
gcloud
Elimina el rol Editor y, luego, usa el comando
gcloud projects add-iam-policy-binding para agregar un rol nuevo:
# Remove the Editor role gcloud projects remove-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_EMAIL" \ --role="roles/editor" # Add the desired role gcloud projects add-iam-policy-binding PROJECT_ID \ --member="SERVICE_ACCOUNT_EMAIL" \ --role="ROLE"
En este caso, PROJECT_ID es el ID del proyecto que
usas, SERVICE_ACCOUNT_EMAIL es la dirección de
correo electrónico de la cuenta de servicio del entorno de ejecución predeterminada, como se mostró antes en
Cuenta de servicio del entorno de ejecución, y
ROLE es el rol nuevo que se asignará a
esta cuenta.
Usa cuentas de servicio individuales para las funciones
Para brindarte mayor flexibilidad en el control del acceso a tus funciones, puedes darle a cada una su propia cuenta de servicio administrada por el usuario.
- Crea tu cuenta de servicio. Toma nota de su nombre.
- Otórgale los roles adecuados según los recursos a los que necesita acceder la función para hacer su trabajo.
Si la cuenta de servicio y la función se encuentran en proyectos diferentes, desde el proyecto en el que está la cuenta de servicio, haz lo siguiente:
- Configura la cuenta de servicio para que funcione en todos los proyectos.
Otorga el rol de creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator) al agente de servicio de Cloud Run Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com), en el quePROJECTse refiere al proyecto en el que reside la función. El agente de servicio de Cloud Run Functions administra el acceso entre proyectos de tu cuenta de servicio.Otorga el permiso
iam.serviceaccounts.actAsal agente de servicio de Cloud Run Functions en la cuenta de servicio del otro proyecto.
Otorga a la cuenta de servicio acceso al recurso. El método para hacer esto depende del tipo de recurso.
Conecta la cuenta de servicio con la función. Puedes hacerlo en el momento de la implementación o cuando actualizas una función ya implementada.
Agrega una cuenta de servicio administrada por el usuario en la implementación
Consola
Ve a la consola de Google Cloud :
Especifica y configura la función como quieras.
Haz clic en Configuración del entorno de ejecución, la compilación… para mostrar parámetros de configuración adicionales.
Selecciona la pestaña Entorno de ejecución.
Haz clic en el menú desplegable Cuenta de servicio y selecciona la cuenta de servicio deseada.
Haz clic en Siguiente y, luego, en Implementar.
gcloud
Cuando implementas una función con gcloud functions deploy, agrega la
marca --service-account. Por ejemplo:
gcloud functions deploy --no-gen2 FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
en el que FUNCTION_NAME es el nombre de la función y
SERVICE_ACCOUNT_EMAIL es el correo electrónico de la
cuenta de servicio.
Actualiza la cuenta de servicio de una función existente
Puedes actualizar la cuenta de servicio del entorno de ejecución de una función existente.
Consola
Ve a la consola de Google Cloud :
Haz clic en el nombre de la función deseada para ir a su página de detalles.
Haz clic en el lápiz Editar en la parte superior de la página de detalles para editar la función.
Haz clic en Configuración del entorno de ejecución, la compilación… para mostrar parámetros de configuración adicionales.
Selecciona la pestaña Entorno de ejecución.
Haz clic en el menú desplegable Cuenta de servicio y selecciona la cuenta de servicio deseada.
Haz clic en Siguiente y, luego, en Implementar.
gcloud
Cuando implementas una función con gcloud functions deploy, agrega la
marca --service-account:
gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL
en el que FUNCTION_NAME es el nombre de la función y
SERVICE_ACCOUNT_EMAIL es la cuenta de servicio.
La función que se volvió a implementar ahora usa la nueva cuenta de servicio del entorno de ejecución.
Usa el servidor de metadatos para adquirir tokens
Si bien las cuentas de servicio definidas por IAM son el método preferido para administrar el acceso en Google Cloud, algunos servicios pueden requerir otros modos, como una clave de API, un cliente de OAuth 2.0 o una clave de cuenta de servicio. El acceso a un recurso externo también puede requerir métodos alternativos.
Si tu servicio de destino requiere que presentes un token de ID de OpenID Connect o un token de acceso de Oauth 2.0, es posible que puedas usar el servidor de metadatos de Compute para recuperar estos tokens en lugar de configurar un cliente de OAuth completo.
Tokens de identidad
Puedes usar el servidor de metadatos de Compute para recuperar tokens de ID con un público específico de la siguiente manera:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \ -H "Metadata-Flavor: Google"
Donde AUDIENCE es el objetivo solicitado, por
ejemplo, la URL de un servicio que estás invocando, como
https://service.domain.com, o el ID de cliente de OAuth de un recurso protegido
por IAP, como 1234567890.apps.googleusercontent.com.
Tokens de acceso
Los tokens de acceso de OAuth 2.0 usan permisos para definir los permisos de acceso. De forma predeterminada,
dentro de Google Cloud , los tokens de acceso tienen el permiso cloud-platform. Para acceder a otras APIs de Google o Google Cloud , debes recuperar un token
de acceso con el permiso adecuado.
Puedes usar el servidor de metadatos de Compute para recuperar tokens de acceso.
Si necesitas un token de acceso con un alcance específico, puedes generar uno de la siguiente manera:
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \ -H "Metadata-Flavor: Google"
En el ejemplo anterior, SCOPES es una lista separada por comas de los permisos de OAuth
solicitados, por ejemplo: https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.
Consulta la lista completa de permisos de OAuth de Google para buscar los que necesitas.
Próximos pasos
Aprende a autorizar el acceso a tus funciones o a autenticar desarrolladores y otras funciones para que puedan invocar tus funciones.