Roles y permisos para un extremo HTTP interno en una red de VPC

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 a un extremo HTTP interno en una red de nube privada virtual (VPC) mediante 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 a los agentes de servicio de Google:

    1. Si el URI del extremo HTTP interno usa el nombre de DNS interno de un servicio que Cloud DNS puede resolver, otorga la función Par de Cloud DNS.
    2. Si creas un activador para eventos directos desde Cloud Storage, otorga el rol de publicador de Pub/Sub.
    3. 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. Para obtener más información, consulta Identidad temporal como cuenta de servicio.

    Puedes otorgar el rol en el proyecto para permitir que la principal actúe en nombre 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 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 el URI del extremo HTTP interno en la red de VPC usa el nombre de DNS interno de un servicio que Cloud DNS puede resolver, para acceder a las redes de destino con zonas de intercambio de tráfico de DNS, otorga el rol de intercambio de tráfico de DNS (roles/dns.peer) en el proyecto host de 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

    Reemplaza lo siguiente:

    • VPC_HOST_PROJECT_ID: El ID del proyecto de Google Cloud para el proyecto host de VPC. Cuando usas una VPC compartida, adjuntas uno o más 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, según cómo hayas configurado la red de VPC, el proyecto host de VPC también podría ser el proyecto activador de Eventarc.

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