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 von verwalteten Identitäten für Azure-Ressourcen finden Sie in diesen Artikeln:

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

Damit Sie eine Anforderung an den Event Hubs-Dienst über eine verwaltete Identität in Ihrer Anwendung autorisieren können, müssen Sie zuerst die Einstellungen der rollenbasierten Zugriffssteuerung in Azure (Role-Based Access Control, Azure RBAC) für diese verwaltete Identität konfigurieren. Für Azure Event Hubs werden Azure-Rollen definiert, die Berechtigungen zum Senden an und Lesen aus Event Hubs umfassen. Wenn die Azure-Rolle einer verwalteten Identität zugewiesen wird, wird der verwalteten Identität der Zugriff auf Event Hubs-Daten im entsprechenden Bereich erteilt. Weitere Informationen zum Zuweisen von Azure-Rollen finden Sie unter Autorisieren des Zugriffs auf Event Hubs-Ressourcen mit Microsoft Entra ID.

Verwenden von Event Hubs mit verwalteten Identitäten

Wenn Sie Event Hubs mit verwalteten Identitäten verwenden möchten, weisen Sie der Identität eine Event Hubs-RBAC-Rolle im entsprechenden Bereich zu. 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 of the Identity page showing the status of system-assigned identity set to ON.

  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 können Ihre Webanwendung jetzt starten und für Ihren Browser auf die ASPX-Beispielseite verweisen. 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

.

Nächste Schritte