Teilen über


Authentifizieren einer verwalteten Identität mit Microsoft Entra ID für den Zugriff auf Event Hubs-Ressourcen

Azure Event Hubs unterstützt die Microsoft Entra-Authentifizierung mit verwalteten Identitäten für Azure-Ressourcen. Sie können verwaltete Identitäten für Azure-Ressourcen verwenden, um den Zugriff auf Event Hubs-Ressourcen mithilfe von Microsoft Entra-Anmeldeinformationen über Anwendungen zu autorisieren, die auf Azure-VMs, in Funktions-Apps, in VM-Skalierungsgruppen und anderen Diensten ausgeführt werden. Durch Verwendung von verwalteten Identitäten für Azure-Ressourcen zusammen mit der Microsoft Entra-Authentifizierung können Sie vermeiden, dass Anmeldeinformationen mit den in der Cloud ausgeführten Anwendungen gespeichert werden. In diesem Artikel wird die Autorisierung des Zugriffs auf einen Event Hub mit einer verwalteten Identität über einen virtuellen Azure-Computer erläutert.

Aktivieren von verwalteten Identitäten auf einem virtuellen Computer

Damit Sie verwaltete Identitäten für Azure-Ressourcen zum Zugreifen auf Event Hubs-Ressourcen über Ihren virtuellen Computer verwenden können, müssen Sie zunächst verwaltete Identitäten für Azure-Ressourcen auf dem virtuellen Computer aktivieren. Informationen zum Aktivieren verwalteter Identitäten für Azure-Ressourcen finden Sie unter Konfigurieren verwalteter Identitäten auf Azure-VMs.

Zuweisen von Berechtigungen für eine verwaltete Identität in Microsoft Entra ID

Um eine Anforderung authentifizieren zu können, die von einer verwalteten Identität in Ihrer Anwendung an den Event Hubs-Dienst gerichtet wurde, müssen Sie für diese verwaltete Identität zuerst Einstellungen der rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) von Azure konfigurieren. Azure Event Hubs definiert Azure-Rollen, die Berechtigungen zum Senden von Ereignissen an Event Hubs sowie zum Empfangen von Ereignissen von Event Hubs umfassen. Wenn eine Azure-Rolle einer verwalteten Identität zugewiesen wird, wird der verwalteten Identität Zugriff auf Event Hubs-Daten im entsprechenden Bereich gewährt. Weitere Informationen zum Zuweisen von Azure-Rollen finden Sie unter Autorisieren des Zugriffs auf Event Hubs-Ressourcen mit Microsoft Entra ID.

Beispielanwendung

Im Verfahren in diesem Abschnitt wird eine einfache Anwendung verwendet, die unter einer verwalteten Identität ausgeführt wird und auf Event Hubs-Ressourcen zugreift.

Hier verwenden wir eine einfache Beispielwebanwendung, die in Azure App Service gehostet wird. Eine Schritt-für-Schritt-Anleitung zum Erstellen einer Webanwendung finden Sie unter Erstellen einer ASP.NET Core-Web-App in Azure.

Führen Sie nach der Erstellung der Anwendung die folgenden Schritte aus:

  1. Navigieren Sie zu Einstellungen, und wählen Sie Identität aus.

  2. Legen Sie den Status auf Ein fest.

  3. Klicken Sie auf Speichern, um die Einstellung zu speichern.

    Screenshot: Seite „Identität“ mit dem auf EIN festgelegten Status der systemseitig zugewiesenen Identität

  4. Wählen Sie in der Bestätigungsmeldung die Option Ja aus.

    Nachdem Sie diese Einstellung aktiviert haben, wird in Ihrer Microsoft Entra ID-Instanz eine neue Dienstidentität erstellt und auf dem App Service-Host konfiguriert.

    Weisen Sie dieser Dienstidentität jetzt eine Rolle im erforderlichen Bereich in Ihren Event Hubs-Ressourcen zu.

So weisen Sie Azure-Rollen mit dem Azure-Portal zu

Weisen Sie der verwalteten Identität im gewünschten Bereich (Event Hubs-Namespace, -Ressourcengruppe, -Abonnement) eine der Event Hubs-Rollen zu. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.

Hinweis

Eine Liste der Dienste, die verwaltete Identitäten unterstützen, finden Sie unter Dienste, die verwaltete Identitäten für Azure-Ressourcen unterstützen.

Testen der Webanwendung

  1. Erstellen Sie einen Event Hubs-Namespace und einen Event Hub.
  2. Bereitstellen der Web-App in Azure Links zur Beispielwebanwendung auf GitHub finden Sie im folgenden Abschnitt im Registerkartenformat.
  3. Stellen Sie sicher, dass „SendReceive.aspx“ als Standarddokument für die Web-App festgelegt ist.
  4. Aktivieren Sie Identität für die Web-App.
  5. Weisen Sie diese Identität der Rolle Event Hubs-Datenbesitzer auf Namespace- oder Event Hub-Ebene zu.
  6. Führen Sie die Webanwendung aus, geben Sie den Namespacenamen und Event Hub-Namen sowie eine Nachricht ein, und wählen Sie dann Senden aus. Um das Ereignis zu empfangen, wählen Sie Empfangen aus.

Sie finden die Beispielwebanwendung, mit der Daten für Event Hubs-Ressourcen gesendet und empfangen werden, im GitHub-Repository.

Installieren Sie das neueste Paket von NuGet, und beginnen Sie mit dem Senden von Ereignissen an Event Hubs mit EventHubProducerClient und dem Empfangen von Ereignissen mit EventHubConsumerClient.

Hinweis

Ein Java-Beispiel, in dem eine verwaltete Identität zum Veröffentlichen von Ereignissen für einen Event Hub verwendet wird, finden Sie unter „Identitätsbeispiel: Veröffentlichen von Ereignissen mit Azure“ auf GitHub.

protected async void btnSend_Click(object sender, EventArgs e)
{
    await using (EventHubProducerClient producerClient = new EventHubProducerClient(txtNamespace.Text, txtEventHub.Text, new DefaultAzureCredential()))
    {
        // create a batch
        using (EventDataBatch eventBatch = await producerClient.CreateBatchAsync())
        {

            // add events to the batch. only one in this case. 
            eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(txtData.Text)));

            // send the batch to the event hub
            await producerClient.SendAsync(eventBatch);
        }

        txtOutput.Text = $"{DateTime.Now} - SENT{Environment.NewLine}{txtOutput.Text}";
    }
}
protected async void btnReceive_Click(object sender, EventArgs e)
{
    await using (var consumerClient = new EventHubConsumerClient(EventHubConsumerClient.DefaultConsumerGroupName, $"{txtNamespace.Text}.servicebus.windows.net", txtEventHub.Text, new DefaultAzureCredential()))
    {
        int eventsRead = 0;
        try
        {
            using CancellationTokenSource cancellationSource = new CancellationTokenSource();
            cancellationSource.CancelAfter(TimeSpan.FromSeconds(5));

            await foreach (PartitionEvent partitionEvent in consumerClient.ReadEventsAsync(cancellationSource.Token))
            {
                txtOutput.Text = $"Event Read: { Encoding.UTF8.GetString(partitionEvent.Data.Body.ToArray()) }{ Environment.NewLine}" + txtOutput.Text;
                eventsRead++;
            }
        }
        catch (TaskCanceledException ex)
        {
            txtOutput.Text = $"Number of events read: {eventsRead}{ Environment.NewLine}" + txtOutput.Text;
        }
    }
}

Event Hubs für Kafka

Sie können Apache Kafka-Anwendungen verwenden, um mithilfe von mit OAuth verwalteter Identität Nachrichten an Azure Event Hubs zu senden und von diesen zu empfangen. Auf GitHub ist das folgende Beispiele verfügbar: Event Hubs für Kafka: Senden und Empfangen von Nachrichten mithilfe von mit OAuth verwalteter Identität.

Beispiele