Roles y permisos para destinos de Cloud Run

En este documento, se muestra cómo otorgar roles y permisos de Identity and Access Management (IAM) para admitir eventos de enrutamiento de Google Cloud y otras fuentes a los servicios de Cloud Run con Eventarc:

  1. Otorga al principal que invoca las APIs de Eventarc permisos para todo el proyecto (por ejemplo, el creador del activador de Eventarc):

    1. El rol de administrador de Eventarc te permite tener control total sobre todos los recursos de Eventarc, incluida la especificación de una cuenta de servicio para el activador cuando la creas.
    2. El rol de usuario de cuenta de servicio permite que una principal use la identidad de una cuenta de servicio. La cuenta de servicio está asociada con un activador de Eventarc y representa la identidad del activador.
  2. Otorga permisos de activador de Eventarc a la cuenta de servicio del activador: el rol de receptor de eventos de Eventarc permite que el activador de Eventarc reciba eventos de proveedores de eventos. No es necesario otorgar el rol si enrutas eventos directos desde Cloud Pub/Sub.

  3. Otorga permisos del servicio de Cloud Run a la cuenta de servicio del activador: el rol de invocador de Cloud Run permite que el activador de Eventarc llame al servicio de Cloud Run de destino. Esto se aplica si enrutas eventos a un servicio autenticado de Cloud Run.

  4. Otorga permisos a los agentes de servicio de Google:

    1. Si creas un activador para eventos directos desde Cloud Storage, otorga el rol de publicador de Pub/Sub.
    2. Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril de 2021 o antes de esa fecha, otorga el rol de creador de tokens de cuenta de servicio.

Para obtener más información sobre cómo otorgar roles de IAM, consulta Administra el acceso. También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Otorga permisos en todo el proyecto

Si eres el creador del proyecto, se te otorga el rol de propietario básico (roles/owner). De forma predeterminada, este rol incluye los permisos necesarios para obtener acceso completo a la mayoría de los recursos de Google Cloud. De lo contrario, un administrador debe otorgar los roles necesarios en el recurso apropiado a la principal apropiada (también conocida como miembro).

Por ejemplo, una principal puede ser una Cuenta de Google (para usuarios finales) o una cuenta de servicio (para aplicaciones y cargas de trabajo de procesamiento). Cada principal tiene su propio identificador, que suele ser una dirección de correo electrónico.

  1. El rol de administrador de Eventarc (roles/eventarc.admin) te permite tener control total sobre todos los recursos de Eventarc.

    Otorga el rol en el proyecto:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/eventarc.admin

    Reemplaza lo siguiente:

    • PROJECT_ID: tu ID del proyecto de Google Cloud.
    • PRINCIPAL: un identificador para el creador del activador que, por lo general, tiene el siguiente formato: PRINCIPAL_TYPE:ID. Por ejemplo, user:my-user@example.com. Si deseas obtener una lista completa de los valores PRINCIPAL_TYPE posibles, consulta la referencia sobre la vinculación de políticas.
  2. El rol de usuario de la cuenta de servicio (roles/iam.serviceAccountUser) permite que una principal ejecute operaciones como una cuenta de servicio.

    Por ejemplo, necesitas este rol para asociar una cuenta de servicio administrada por el usuario con un activador de Eventarc. También la necesitas para que puedas actuar como la cuenta de servicio del entorno de ejecución cuando implementes un servicio de Cloud Run. Si deseas obtener más información, consulta Roles para la autenticación de cuentas de servicio.

    Puedes otorgar el rol en el proyecto para permitir que la principal use la identidad de varias cuentas de servicio o puedes otorgar el rol en la cuenta de servicio para permitir que la principal actúe en nombre de una cuenta de servicio específica.

    Otorga el rol en el proyecto:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

    O bien, otorga el rol en 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

    Reemplaza lo siguiente:

    • SERVICE_ACCOUNT_PROJECT_ID: el ID del proyecto de Google Cloud que contiene la cuenta de servicio.
    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio

Otorga permisos de activador de Eventarc

Cada activador de Eventarc se asocia a una cuenta de servicio de IAM en el momento en que se crea el activador. Puedes especificar una cuenta de servicio administrada por el usuario que el activador use como su identidad predeterminada. Si no especificas una cuenta de servicio durante la creación del activador, este usa la cuenta de servicio predeterminada de Compute Engine para su identidad.

Te recomendamos crear tu propia cuenta de servicio administrada por el usuario para tener mayor control y flexibilidad cuando administres tu activador.

  1. Crea una cuenta de servicio y anota su nombre:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Reemplaza lo siguiente:

    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio Este nombre aparecerá en la dirección de correo electrónico que identifica la cuenta de servicio.
    • DESCRIPTION: una descripción opcional del servicio
    • DISPLAY_NAME: Es un nombre de cuenta de servicio que se mostrará en la consola de Google Cloud.
  2. Otorga el rol de receptor de eventos de Eventarc (roles/eventarc.eventReceiver) en el proyecto a la cuenta de servicio asociada con tu activador de Eventarc para que el activador pueda recibir eventos de los proveedores de eventos.

    Ten en cuenta que no necesitas otorgar el rol de receptor de eventos de Eventarc si enrutas eventos directos desde 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
    

    Reemplaza SERVICE_ACCOUNT_NAME por el nombre de tu cuenta de servicio que anotaste en el paso anterior.

Otorga permisos del servicio de Cloud Run

Todos los servicios de Cloud Run se implementan de manera privada de forma predeterminada, lo que significa que no se puede acceder a ellos sin proporcionar credenciales de autenticación en la solicitud. Para proyectos con políticas de la 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 propietarios de proyectos, los editores del proyecto, los administradores de Cloud Run y los invocadores de Cloud Run pueden llamar a los servicios de Cloud Run.

  1. Si enrutas eventos a un servicio de destino de Cloud Run autenticado, otorga el rol de invocador de Cloud Run (run.invoker) en el servicio de Cloud Run a la cuenta de servicio administrada por el usuario asociada con tu 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

    Reemplaza SERVICE_NAME por el nombre del servicio de Cloud Run.

  2. De manera opcional, puedes otorgar el rol en todos los servicios y trabajos de Cloud Run en un proyecto de Google Cloud. Para obtener más información, consulta Controla el acceso en todos los servicios y trabajos de un proyecto.

Ten en cuenta que si creas un activador para un servicio autenticado de Cloud Run sin otorgar el rol de invocador de Cloud Run, el activador se crea de forma correcta y está activo. Sin embargo, el activador no funcionará como se espera y aparecerá en los registros un mensaje similar al siguiente:

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

Otorga permisos a los agentes de servicio de Google

Algunos servicios de Google Cloud tienen cuentas de servicio administradas por Google que permiten que los servicios accedan a tus recursos. Estas cuentas de servicio se conocen como agentes de servicio. Si una API requiere un agente de servicio, Google crea el agente de servicio después de que activas y usas la API.

  1. Si creas un activador para eventos directos desde Cloud Storage, para admitir la publicación de mensajes en un tema, otorga el rol de publicador de Pub/Sub (roles/pubsub.publisher) en el proyecto al agente de servicio de Cloud Storage:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
        --role=roles/pubsub.publisher

    Reemplaza PROJECT_NUMBER por el número de proyecto de Google Cloud. Para encontrar el número del proyecto, ve a la página de bienvenida de la consola de Google Cloud o ejecuta el siguiente comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril de 2021 o antes de esa fecha, para admitir solicitudes de envío 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 otorga 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

¿Qué sigue?