En este documento se explica cómo conceder roles y permisos de gestión de identidades y accesos (IAM) para admitir el enrutamiento de eventos desde Google Cloud y otras fuentes a servicios de Cloud Run mediante Eventarc.
Concede permisos en todo el proyecto a la entidad de seguridad que invoca las APIs de Eventarc (por ejemplo, el creador del activador de Eventarc):
- El rol Administrador de Eventarc te permite controlar por completo todos los recursos de Eventarc, incluido especificar una cuenta de servicio para el activador cuando lo crees.
- El rol Usuario de cuenta de servicio permite a un principal representar y usar una cuenta de servicio. La cuenta de servicio está asociada a un activador de Eventarc y representa la identidad del activador.
Concede permisos de activador de Eventarc a la cuenta de servicio del activador: el rol Receptor de eventos de Eventarc permite que tu activador de Eventarc reciba eventos de proveedores de eventos. No es necesario que concedas el rol si estás enrutando eventos directos desde Cloud Pub/Sub.
Concede permisos de servicio de Cloud Run a la cuenta de servicio del activador: el rol Invocador de Cloud Run permite que tu activador de Eventarc llame al servicio de Cloud Run de destino. Esto se aplica si enruta eventos a un servicio de Cloud Run autenticado.
Concede permisos a los agentes de servicios de Google:
- Si vas a crear un activador para eventos directos de Cloud Storage, asigna el rol Pub/Sub Publisher.
- Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril del 2021 o antes, asigna el rol Creador de tokens de cuenta de servicio.
Para obtener más información sobre cómo conceder roles de gestión de identidades y accesos, consulta el artículo sobre cómo gestionar el acceso. También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Conceder permisos en todo el proyecto
Si eres el creador del proyecto, se te asignará el rol básico de propietario (roles/owner
). De forma predeterminada, este rol incluye los permisos necesarios para tener acceso completo a la mayoría de los recursosGoogle Cloud . De lo contrario, un administrador debe conceder los roles necesarios al principal (también conocido como miembro) adecuado en el recurso correspondiente.
Por ejemplo, una entidad principal puede ser una cuenta de Google (para usuarios finales) o una cuenta de servicio (para aplicaciones y cargas de trabajo de computación). Cada principal tiene su propio identificador, que suele ser una dirección de correo electrónico.
El rol Administrador de Eventarc (
roles/eventarc.admin
) te permite controlar por completo todos los recursos de Eventarc.Concede el rol en el proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=roles/eventarc.admin
Haz los cambios siguientes:
PROJECT_ID
: tu ID de proyecto Google Cloud .PRINCIPAL
: identificador del creador del activador, que suele tener el siguiente formato:PRINCIPAL_TYPE:ID
. Por ejemplo,user:my-user@example.com
. Para ver una lista completa de los posibles valores dePRINCIPAL_TYPE
, consulta la referencia de Policy Binding.
El rol Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) permite que un principal ejecute operaciones como una cuenta de servicio.Por ejemplo, necesitas este rol para poder asociar una cuenta de servicio gestionada por el usuario a un activador de Eventarc. También la necesitas para poder actuar como la cuenta de servicio de entorno de ejecución al desplegar un servicio de Cloud Run. Para obtener más información, consulta Roles para la autenticación de cuentas de servicio.
Puede asignar el rol en el proyecto para permitir que el principal suplante la identidad de varias cuentas de servicio o asignar el rol en la cuenta de servicio para permitir que el principal suplante la identidad de una cuenta de servicio específica.
Concede el rol en el proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=roles/iam.serviceAccountUser
También puedes asignar el rol a la cuenta de servicio:
gcloud iam service-accounts add-iam-policy-binding \ projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member=PRINCIPAL \ --role=roles/iam.serviceAccountUser
Haz los cambios siguientes:
SERVICE_ACCOUNT_PROJECT_ID
: el ID del proyecto Google Cloud que contiene la cuenta de servicio.SERVICE_ACCOUNT_NAME
: el nombre de la cuenta de servicio.
Conceder permisos de activador de Eventarc
Cada activador de Eventarc está asociado a una cuenta de servicio de IAM en el momento en que se crea el activador. Puedes especificar una cuenta de servicio gestionada por el usuario que el activador utilice como identidad predeterminada. Si no especificas una cuenta de servicio durante la creación del activador, este usará la cuenta de servicio predeterminada de Compute Engine como identidad.
Te recomendamos que crees tu propia cuenta de servicio gestionada por el usuario para tener más control y flexibilidad a la hora de gestionar tu activador.
Crea una cuenta de servicio y anota su nombre:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
Haz los cambios siguientes:
SERVICE_ACCOUNT_NAME
: el nombre de la cuenta de servicio. Este nombre aparece en la dirección de correo que identifica la cuenta de servicio.DESCRIPTION
: una descripción opcional de la cuenta de servicioDISPLAY_NAME
: el nombre de la cuenta de servicio que se mostrará en la consola Google Cloud
Concede el rol Receptor de eventos de Eventarc (
roles/eventarc.eventReceiver
) en el proyecto a la cuenta de servicio asociada a tu activador de Eventarc para que el activador pueda recibir eventos de proveedores de eventos.Ten en cuenta que no es necesario que concedas el rol Receptor de eventos de Eventarc si estás enrutando eventos directos de Cloud Pub/Sub.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
Sustituye
SERVICE_ACCOUNT_NAME
por el nombre de la cuenta de servicio que has anotado en el paso anterior.
Conceder permisos de servicio de Cloud Run
Todos los servicios de Cloud Run se implementan de forma privada de forma predeterminada, lo que significa que no se puede acceder a ellos sin proporcionar credenciales de autenticación en la solicitud. En los proyectos con políticas de organización de uso compartido restringido al dominio, usa un servicio de destino de Cloud Run autenticado en lugar de uno que permita el acceso público (sin autenticar).
De forma predeterminada, los servicios de Cloud Run solo pueden llamarlos los propietarios y editores de proyectos, los administradores de Cloud Run y los invocadores de Cloud Run.
Si enruta eventos a un servicio de destino de Cloud Run autenticado, asigne el rol Invocador de Cloud Run (
run.invoker
) en el servicio de Cloud Run a la cuenta de servicio gestionada por el usuario asociada a su activador de Eventarc:gcloud run services add-iam-policy-binding SERVICE_NAME \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Sustituye
SERVICE_NAME
por el nombre del servicio de Cloud Run.También puedes asignar el rol a todos los servicios y trabajos de Cloud Run de un Google Cloud proyecto. Para obtener más información, consulta el artículo Controlar el acceso a todos los servicios y trabajos de un proyecto.
Ten en cuenta que, si creas un activador para un servicio de Cloud Run autenticado sin conceder el rol Invocador de Cloud Run, el activador se creará correctamente y estará activo. Sin embargo, el activador no funcionará como se espera y aparecerá un mensaje similar al siguiente en los registros:
The request was not authenticated. Either allow unauthenticated
invocations or set the proper Authorization header.
Conceder permisos a agentes de servicio
Algunos Google Cloud servicios tienenagentes de servicio que permiten que los servicios accedan a tus recursos. Si una API requiere un agente de servicio, Google lo crea después de que actives y uses la API.
Si vas a crear un activador para eventos directos de Cloud Storage, otorga el rol de editor de Pub/Sub (
roles/pubsub.publisher
) en el proyecto al agente de servicio de Cloud Storage para que pueda publicar mensajes en un tema:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
Sustituye
PROJECT_NUMBER
por el número de tu proyecto. Google Cloud Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola Google Cloud o ejecutando el siguiente comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril del 2021 o antes, para admitir solicitudes push de Pub/Sub autenticadas, otorga el rol de creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
) en el proyecto al agente de servicio de Pub/Sub. De lo contrario, este rol se concede de forma predeterminada:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Siguientes pasos
Consulta las opciones de control de acceso de Eventarc.
Consulta las prácticas recomendadas para usar cuentas de servicio.
Consulta cómo describir un activador y verificar su cuenta de servicio asociada.