Entrega de eventos a puntos de conexión protegidos por Microsoft Entra

En este artículo se describe cómo usar Microsoft Entra ID para proteger la conexión entre su suscripción de eventos y el punto de conexión de webhook. En este artículo, se usa Azure Portal para la demostración; sin embargo, la característica también se puede habilitar con la CLI, PowerShell o los SDK.

Importante

La comprobación de acceso adicional se introdujo como parte de la creación o actualización de la suscripción de eventos el 30 de marzo de 2021 para solucionar una vulnerabilidad de seguridad. La entidad de servicio del cliente de suscriptor debe ser un propietario o tener un rol asignado en la entidad de servicio de la aplicación de destino. Vuelva a configurar la aplicación de Microsoft Entra con las instrucciones nuevas que aparecen a continuación. Para información general de las entidades de servicio y las aplicaciones de Microsoft Entra consulte Introducción de la Plataforma de identidad de Microsoft (versión 2.0).

Escenarios

En este artículo, se explica en detalle cómo implementar los dos escenarios siguientes:

Entrega de eventos a un webhook en el mismo inquilino de Microsoft Entra

En el diagrama siguiente, se muestra cómo se entregan los eventos de Event Grid a un webhook en el mismo inquilino que la suscripción de eventos.

Image that depicts secure delivery of events to a webhook that's in the same tenant.

Esta sección tiene dos subsecciones. Lea ambos escenarios o solo el que le interesa.

Configuración de la suscripción de eventos mediante un usuario de Microsoft Entra

En esta sección, se muestra cómo configurar la suscripción de eventos mediante un usuario de Microsoft Entra.

  1. Cree una aplicación de Microsoft Entra para el webhook que ha configurado para que funcione con la instancia de Microsoft Entra (inquilino único).

  2. Abra Azure Shell en el inquilino y seleccione el entorno de PowerShell.

  3. Modifique el valor de $webhookAadTenantId para conectarse al inquilino.

    • Variables:
      • $webhookAadTenantId: id. del inquilino de Azure.
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  4. Abra el siguiente script y actualice los valores de $webhookAppObjectId y $eventSubscriptionWriterUserPrincipalName con los identificadores y, a continuación, ejecute el script.

    • Variables:
      • $webhookAppObjectId: Identificador de aplicación de Microsoft Entra creado para el webhook
      • $eventSubscriptionWriterUserPrincipalName: nombre principal de usuario de Azure del usuario que crea la suscripción de eventos.

    Nota:

    No es necesario modificar el valor de $eventGridAppId. En este script, AzureEventGridSecureWebhookSubscriber se establece para $eventGridRoleName. Recuerde que debe ser miembro del rol Administrador de aplicaciones de Microsoft Entra o propietario de la entidad de servicio de la aplicación de webhook en Microsoft Entra ID para ejecutar este script.

    Si ve el siguiente mensaje de error, debe elevarlo a la entidad de servicio. Se introdujo una comprobación de acceso adicional como parte de la creación o actualización de la suscripción de eventos el 30 de marzo de 2021 para solucionar una vulnerabilidad de seguridad. La entidad de servicio del cliente de suscriptor debe ser un propietario o tener un rol asignado en la entidad de servicio de la aplicación de destino.

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    
  5. Cuando cree una suscripción de eventos en el portal, siga los siguientes pasos:

    1. Para el tipo de punto de conexión, seleccione Webhook.

    2. Especifique el identificador URI del punto de conexión.

      Select endpoint type webhook

    3. Seleccione la pestaña Características adicionales en la parte superior de la página Crear suscripciones a eventos .

    4. En la pestaña Características adicionales, siga estos pasos:

      1. Seleccione Usar autenticación de Microsoft Entra y configure el identificador de inquilino y el identificador de aplicación:

      2. Copie el identificador de inquilino de Microsoft Entra de la salida del script y escríbalo en el campo Id. de inquilino de Microsoft Entra.

      3. Copie el identificador de aplicación de Microsoft Entra de la salida del script y escríbalo en el campo Id. de aplicación de Microsoft Entra. Puede usar el URI del identificador de aplicación de Microsoft Entra en lugar de usar el identificador de aplicación. Para obtener más información sobre la URI del identificador, consulte este artículo.

        Secure Webhook action

Configuración de la suscripción de eventos mediante una aplicación de Microsoft Entra

En esta sección, se muestra cómo configurar la suscripción de eventos mediante una configuración de Microsoft Entra.

  1. Cree una aplicación de Microsoft Entra para el escritor de suscripciones de Event Grid que ha configurado para que funcione con la instancia de Microsoft Entra (inquilino único).

  2. Cree un secreto para la aplicación de Microsoft Entra y guarde el valor (lo necesita más adelante).

  3. Vaya a la página Control de acceso (IAM) del tema de Event Grid y asigne el rol Colaborador de Event Grid a la aplicación de escritura de suscripciones de Event Grid. Este paso le permite tener acceso al recurso de Event Grid al iniciar sesión en Azure con la aplicación de Microsoft Entra mediante la CLI de Azure.

  4. Cree una aplicación de Microsoft Entra para el webhook que ha configurado para que funcione con la instancia de Microsoft Entra (inquilino único).

  5. Abra Azure Shell en el inquilino y seleccione el entorno de PowerShell.

  6. Modifique el valor de $webhookAadTenantId para conectarse al inquilino.

    • Variables:
      • $webhookAadTenantId: id. del inquilino de Azure.
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  7. Abra el siguiente script y actualice los valores de $webhookAppObjectId y $eventSubscriptionWriterAppId con los identificadores y, a continuación, ejecute el script.

    • Variables:
      • $webhookAppObjectId: Identificador de aplicación de Microsoft Entra creado para el webhook
      • $eventSubscriptionWriterAppId: identificador de aplicación de Microsoft Entra para la aplicación de escritura de suscripciones de Event Grid.

    Nota:

    No es necesario modificar el valor de $eventGridAppId. En este script, AzureEventGridSecureWebhookSubscriber se establece para $eventGridRoleName. Recuerde que debe ser miembro del rol Administrador de aplicaciones de Microsoft Entra o propietario de la entidad de servicio de la aplicación de webhook en Microsoft Entra ID para ejecutar este script.

  8. Ejecute el comando para iniciar sesión como la aplicación de Microsoft Entra del escritor de suscripciones de Event Grid.

    az login --service-principal -u [REPLACE_WITH_EVENT_GRID_SUBSCRIPTION_WRITER_APP_ID] -p [REPLACE_WITH_EVENT_GRID_SUBSCRIPTION_WRITER_APP_SECRET_VALUE] --tenant [REPLACE_WITH_TENANT_ID]
    
  9. Cree la suscripción ejecutando el comando.

    az eventgrid system-topic event-subscription create --name [REPLACE_WITH_SUBSCRIPTION_NAME] -g [REPLACE_WITH_RESOURCE_GROUP] --system-topic-name [REPLACE_WITH_SYSTEM_TOPIC] --endpoint [REPLACE_WITH_WEBHOOK_ENDPOINT] --event-delivery-schema [REPLACE_WITH_WEBHOOK_EVENT_SCHEMA] --azure-active-directory-tenant-id [REPLACE_WITH_TENANT_ID] --azure-active-directory-application-id-or-uri [REPLACE_WITH_APPLICATION_ID_FROM_SCRIPT] --endpoint-type webhook
    

    Nota

    En este escenario, se usa un tema del sistema. Si desea crear una suscripción para dominios o temas personalizados mediante la CLI de Azure, consulte la referencia de la CLI.

  10. Si todo se configuró correctamente, puede crear correctamente la suscripción de webhook en el tema de Event Grid.

    Nota:

    En este momento, Event Grid pasa el token de portador de Microsoft Entra al cliente de webhook en cada mensaje. Deberá validar el token de autorización en el webhook.

Entrega de eventos a un webhook en un inquilino de Microsoft Entra diferente

Para proteger la conexión entre la suscripción de eventos y el punto de conexión de webhook que se encuentran en inquilinos de Microsoft Entra diferentes, debe usar una aplicación de Microsoft Entra como se muestra en esta sección. Actualmente, no es posible proteger esta conexión mediante un usuario de Microsoft Entra en Azure Portal.

Multitenant events with Microsoft Entra ID and Webhooks

En función del diagrama, siga los pasos que se indican a continuación para configurar ambos inquilinos.

Inquilino A

Siga estos pasos en el inquilino A:

  1. Cree una aplicación de Microsoft Entra para el escritor de suscripciones de Event Grid que ha configurado para que funcione con cualquier instancia de Microsoft Entra (multiinquilino).

  2. Cree un secreto para la aplicación de Microsoft Entra y guarde el valor (lo necesita más adelante).

  3. Vaya a la página Control de acceso (IAM) para el tema de Event Grid. Asigne el rol Colaborador de Event Grid a la aplicación de Microsoft Entra del escritor de suscripciones de Event Grid. Este paso permite que la aplicación tenga acceso al recurso de Event Grid al iniciar sesión en Azure con la aplicación de Microsoft Entra mediante la CLI de Azure.

Inquilino B

Siga estos pasos en el inquilino B:

  1. Cree una aplicación de Microsoft Entra para el webhook que ha configurado para que funcione con la instancia de Microsoft Entra (inquilino único).

  2. Abra Azure Shell y seleccione el entorno de PowerShell.

  3. Modifique el valor de $webhookAadTenantId para conectarse al inquilino B.

    • Variables:

      • $webhookAadTenantId: id. del inquilino de Azure para el inquilino B
      $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
      Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
      
  4. Abra el siguiente script y actualice los valores de $webhookAppObjectId y $eventSubscriptionWriterAppId con los identificadores y, luego, ejecute el script.

    • Variables:
      • $webhookAppObjectId: Identificador de aplicación de Microsoft Entra creado para el webhook

      • $eventSubscriptionWriterAppId: identificador de aplicación de Microsoft Entra para el escritor de suscripciones de Event Grid

        Nota:

        No es necesario modificar el valor de $eventGridAppId. En este script, AzureEventGridSecureWebhookSubscriber se establece para $eventGridRoleName. Recuerde que debe ser miembro del rol Administrador de aplicaciones de Microsoft Entra o propietario de la entidad de servicio de la aplicación de webhook en Microsoft Entra ID para ejecutar este script.

    Si ve el siguiente mensaje de error, debe elevarlo a la entidad de servicio. Se introdujo una comprobación de acceso adicional como parte de la creación o actualización de la suscripción de eventos el 30 de marzo de 2021 para solucionar una vulnerabilidad de seguridad. La entidad de servicio del cliente de suscriptor debe ser un propietario o tener un rol asignado en la entidad de servicio de la aplicación de destino.

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    

Inquilino A

De nuevo en el inquilino A, siga estos pasos:

  1. Abra Azure Shell e inicie sesión como la aplicación de Microsoft Entra del escritor de suscripciones de Event Grid mediante la ejecución del comando.

    az login --service-principal -u [REPLACE_WITH_APP_ID] -p [REPLACE_WITH_SECRET_VALUE] --tenant [REPLACE_WITH_TENANT_ID]
    
  2. Cree la suscripción ejecutando el comando.

    az eventgrid system-topic event-subscription create --name [REPLACE_WITH_SUBSCRIPTION_NAME] -g [REPLACE_WITH_RESOURCE_GROUP] --system-topic-name [REPLACE_WITH_SYSTEM_TOPIC] --endpoint [REPLACE_WITH_WEBHOOK_ENDPOINT] --event-delivery-schema [REPLACE_WITH_WEBHOOK_EVENT_SCHEMA] --azure-active-directory-tenant-id [REPLACE_WITH_TENANT_B_ID] --azure-active-directory-application-id-or-uri [REPLACE_WITH_APPLICATION_ID_FROM_SCRIPT] --endpoint-type webhook
    

    Nota

    En este escenario, se usa un tema del sistema de Event Grid. Acceda aquí si quiere crear una suscripción para temas personalizados o para dominios de Event Grid mediante la CLI de Azure.

  3. Si todo se configuró correctamente, puede crear correctamente la suscripción de webhook en el tema de Event Grid.

    Nota:

    En este momento, Event Grid pasa el token de portador de Microsoft Entra al cliente de webhook en cada mensaje. Deberá validar el token de autorización en el webhook.

Pasos siguientes