Freigeben über


Bereitstellen von Ereignissen an von Microsoft Entra geschützte Endpunkte

In diesem Artikel wird beschrieben, wie Sie die Ereignisübermittlung von Azure Event Grid (Ereignisabonnements) an Ihre Webhook-Endpunkte mithilfe der Microsoft Entra ID-Authentifizierung sichern. Sie erfahren, wie Sie Microsoft Entra-Anwendungen konfigurieren und die entsprechenden Rollen zuweisen, um authentifizierte Verbindungen zwischen Event Grid und Ihren Webhooks einzurichten. Der Artikel verwendet das Azure-Portal zur Demonstration. Sie können das Feature jedoch auch mithilfe von CLI, PowerShell oder SDKs aktivieren.

Wichtig

Um eine Sicherheitslücke zu beheben, hat Microsoft im Rahmen der Erstellung oder Aktualisierung eines Ereignisabonnements am 30. März 2021 eine zusätzliche Zugriffsüberprüfung eingeführt. Der Dienstprinzipal des Abonnentenclients muss entweder Eigentümer sein oder eine Rolle auf dem Dienstprinzipal der Zielanwendung zugewiesen bekommen haben. Konfigurieren Sie Ihre Microsoft Entra-Anwendung neu, indem Sie den neuen Anweisungen in diesem Artikel folgen. Eine Übersicht über Microsoft Entra-Anwendungen und -Dienstprinzipale finden Sie unter Microsoft Identity Platform (v2.0): Übersicht.

Szenarien

In diesem Artikel wird ausführlich erläutert, wie Sie die folgenden beiden Szenarien implementieren:

Ereignisse an einen Webhook innerhalb desselben Microsoft Entra-Mandanten senden

Das folgende Diagramm zeigt, wie Event Grid Ereignisse an einen Webhook innerhalb desselben Mandanten wie das Ereignisabonnement übermittelt.

Darstellung der sicheren Übermittlung von Ereignissen an einen Webhook im selben Mandanten

Dieser Abschnitt enthält zwei Unterabschnitte. Lesen Sie beide Szenarien oder die Szenarien, die Sie interessiert.

Konfigurieren des Ereignisabonnements mithilfe eines Microsoft Entra-Benutzers

In diesem Abschnitt wird gezeigt, wie Sie das Ereignisabonnement mithilfe eines Microsoft Entra-Benutzers konfigurieren.

  1. Erstellen Sie eine Microsoft Entra-Anwendung für den Webhook, der für die Zusammenarbeit mit Microsoft Entra (einzelner Mandant) konfiguriert ist.

  2. Öffnen Sie die Azure-Shell im Mandanten, und wählen Sie die PowerShell-Umgebung aus.

  3. Ändern Sie den Wert von $webhookAadTenantId, um eine Verbindung mit dem Mandanten herzustellen.

    • Variables:
      • $webhookAadTenantId: Azure-Mandanten-ID
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  4. Öffnen Sie das folgende Skript, aktualisieren Sie die Werte von $webhookAppObjectId und $eventSubscriptionWriterUserPrincipalName mit Ihren Bezeichnern, und fahren Sie dann mit dem Ausführen des Skripts fort.

    • Variables:
      • $webhookAppObjectId: Für den Webhook erstellte Microsoft Entra-Anwendungs-ID
      • $eventSubscriptionWriterUserPrincipalName: Azure-Benutzerprinzipalname des Benutzers, der das Ereignisabonnement erstellt

    Hinweis

    Sie müssen den Wert von $eventGridAppId nicht ändern. In diesem Skript wird AzureEventGridSecureWebhookSubscriber als $eventGridRoleName festgelegt. Denken Sie daran, dass Sie Mitglied der Rolle Microsoft Entra-Anwendungsadministrator oder Besitzer des Dienstprinzipals der Webhook-App in Microsoft Entra ID sein müssen, um dieses Skript ausführen zu können.

    Wenn die folgende Fehlermeldung angezeigt wird, müssen Sie auf den Dienstprinzipal heraufgestuft werden. Am 30. März 2021 wurde eine zusätzliche Zugriffsprüfung für das Erstellen oder Aktualisieren eines Ereignisabonnements eingeführt, um ein Sicherheitsrisiko zu beheben. Der Dienstprinzipal des Abonnentenclients muss entweder ein Besitzer sein oder über eine Rollenzuweisung auf dem Dienstprinzipal der Zielanwendung verfügen.

    New-MgServicePrincipalAppRoleAssignment: Error occurred while executing NewServicePrincipalAppRoleAssignment
    Code: Authorization_RequestDenied
    Message: Insufficient privileges to complete the operation.
    
  5. Führen Sie beim Erstellen eines Ereignisabonnements im Portal die folgenden Schritte aus:

    1. Wählen Sie den Endpunkttyp als Webhook aus.

    2. Geben Sie den URI des Endpunkts an.

      Screenshot der Auswahl des Endpunkttyp-Webhooks im Azure-Portal.

    3. Wählen Sie oben auf der Seite Ereignisabonnements erstellen die Registerkarte Zusätzliche Features aus.

    4. Führen Sie auf der Registerkarte Zusätzliche Features die folgenden Schritte aus:

      1. Wählen Sie Microsoft Entra-Authentifizierung verwenden aus, und konfigurieren Sie die Mandanten-ID und die Anwendungs-ID:

      2. Kopieren Sie die Microsoft Entra-Mandanten ID aus der Ausgabe des Skripts, und geben Sie sie in das Feld Microsoft Entra-Mandanten ID ein.

      3. Kopieren Sie die Microsoft Entra-Anwendungs ID aus der Ausgabe des Skripts, und geben Sie sie in das Feld Microsoft Entra-Anwendungs ID ein. Sie können die Microsoft Entra-Anwendungskennung-URI anstelle der Anwendungskennung verwenden. Weitere Informationen zum URI der Anwendungs-ID finden Sie in diesem Artikel.

        Screenshot der Konfiguration sicherer Webhook-Aktionen im Azure-Portal.

Konfigurieren des Ereignisabonnements mithilfe einer Microsoft Entra-Anwendung

In diesem Abschnitt wird gezeigt, wie Sie das Ereignisabonnement mit einer Microsoft Entra-Anwendung konfigurieren.

  1. Erstellen Sie eine Microsoft Entra-Anwendung für den Event Grid-Abonnementwriter, der für die Zusammenarbeit mit Microsoft Entra (einzelner Mandant) konfiguriert ist.

  2. Erstellen Sie ein geheimen Schlüssel für die Microsoft Entra-Anwendung, und speichern Sie den Wert (Sie benötigen diesen Wert später).

  3. Wechseln Sie zur Seite Zugriffssteuerung (IAM) für das Event Grid-Thema, und weisen Sie der Writer-App für das Event Grid-Abonnement die Rolle Event Grid-Mitwirkender zu. Dieser Schritt ermöglicht Ihnen den Zugriff auf die Event Grid-Ressource, wenn Sie sich mit der Microsoft Entra-Anwendung über die Azure-Befehlszeilenschnittstelle bei Azure angemeldet haben.

  4. Erstellen Sie eine Microsoft Entra-Anwendung für den Webhook, der für die Zusammenarbeit mit Microsoft Entra (einzelner Mandant) konfiguriert ist.

  5. Öffnen Sie die Azure-Shell im Mandanten, und wählen Sie die PowerShell-Umgebung aus.

  6. Ändern Sie den Wert von $webhookAadTenantId, um eine Verbindung mit dem Mandanten herzustellen.

    • Variables:
      • $webhookAadTenantId: Azure-Mandanten-ID
    $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
    Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
    
  7. Öffnen Sie das folgende Skript, aktualisieren Sie die Werte von $webhookAppObjectId und $eventSubscriptionWriterAppId mit Ihren Bezeichnern, und fahren Sie dann mit dem Ausführen des Skripts fort.

    • Variables:
      • $webhookAppObjectId: Für den Webhook erstellte Microsoft Entra-Anwendungs-ID
      • $eventSubscriptionWriterAppId: Microsoft Entra-Anwendungs-ID für die Writer-App des Event Grid-Abonnements.

    Hinweis

    Sie müssen den Wert von $eventGridAppId nicht ändern. In diesem Skript entspricht AzureEventGridSecureWebhookSubscriber der Festlegung für den $eventGridRoleName. Denken Sie daran, dass Sie Mitglied der Rolle Microsoft Entra-Anwendungsadministrator oder Besitzer des Dienstprinzipals der Webhook-App in Microsoft Entra ID sein müssen, um dieses Skript ausführen zu können.

  8. Melden Sie sich als Microsoft Entra-Anwendung für das Event Grid-Abonnement Autor an, indem Sie den Befehl ausführen.

    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. Erstellen Sie Ihr Abonnement, indem Sie den Befehl ausführen.

    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
    

    Hinweis

    In diesem Szenario wird ein Systemthema verwendet. Um ein Abonnement für benutzerdefinierte Themen oder Domänen mithilfe der Azure-Befehlszeilenschnittstelle zu erstellen, sehen Sie sich die Referenz zur Befehlszeilenschnittstelle an.

  10. Wenn Sie alles richtig konfiguriert haben, können Sie das Webhook-Abonnement in Ihrem Event Grid-Thema erstellen.

    Hinweis

    Nun übergibt Event Grid das Microsoft Entra-Bearer-Token in jeder Nachricht an den Webhook-Client. Sie müssen das Autorisierungstoken in Ihrem Webhook validieren.

Ereignisse an einen Webhook in einem anderen Microsoft Entra-Mandanten senden

Um die Verbindung zwischen Ihrem Ereignisabonnement und Ihrem Webhook-Endpunkt zu sichern, der sich in verschiedenen Microsoft Entra-Mandanten befindet, verwenden Sie eine Microsoft Entra-ID-Anwendung, wie in diesem Abschnitt gezeigt. Derzeit können Sie diese Verbindung nicht mithilfe eines Microsoft Entra ID-Benutzers im Azure-Portal sichern.

Screenshot von Mehrinstanzenereignissen mit Microsoft Entra ID- und Webhooks-Diagramm.

Führen Sie basierend auf der Abbildung die nächsten Schritte aus, um beide Mandanten zu konfigurieren.

Mieter A

Führen Sie die folgenden Schritte in Mandant A aus:

  1. Erstellen Sie eine Microsoft Entra-Anwendung für den Event Grid-Abonnementwriter, der für die Zusammenarbeit mit jeder Microsoft Entra-Instanz (mehrinstanzenfähig) konfiguriert ist.

  2. Erstellen Sie ein Geheimnis für die Microsoft Entra-Anwendung, und speichern Sie den Wert (Sie benötigen diesen Wert später).

  3. Wechseln Sie zur Seite "Access Control (IAM)" für das Thema "Event Grid". Weisen Sie der Microsoft Entra-Anwendung des Event Grid-Abonnement-Autors die Rolle "Ereignisraster-Mitwirkender" zu. Dieser Schritt gewährt der Anwendung Zugriff auf die Event Grid-Ressource, wenn Sie sich mit der Microsoft Entra-Anwendung und der Azure CLI bei Azure anmelden.

Mandant B

Führen Sie in Mandant B die folgenden Schritte aus:

  1. Erstellen Sie eine Microsoft Entra-Anwendung für den Webhook, der für die Arbeit mit Microsoft Entra (einzelner Mandant) konfiguriert ist.

  2. Öffnen Sie die Azure-Shell und wählen Sie die PowerShell-Umgebung aus.

  3. Ändern Sie den $webhookAadTenantId Wert, um eine Verbindung mit Mandant B herzustellen.

    • Variablen:

      • $webhookAadTenantId: Azure-Mandanten-ID für Mandanten B
      $webhookAadTenantId = "[REPLACE_WITH_YOUR_TENANT_ID]"
      Connect-MgGraph -TenantId $webhookAadTenantId -Scopes "Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All"
      
  4. Öffnen Sie das folgende Skript, und aktualisieren Sie die Werte von $webhookAppObjectId und $eventSubscriptionWriterAppId mit Ihren Bezeichnern. Führen Sie dann das Skript aus.

    • Variables:
      • $webhookAppObjectId: Für den Webhook erstellte Microsoft Entra-Anwendungs-ID

      • $eventSubscriptionWriterAppId: Microsoft Entra-Anwendungs-ID für Event Grid-Abonnementverfasser

        Hinweis

        Sie müssen den Wert von $eventGridAppId nicht ändern. In diesem Skript wird AzureEventGridSecureWebhookSubscriber für $eventGridRoleName eingestellt. Denken Sie daran, dass Sie Mitglied der Rolle Microsoft Entra-Anwendungsadministrator oder Besitzer des Dienstprinzipals der Webhook-App in Microsoft Entra ID sein müssen, um dieses Skript ausführen zu können.

    Wenn die folgende Fehlermeldung angezeigt wird, müssen Sie auf den Dienstprinzipal heraufgestuft werden. Am 30. März 2021 wurde eine zusätzliche Zugriffsprüfung für das Erstellen oder Aktualisieren eines Ereignisabonnements eingeführt, um ein Sicherheitsrisiko zu beheben. Der Dienstprinzipal des Abonnentenclients muss entweder ein Besitzer sein oder über eine Rollenzuweisung auf dem Dienstprinzipal der Zielanwendung verfügen.

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

Mieter A

Führen Sie in Mandant A die folgenden Schritte aus:

  1. Öffnen Sie die Azure Shell und melden Sie sich als Event Grid-Abonnement-Autor der Microsoft Entra-Anwendung an, indem Sie den Befehl ausführen.

    az login --service-principal -u [REPLACE_WITH_APP_ID] -p [REPLACE_WITH_SECRET_VALUE] --tenant [REPLACE_WITH_TENANT_ID]
    
  2. Erstellen Sie Ihr Abonnement, indem Sie den Befehl ausführen.

    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
    

    Hinweis

    In diesem Szenario verwenden Sie ein Event Grid-Systemthema. Informationen zum Erstellen eines Abonnements für benutzerdefinierte Themen oder Event Grid-Domänen mithilfe der Azure CLI finden Sie hier.

  3. Wenn Sie alles richtig konfiguriert haben, können Sie das Webhook-Abonnement in Ihrem Event Grid-Thema erstellen.

    Hinweis

    Zu diesem Zeitpunkt übergibt Event Grid das Microsoft Entra Bearer-Token in jeder Nachricht an den Webhook-Client. Sie müssen das Autorisierungstoken in Ihrem Webhook validieren.