Empfangen von Änderungsbenachrichtigungen über Azure Event Hubs

Webhooks eignen sich nicht für den Empfang von Änderungsbenachrichtigungen in Szenarien mit hohem Durchsatz oder wenn der Empfänger keine öffentlich verfügbare Benachrichtigungs-URL verfügbar machen kann. Alternativ können Sie Azure Event Hubs verwenden.

Beispiele für Szenarien mit hohem Durchsatz, in denen Sie Azure Event Hubs verwenden können, sind Anwendungen, die eine große Menge von Ressourcen abonnieren, Anwendungen, die Ressourcen abonnieren, die sich häufig ändern, und mehrinstanzenfähige Anwendungen, die Ressourcen in einer großen Gruppe von Organisationen abonnieren.

Der Artikel führt Sie durch den Prozess der Verwaltung Ihres Microsoft Graph-Abonnements und den Empfang von Änderungsbenachrichtigungen über Azure Event Hubs.

Wichtig

Die Authentifizierung von Event Hubs mithilfe von Shared Access Signatures (SAS) ist in Zukunft veraltet. Es wird empfohlen, Event Hubs stattdessen mithilfe Microsoft Entra ID rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) zu authentifizieren.

Verwenden von Azure Event Hubs zum Empfangen von Änderungsbenachrichtigungen

Azure Event Hubs ist ein beliebter Echtzeitereignis-Erfassungs- und Verteilungsdienst, der für große Maßstäbe entwickelt wurde. Die Verwendung von Azure Event Hubs für den Erhalt von Änderungsbenachrichtigungen unterscheidet sich in mehrfacher Hinsicht von Webhooks, darunter:

  • Sie sind nicht auf öffentlich verfügbare Benachrichtigungs-URLs angewiesen. Das Event Hubs SDK leitet die Benachrichtigungen an Ihre Anwendung weiter.
  • Sie müssen auf die Überprüfung der Benachrichtigungs-URL nicht antworten. Sie können die empfangene Überprüfungsnachricht ignorieren.
  • Sie müssen einen Event Hub bereitstellen.
  • Sie müssen eine Azure-Key Vault bereitstellen oder den Microsoft Graph-Änderungsnachverfolgung-Dienst der Rolle "Datensender" auf Ihrem Event Hub hinzufügen.

Einrichten der Azure Event Hubs-Authentifizierung

Azure Event Hubs unterstützt die Authentifizierung entweder über Shared Access Signatures (SAS) oder Microsoft Entra ID rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC). Weitere Informationen finden Sie unter Autorisieren des Zugriffs auf Azure Event Hubs.

In diesem Abschnitt wird veranschaulicht, wie Sie Azure Event Hubs-Authentifizierung mithilfe Microsoft Entra ID rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) auf dem Azure-Portal einrichten.

Konfigurieren des Event Hubs
  1. Melden Sie sich beim Azure-Portal mit Berechtigungen zum Erstellen von Ressourcen in Ihrem Azure-Abonnement an.
  2. Wählen Sie Ressource erstellen aus, geben Sie Event Hubs in die Suchleiste ein, und wählen Sie dann den Event Hubs-Vorschlag aus.
  3. Wählen Sie auf der Seite Event Hubs-Erstellung die Option Erstellen aus.
  4. Geben Sie die Details zur Erstellung des Event Hubs-Namespaces ein, und wählen Sie dann Erstellen aus.
  5. Wenn der Event Hubs-Namespace bereitgestellt wird, wechseln Sie zur Seite für den Namespace.
  6. Wählen Sie Event Hubs und dann + Event Hub aus.
  7. Geben Sie dem neuen Event Hub einen Namen, und wählen Sie Erstellen aus.
  8. Nachdem der Event Hub erstellt wurde, wechseln Sie zum Event Hubs-Namespace, und wählen Sie dann auf der Randleiste Access Control (IAM) aus.
  9. Wählen Sie Rollenzuweisungen aus.
  10. Wählen Sie + Hinzufügen und dann Rollenzuweisung hinzufügen aus.
  11. Wechseln Sie unter Rolle zu Auftragsfunktionsrollen, wählen Sie Azure Event Hubs Datensender und dann Weiter aus.
  12. Wählen Sie auf der Registerkarte Mitglieder die Option Zugriff auf Benutzer, Gruppe oder Dienstprinzipal zuweisen aus.
  13. Wählen Sie + Mitglieder auswählen aus, suchen Sie nach Microsoft Graph Änderungsnachverfolgung, und wählen Sie sie aus.
  14. Wählen Sie Überprüfen + zuweisen aus, um den Vorgang abzuschließen.

Erstellen des Abonnements und Empfangen von Benachrichtigungen

Nachdem Sie die erforderlichen Azure KeyVault- und Azure Event Hubs-Dienste erstellt haben, können Sie jetzt Ihr Abonnement für Änderungsbenachrichtigungen erstellen und mit dem Empfangen von Änderungsbenachrichtigungen über Azure Event Hubs beginnen.

Erstellen des Abonnements

Das Erstellen eines Abonnements zum Empfangen von Änderungsbenachrichtigungen mit Event Hubs ist nahezu identisch mit der Erstellung eines Webhookabonnements, weist jedoch wichtige Änderungen in der notificationUrl-Eigenschaft auf. Überprüfen Sie zunächst die Schritte zur Erstellung eines Webhookabonnements , bevor Sie fortfahren.

Bei der Abonnementerstellung muss notificationUrl auf Ihren Event Hubs-Speicherort verweisen.

Wenn Sie die rollenbasierte Zugriffssteuerung verwenden, sieht die notificationUrl-Eigenschaft wie folgt aus:

EventHub:https://<eventhubnamespace>.servicebus.windows.net/eventhubname/<eventhubname>?tenantId=<domainname>

  • <eventhubnamespace> ist der Name, den Sie dem Event Hubs-Namespace geben. Sie finden sie auf der Übersichtsseite für Event Hubs unter Hostname.
  • <eventhubname> ist der Name, den Sie dem Event Hub geben. Sie finden sie unter Event Hubs –> Übersicht –> Event Hubs.
  • <domainname> ist der Name Ihres Mandanten; Beispiel: contoso.com. Da diese Domäne für den Zugriff auf die Azure Event Hubs verwendet wird, ist es wichtig, dass sie mit der Domäne übereinstimmt, die vom Azure-Abonnement verwendet wird, das die Azure Event Hubs enthält. Um diese Informationen zu erhalten, wählen Sie im Azure-Portal das Menü Microsoft Entra ID aus, und überprüfen Sie die Seite Übersicht. Der Domänenname wird unter der primären Domäne angezeigt.

Hinweis

Doppelte Abonnements sind nicht zulässig. Wenn eine Abonnementanforderung die gleichen Werte für changeType und die Ressource enthält, die ein vorhandenes Abonnement enthält, schlägt die Anforderung mit einem HTTP-Fehlercode 409 Conflictund der Fehlermeldung Subscription Id <> already exists for the requested combinationfehl.

Migrieren einer Event Hub-Authentifizierung zu Microsoft Entra ID RBAC

Die Authentifizierung von Event Hubs mithilfe von Shared Access Signatures (SAS) ist in Zukunft veraltet. Es wird empfohlen, Event Hubs stattdessen mithilfe Microsoft Entra ID rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) zu authentifizieren.

In diesem Abschnitt erfahren Sie, wie Sie Ihre vorhandenen Event Hubs mit SAS-Authentifizierung zu Microsoft Entra ID RBAC-Authentifizierung migrieren. Verwenden Sie denselben Event Hub-Namespace, den Sie für die SAS-Authentifizierung verwendet haben, entweder über die Azure CLI oder die Azure-Portal.

  1. Erstellen Sie unter demselben Event Hub-Namespace, den Sie für Ihr vorhandenes Abonnement verwenden, einen neuen Event Hub.
  2. Erstellen Sie ein neues Abonnement mit den gleichen Details wie das vorhandene Abonnement, außer mit dem Namen des neuen Event Hubs aus dem vorherigen Schritt in der URL. Weitere Informationen finden Sie unter Erstellen des Abonnements: Verwenden von RBAC.

Sie erhalten Benachrichtigungen auf dem neuen Event Hub. Sie können überprüfen, ob der Datenverkehr dem alten Abonnement ähnelt, indem Sie das Diagramm Nachrichten für den Event Hub überprüfen. Überprüfen Sie außerdem, ob fehler oder fehler beim Empfangen von Benachrichtigungen vorliegen.

Nachdem Sie überprüft haben, dass Sie Benachrichtigungen erhalten und der neue Event Hub ordnungsgemäß funktioniert, können Sie das alte Abonnement, den alten Event Hub und die SAS-basierte Authentifizierung löschen und mit der Verwendung des neuen Abonnements beginnen.

Empfangen von Benachrichtigungen

Änderungsbenachrichtigungen werden jetzt von Event Hubs an Ihre Anwendung übermittelt. Ausführliche Informationen finden Sie unter Empfangen von Ereignissen in der Dokumentation zu Event Hubs.

Bevor Sie die Benachrichtigungen in Ihrer Anwendung erhalten können, müssen Sie eine weitere SAS-Richtlinie mit der Berechtigung "Lauschen" erstellen und die Verbindungszeichenfolge abrufen, ähnlich den Schritten unter Konfigurieren des Event Hubs.

Tipp

Erstellen Sie eine separate Richtlinie für die Anwendung, die auf Event Hubs-Nachrichten lauscht, anstatt die gleichen Verbindungszeichenfolge wiederzuverwenden, die Sie in Azure KeyVault festgelegt haben. Diese Trennung folgt dem Prinzip der geringsten Rechte, indem sichergestellt wird, dass jede Komponente der Lösung nur über die erforderlichen Berechtigungen verfügt.

Behandeln von Validierungsbenachrichtigungen

Ihre Anwendung empfängt Validierungsbenachrichtigungen, wenn sie ein neues Abonnement erstellt. Sie sollten diese Benachrichtigungen ignorieren. Das folgende Beispiel stellt den Text einer Gültigkeitsprüfungsmeldung dar.

 {
    "value":[
        {
            "subscriptionId":"NA",
            "subscriptionExpirationDateTime":"NA",
            "clientState":"NA",
            "changeType":"Validation: Testing client application reachability for subscription Request-Id: 522a8e7e-096a-494c-aaf1-ac0dcfca45b7",
            "resource":"NA",
            "resourceData":{
                "@odata.type":"NA",
                "@odata.id":"NA",
                "id":"NA"
            }
        }
    ]
}

Abonnements für umfangreiche Benachrichtigungen mit großen Nutzlasten

Die maximale Nachrichtengröße für Event Hubs beträgt 1 MB. Wenn Sie umfangreiche Benachrichtigungen verwenden, erwarten Sie möglicherweise Benachrichtigungen, die diesen Grenzwert überschreiten. Zum Empfangen von Benachrichtigungen, die größer als 1 MB über Event Hubs sind, müssen Sie ihrer Abonnementanforderung auch ein Blob Storage-Konto hinzufügen.

Einrichten von Speicher und Erstellen eines Abonnements

  1. Erstellen Sie ein Speicherkonto.
  2. Erstellen Sie einen Container im Speicherkonto. Der Containername muss auf microsoft-graph-change-notificationsfestgelegt werden.
  3. Rufen Sie die Zugriffsschlüssel des Speicherkontos oder Verbindungszeichenfolge ab.
  4. Fügen Sie die Verbindungszeichenfolge dem Schlüsseltresor hinzu, und geben Sie ihm einen Namen. Dieser Wert ist der Geheimnisname.
  5. Erstellen Sie Ihr Abonnement, oder erstellen Sie es neu, und fügen Sie nun die Eigenschaft blobStoreUrl in die folgende Syntax ein: blobStoreUrl: "https://<azurekeyvaultname>.vault.azure.net/secrets/<secretname>?tenantId=<domainname>"

Empfangen umfangreicher Benachrichtigungen

Wenn Event Hubs eine Benachrichtigungsnutzlast empfängt, die größer als 1 MB ist, enthält die Benachrichtigung nicht die Eigenschaften resource, resourceData und encryptedContent , die in umfangreichen Benachrichtigungen enthalten sind. Die Benachrichtigung enthält stattdessen eine additionalPayloadStorageId-Eigenschaft mit einer ID, die auf das Blob in Ihrem Speicherkonto verweist, in dem diese Eigenschaften gespeichert sind.

Was geschieht, wenn die Anwendung Microsoft Graph Änderungsnachverfolgung fehlt?

Der Microsoft Graph-Änderungsnachverfolgung-Dienstprinzipal fehlt möglicherweise in Ihrem Mandanten, je nachdem, wann der Mandant erstellt wurde und administrative Vorgänge ausgeführt wurden. Die global eindeutige appId des Dienstprinzipals lautet 0bf30f3b-4a52-48df-9a82-234910c4a086 , und Sie können die folgende Abfrage ausführen, um zu überprüfen, ob sie im Mandanten vorhanden ist.

GET https://graph.microsoft.com/v1.0/servicePrincipals(appId='0bf30f3b-4a52-48df-9a82-234910c4a086')

Wenn der Dienstprinzipal nicht vorhanden ist, erstellen Sie ihn wie folgt. Sie müssen der aufrufenden App die Berechtigung Application.ReadWrite.All erteilen, um diesen Vorgang auszuführen.

Methode 1

POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-type: application/json

{
    "appId": "0bf30f3b-4a52-48df-9a82-234910c4a086"
}

Methode 2

POST https://graph.microsoft.com/v1.0/servicePrincipals(appId='0bf30f3b-4a52-48df-9a82-234910c4a086')
Content-type: application/json
Prefer: create-if-missing

{
    "displayName": "Microsoft Graph Change Tracking"
}