Identidad de las funciones
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 Secret, como una contraseña o una clave. Así como otras entidades necesitan una identidad para acceder a Cloud Run Functions, las funciones 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 la función 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 asignar a cada función una identidad dedicada mediante la asignación de una cuenta de servicio administrada por el usuario. Las cuentas de servicio administradas por el usuario te permiten controlar el acceso mediante la concesión de 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 diferente del entorno de ejecución 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 de procesamiento predeterminada,
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.Ten en cuenta que el número del proyecto es distinto del ID y del proyecto. Puedes buscar el número del proyecto en la página del panel de la consola de Google Cloud.
Según la configuración de la política de la organización, es posible que a la cuenta de servicio predeterminada
se le otorgue automáticamente el rol de editor en tu
proyecto. Te recomendamos inhabilitar la concesión automática de roles; para ello,
aplica la restricción de la política de la
organización iam.automaticIamGrantsForDefaultServiceAccounts
. Si creaste tu organización después del 3 de mayo de 2024, esta
restricción se aplica de forma predeterminada.
Si inhabilitas la concesión automática de roles, debes decidir qué roles se deben otorgar a las cuentas de servicio predeterminadas y, luego, otorgar estos roles a ti mismo.
Si la cuenta de servicio predeterminada ya tiene el rol de editor, te recomendamos que reemplaces el rol de editor por roles menos permisivos.Para modificar de forma segura los roles de la cuenta de servicio, usa Policy Simulator para ver el impacto del cambio y, luego, otorga y revoca los roles adecuados.
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
- Crea cuentas de servicio individuales para tus funciones
Cambia los permisos en la cuenta de servicio del entorno de ejecución predeterminada
Console
Ve a la página de IAM en la consola de Google Cloud:
Selecciona la cuenta de servicio predeterminada de App Engine o la cuenta de servicio de procesamiento predeterminada de 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 proporcionar acceso con privilegio mínimo.
Haz clic en Guardar.
gcloud
Elimina la función Editor y, luego, usa el comando gcloud projects add-iam-policy-binding
para agregar una función nueva:
# 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, yROLE
es el rol nuevo que se asignará a la cuenta de servicio del entorno de ejecución predeterminada.
Usa cuentas de servicio individuales para las funciones
Para brindarte mayor flexibilidad en el control del acceso a tus funciones, puedes proporcionarles a cada una su propia cuenta de servicio administrada por el usuario.
- Crea tu cuenta de servicio. Toma nota de su nombre.
- Otorga las funciones adecuadas, en función de 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 se encuentra 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 (service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
), en el quePROJECT
se refiere al proyecto en el que reside la función. El agente de servicio de Cloud Run administra el acceso entre proyectos de tu cuenta de servicio.Otorga el permiso
iam.serviceaccounts.actAs
al agente de servicio de Cloud Run Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) en la cuenta de servicio del proyecto diferente.
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 si actualizas una función implementada con anterioridad.
Agrega una cuenta de servicio administrada por el usuario en la implementación
Console
Ve a la consola de Google Cloud:
Especifica y configura la función como quieras.
Haz clic en Entorno de ejecución, compilación… para mostrar opciones 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, Implementar.
gcloud
Cuando implementas una función con gcloud functions deploy
, agrega el marcador --service-account
. Por ejemplo:
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 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.
Console
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 de Editar en la parte superior de la página de detalles para editar la función.
Haz clic en Entorno de ejecución, compilación… para mostrar la configuración adicional.
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, Implementar.
gcloud
Cuando implementas una función con gcloud functions deploy
, agrega el marcador --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 API de Google o Google Cloud, debes recuperar un token de acceso con el permiso adecuado.
Puedes usar el servidor de metadatos de Compute para obtener 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 Google OAuth 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.