Control de acceso con gestión de identidades y accesos (1.ª gen.)
Tú (es decir, el usuario o la cuenta de servicio que implementa la función) puedes configurar el control de acceso mediante roles a nivel de proyecto. Concede un rol a un miembro del proyecto o a una cuenta de servicio para determinar el nivel de acceso a tuGoogle Cloud proyecto y sus recursos. De forma predeterminada, todos los Google Cloud proyectos tienen un solo usuario: el creador original del proyecto. Ningún otro usuario tendrá acceso al proyecto ni a sus funciones hasta que se añada como miembro del equipo del proyecto.
Control de acceso para usuarios
Puede añadir usuarios como miembros del equipo a su proyecto y concederles roles mediante Gestión de Identidades y Accesos (IAM).
Cloud Run Functions admite los roles básicos de Editor, Propietario y Lector, que otorgan los siguientes permisos:
- Editor y Propietario: acceso de lectura y escritura a todos los recursos relacionados con Functions. Permite a los usuarios implementar, actualizar y eliminar funciones. Acceso adicional a otros recursos del proyecto.
- Lector: acceso de solo lectura a las funciones y ubicaciones. Permite a los usuarios enumerar funciones y ver sus detalles, pero no les permite ver el código fuente. Acceso adicional a otros recursos del proyecto.
Cloud Run Functions también admite los roles predefinidos Developer y Viewer de Cloud Run Functions, que conceden los siguientes permisos:
- Desarrollador: acceso de lectura y escritura a todos los recursos relacionados con Functions. Permite a los usuarios implementar, actualizar y eliminar funciones. No tiene acceso a otros recursos del proyecto.
- Lector: acceso de solo lectura a las funciones y ubicaciones. Permite a los usuarios enumerar funciones y ver sus detalles, pero no les permite ver el código fuente. No tiene acceso a otros recursos del proyecto.
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 App Engine | PROJECT_ID@appspot.gserviceaccount.com |
Editor |
Agente de servicio de funciones de Google Cloud Run | service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com |
Agente de servicio de Cloud Run 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 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 App Engine (PROJECT_ID@appspot.gserviceaccount.com
), que tiene el rol Editor en el proyecto. Puedes cambiar el rol 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 proporcionando una cuenta de servicio individual no predeterminada.
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 funciones de Google Cloud Run (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:
- La cuenta de servicio básica de Cloud Build (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
) - La cuenta de servicio del agente de servicio de Cloud Build (
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
) - La cuenta de servicio del agente de servicio de Google Container Registry (
service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com
)
Estas cuentas de servicio deben tener los roles que se indican en la tabla anterior.
Cuenta de servicio del agente de servicio de funciones de Google Cloud Run
De forma predeterminada, la cuenta de servicio del agente de servicio de las funciones de Google Cloud Run (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. |
cloudfunctions.functions.invoke |
Invocar una función HTTP protegida con IAM. |
compute.globalOperations.get ,compute.networks.access ,vpcaccess.connectors.{get, use} |
Proporciona funciones con acceso a la VPC de los proyectos de consumidor. |
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. |
storage.buckets.{get, update} |
Configura las notificaciones de un segmento de Cloud Storage que activen una función. |
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
Puedes restablecer esta cuenta de servicio al rol predeterminado. Para ello, quita el rol que tenga y añade el rol Agente de servicio de funciones de Cloud Run:
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:
Asegúrate de que tienes el rol Editor o Propietario en tu proyecto o de que estás usando el rol Desarrollador de funciones de Cloud Run.
Si usas el rol Desarrollador de funciones de Cloud Run a nivel de proyecto, asegúrate también de haber concedido al usuario el rol Usuario de cuenta de servicio de IAM.
Solo se permiten permisos de ejecución a nivel de función.
Verifica que la cuenta de servicio del agente de servicio de Cloud Functions (
service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) tenga el rol 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
.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.