Control de acceso con la gestión de identidades y accesos

En esta página se proporciona información adicional sobre el uso de roles de gestión de identidades y accesos (IAM) para definir controles de acceso a nivel de proyecto, determinar el nivel de acceso a tu proyecto de Google Cloud y a las funciones creadas mediante comandos de gcloud functions o la API Cloud Functions v2.

Si has creado o desplegado funciones con Cloud Run, consulta Control de acceso con Gestión de Identidades y Accesos y Roles de Cloud Run para obtener una descripción detallada de los roles predefinidos de Cloud Run, controlar el acceso a servicios concretos, hacer público un servicio o configurar la política de la organización para el rol Invocador de Cloud Run de Gestión de Identidades y Accesos.

Control de acceso para usuarios

Añade usuarios como miembros del equipo a tu proyecto y concédeles roles mediante Gestión de identidades y accesos (IAM).

Cloud Run Functions admite los siguientes roles:

Control de acceso para cuentas de servicio

Una cuenta de servicio es un tipo especial de cuenta deGoogle Cloud que actúa como identidad de un usuario no humano que necesita autenticarse y tener autorización para acceder a los datos y realizar varias acciones. Algunas de estas cuentas las crea y gestiona Google y se conocen como agentes de servicio.

Las siguientes cuentas de servicio se usan en las funciones de Cloud Run:

Nombre ID de miembro Rol
Cuenta de servicio predeterminada de Compute Engine PROJECT_NUMBER-compute@developer.gserviceaccount.com Editor
Agente de servicio de Google Cloud Functions service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Agente de servicio de Google Cloud Functions
Cuenta de servicio de Cloud Build antigua1 PROJECT_NUMBER@cloudbuild.gserviceaccount.com Cuenta de servicio de Cloud Build
Cuenta de servicio de Cloud Build service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Agente de servicio de Cloud Build
Agente de servicio de Google Container Registry service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Agente de servicio de Container Registry
Agente de servicio de Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Agente de servicio de Artifact Registry

Cuentas de servicio de tiempo de ejecución

En el tiempo de ejecución, las funciones de Cloud Run usan de forma predeterminada la cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com), que también tiene el rol Editor en el proyecto. Puedes cambiar los roles de estas cuentas de servicio para limitar o ampliar los permisos de tus funciones en ejecución. También puedes cambiar la cuenta de servicio que se usa para evitar la cuenta de servicio predeterminada al configurar la identidad del servicio.

Para obtener más información sobre las cuentas de servicio, consulta la documentación sobre cuentas de servicio.

Cuentas de servicio administrativas

Para realizar acciones administrativas en tu proyecto durante la creación, actualización o eliminación de funciones, todos los proyectos de funciones de Cloud Run requieren la cuenta de servicio del agente de servicio de Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

Además, todos los tiempos de ejecución compilan y almacenan imágenes de contenedor en tu proyecto. Para ello, también debes aprovisionar lo siguiente:

Estas cuentas de servicio deben tener los roles que se indican en la tabla anterior.

Cuenta de servicio del agente de servicio de Google Cloud Functions

De forma predeterminada, la cuenta de servicio del agente de servicio de Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) tiene el rol cloudfunctions.serviceAgent en tu proyecto.

Estos son algunos de los permisos destacados que usa cloudfunctions.serviceAgent:

Permiso Descripción
roles/artifactregistry.admin Gestionar repositorios y almacenar imágenes de compilación en Artifact Registry.
roles/cloudbuild.builds.editor Se requiere para usar Cloud Build y realizar compilaciones en el proyecto del usuario.
roles/cloudbuild.customworkers.builder Crea compilaciones en trabajadores personalizados de Cloud Build.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
Proporciona funciones con acceso a la VPC de los proyectos de consumidor.
roles/eventarc.developer Gestionar activadores de Eventarc para funciones.
firebasedatabase.instances.{get, update} Crea funciones activadas por Firebase Realtime Database.
iam.serviceAccounts.{actAs, getAccessToken, signBlob} Posibilidad de obtener credenciales de cuenta de servicio en el tiempo de ejecución.
iam.serviceAccounts.getOpenIdToken Necesario para que el agente obtenga un token OpenID en una autoridad especificada por el usuario. El token de OpenID se usa para invocar funciones habilitadas para IAM.
pubsub.subscriptions Gestionar las suscripciones del proyecto del usuario.
pubsub.topics Gestionar temas en el proyecto del usuario.
roles/run.developer Gestionar el servicio de Cloud Run de las funciones.
storage.buckets.create,
storage.objects.{delete, get, create, list}
Obligatorio para almacenar el código fuente en el proyecto del usuario.

Puedes ver todo el conjunto de permisos en los roles de gestión de identidades y accesos predefinidos o ejecutando este comando:

gcloud iam roles describe roles/cloudfunctions.serviceAgent

Restablece esta cuenta de servicio al rol predeterminado. Para ello, elimina el rol que tenga y añade el rol Agente de servicio de Cloud Functions:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

Solucionar errores de permisos

Si recibes errores de permisos al implementar, actualizar, eliminar o ejecutar funciones en tu proyecto, sigue estos pasos:

  1. Asegúrate de que tienes el rol Editor o Propietario en tu proyecto, o bien de que estás usando el rol Desarrollador de Cloud Functions.

    Si usas el rol Desarrollador de Cloud Functions a nivel de proyecto, asegúrate también de haber concedido al usuario el rol Usuario de cuenta de servicio de IAM.

    Actualmente, solo se permiten permisos de ejecución a nivel de función.

  2. Verifica que la cuenta de servicio Agente de servicio de Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) tenga el rol Agente de servicio de Cloud Functions (cloudfunctions.serviceAgent) en tu proyecto.

    Para ver esta cuenta, asegúrate de que la casilla Incluir asignaciones de roles proporcionadas por Google de la pestaña Permisos de la página Gestión de identidades y accesos de la consola esté marcada. También puedes usar gcloud projects add-iam-policy-binding PROJECT_ID.

  3. Asegúrate de que tienes permisos para las fuentes de activadores, como Pub/Sub o Cloud Storage.

Si aparece un error de "permisos insuficientes" o tienes otros problemas de autenticación al ejecutar tus funciones, asegúrate de que la cuenta de servicio del tiempo de ejecución tenga los permisos correctos para acceder a los recursos que necesitan tus funciones. A continuación, repite los pasos 2 y 3.

Si aparece un error de "servicio no disponible" durante el despliegue, asegúrate de que la cuenta de servicio de tiempo de ejecución PROJECT_ID@appspot.gserviceaccount.com exista en tu proyecto. Si quieres volver a crear esta cuenta de servicio, consulta el artículo Recuperar una cuenta de servicio eliminada.

Consulta también Solucionar problemas de Cloud Run Functions.

1. Las funciones de Cloud Run solo usan la cuenta de servicio antigua de Cloud Build en los proyectos creados antes de julio del 2024.