Roles y permisos de un endpoint HTTP interno en una red de VPC

En este documento se explica cómo asignar roles y permisos de Identity and Access Management (IAM) para admitir el enrutamiento de eventos desde Google Cloud a un endpoint HTTP interno en una red de nube privada virtual (VPC) mediante Eventarc.

  1. 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):

    1. 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.
    2. 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.
  2. 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.

  3. Concede permisos a los agentes de servicios de Google:

    1. Si el URI del endpoint HTTP interno usa el nombre de DNS interno de un servicio que se puede resolver mediante Cloud DNS, asigna el rol Peer de Cloud DNS.
    2. Si vas a crear un activador para eventos directos de Cloud Storage, asigna el rol Pub/Sub Publisher.
    3. 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.

  1. 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 de PRINCIPAL_TYPE, consulta la referencia de Policy Binding.
  2. 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 el artículo Suplantación de identidad 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.

  1. 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 servicio
    • DISPLAY_NAME: el nombre de la cuenta de servicio que se mostrará en la consola Google Cloud
  2. 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 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.

  1. Si el URI del endpoint HTTP interno de la red VPC usa el nombre DNS interno de un servicio que se puede resolver mediante Cloud DNS, para acceder a las redes de destino con zonas de peering de DNS, asigna el rol Peer de DNS (roles/dns.peer) en el proyecto host de la VPC al agente de servicio de Eventarc:

    gcloud projects add-iam-policy-binding VPC_HOST_PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com \
        --role=roles/dns.peer

    Haz los cambios siguientes:

    • VPC_HOST_PROJECT_ID: el Google Cloud ID de proyecto del proyecto host de la VPC. Cuando usas VPC compartida, asocias uno o varios proyectos de servicio al proyecto host, lo que permite que los recursos de varios proyectos se conecten a una red de VPC común.

      Ten en cuenta que, en función de cómo hayas configurado la red de VPC, el proyecto host de la VPC también puede ser tu proyecto de activador de Eventarc.

    • PROJECT_NUMBER: el número de proyecto Google Cloud del proyecto de activador de Eventarc. 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)'
  2. 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)'
  3. 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