Control de acceso con IAM

Tú (es decir, la cuenta de usuario o servicio que implementa la función) puedes configurar el control de acceso con roles a nivel del proyecto. Asigna una función a un miembro de proyecto o a una cuenta de servicio para determinar el nivel del acceso a tu proyecto de Google Cloud y a sus recursos. De forma predeterminada, todos los proyectos de Google Cloud incluyen un solo usuario: el creador original del proyecto. Ningún otro usuario tiene acceso al proyecto y, por lo tanto, tampoco a las funciones, hasta que se agrega un usuario como un miembro del equipo de proyecto.

Control de acceso para usuarios

Puedes agregar usuarios como miembros de equipo a tu proyecto y garantizarles funciones mediante la Identity and Access Management (IAM).

Cloud Functions admite las funciones básicas de editor, propietario y visualizador, que otorgan los siguientes permisos:

  • Editor y Propietario: acceso de lectura y escritura a todos los recursos relacionados con las funciones. Permite a los usuarios implementar, actualizar y borrar funciones. Acceso adicional a otros recursos del proyecto.
  • Lector: acceso de solo lectura a las funciones y ubicaciones. Permite a los usuarios crear una lista de funciones y ver sus detalles, pero no les permite ver el código fuente. Acceso adicional a otros recursos del proyecto.

Cloud Functions también admite las funciones predefinidas de Desarrollador y Visualizador de Cloud Functions, que otorgan los siguientes permisos:

  • Programador: acceso de lectura y escritura a todos los recursos relacionados con las funciones. Permite a los usuarios implementar, actualizar y borrar funciones. Sin acceso a otros recursos del proyecto.
  • Lector: acceso de solo lectura a las funciones y ubicaciones. Permite a los usuarios crear una lista de funciones y ver sus detalles, pero no les permite ver el código fuente. Sin acceso a otros recursos del proyecto.

Control de acceso para cuentas de servicio

Una cuenta de servicio es un tipo especial de cuenta de Google Cloud que actúa como una identidad para un usuario no humano que necesita autenticarse y tener autorización a fin de acceder a los datos y realizar diversas acciones. Algunas de estas cuentas son creadas y administradas por Google, y se conocen como agentes de servicio.

Las siguientes cuentas de servicio se usan para Cloud Functions:

Nombre ID de miembro Rol
Cuenta de servicio predeterminada de App Engine (solo 1a gen.) PROJECT_ID@appspot.gserviceaccount.com Editor
Cuenta de servicio predeterminada de Compute Engine (solo 2a gen.) 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 Cloud Functions
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 del entorno de ejecución

En el entorno de ejecución, Cloud Functions (1a gen.) usa de forma predeterminada la cuenta de servicio predeterminada de App Engine (PROJECT_ID@appspot.gserviceaccount.com), que tiene el rol de editor en el proyecto. De forma predeterminada, Cloud Functions (2da gen.) usa la cuenta de forma predeterminada la cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com), que también tiene el rol de Editor en el proyecto. Puedes cambiar los roles de estas cuentas de servicio a fin de limitar o extender los permisos para tus funciones en ejecución. También puedes cambiar la cuenta de servicio que se usa si proporcionas una cuenta de servicio individual no predeterminada.

Para obtener más información sobre las cuentas de servicio, consulta la documentación de las 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 en Cloud Functions requieren la cuenta de servicio del agente de servicios de Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

Además, todos los entornos de ejecución realizan la compilación y el almacenamiento de imágenes de contenedor en tu proyecto. Para admitir esto, también debes aprovisionar lo siguiente:

Estas cuentas de servicio deben tener las funciones enumeradas en la tabla anterior.

Cuenta de servicio del agente de servicios de Google Cloud Functions

Según la configuración predeterminada, la cuenta de servicio del agente del servicio de Google Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com tiene la función cloudfunctions.serviceAgent en el proyecto). La creación, actualización y eliminación de funciones puede fallar si cambias los permisos de esta cuenta.

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

Permiso Descripción
roles/artifactregistry.admin Administra repositorios y almacena imágenes de compilación en Artifact Registry.
roles/cloudbuild.builds.editor Es obligatorio para usar Cloud Build a fin de realizar compilaciones en el proyecto del usuario.
roles/cloudbuild.customworkers.builder Crear compilaciones en los trabajadores personalizados de Cloud Build.
cloudfunctions.functions.invoke Invoca una función de HTTP de 1ª gen. protegida por IAM.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
Aprovisionar funciones con acceso a la VPC de proyectos del consumidor.
roles/eventarc.developer Administrar activadores de Eventarc para funciones de 2ª gen.
firebasedatabase.instances.{get, update} Crear funciones activadas por Firebase Realtime Database
iam.serviceAccounts.{actAs, getAccessToken, signBlob} Capacidad para obtener credenciales de la cuenta de servicio del entorno de ejecución
iam.serviceAccounts.getOpenIdToken Se requiere para que el agente obtenga un token de OpenID en una autoridad especificada por el usuario. El token de OpenID se usa para invocar funciones habilitadas para IAM.
pubsub.subscriptions Administrar las suscripciones en el proyecto del usuario
pubsub.topics Administrar los temas en el proyecto del usuario
roles/run.developer Administra el servicio de Cloud Run para funciones de 2ª gen.
storage.buckets.{get, update} Configura notificaciones en un bucket de Cloud Storage que activen una función de 1ª gen.
storage.buckets.create,
storage.objects.{delete, get, create, list}
Es obligatorio para almacenar el código fuente en el proyecto del usuario.

Puedes ver todo el conjunto de permisos en roles predefinidos de IAM o ejecutar este comando:

gcloud iam roles describe roles/cloudfunctions.serviceAgent

Puedes restablecer esta cuenta de servicio al rol predeterminado con solo quitar cualquier rol que tenga actualmente y agregar la función de 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

Soluciona errores de permisos

Si recibes errores de permisos cuando implementas, actualizas, borras o ejecutas funciones en el proyecto, sigue estos pasos:

  1. Asegúrate de tener el rol Editor o Propietario del proyecto o 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 de haber otorgado al usuario el rol Usuario de la cuenta de servicio de IAM.

    Por el momento, solo se permiten los permisos de ejecución a nivel de cada función.

  2. Verifica que la cuenta de servicio del agente de servicios de Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) tenga la función cloudfunctions.serviceAgent en el proyecto.

    Asegúrate de que la casilla Incluye asignaciones de funciones proporcionadas por Google en la pestaña Permisos de la página IAM de Console esté marcada para ver esta cuenta. También puedes usar gcloud projects add-iam-policy-binding PROJECT_ID.

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

Si recibes un error de “permisos insuficientes” o tienes otros problemas de autenticación cuando ejecutas las funciones, asegúrate de que la cuenta de servicio del entorno de ejecución cuente con los permisos correspondientes para acceder a los recursos que necesitan las funciones y, luego, repite los pasos 2 y 3.

Si recibes un error que indica “servicio no disponible” durante la implementación, asegúrate de que la cuenta de servicio del entorno de ejecución PROJECT_ID@appspot.gserviceaccount.com exista en tu proyecto. Para volver a crear esta cuenta de servicio si se borró, consulta Recupera una cuenta de servicio.

Consulta también Solución de problemas de Cloud Functions.