Uwierzytelnianie tożsamości zarządzanej za pomocą identyfikatora Entra firmy Microsoft w celu uzyskania dostępu do zasobów usługi Event Hubs

Usługa Azure Event Hubs obsługuje uwierzytelnianie w usłudze Microsoft Entra z tożsamościami zarządzanymi dla zasobów platformy Azure. Tożsamości zarządzane dla zasobów platformy Azure mogą autoryzować dostęp do zasobów usługi Event Hubs przy użyciu poświadczeń firmy Microsoft z aplikacji działających na maszynach wirtualnych platformy Azure, aplikacji funkcji, zestawów skalowania maszyn wirtualnych i innych usług. Korzystając z tożsamości zarządzanych dla zasobów platformy Azure wraz z uwierzytelnianiem firmy Microsoft Entra, można uniknąć przechowywania poświadczeń z aplikacjami uruchomionymi w chmurze. W tym artykule pokazano, jak autoryzować dostęp do centrum zdarzeń przy użyciu tożsamości zarządzanej z maszyny wirtualnej platformy Azure.

Włączanie tożsamości zarządzanych na maszynie wirtualnej

Przed użyciem tożsamości zarządzanych dla zasobów platformy Azure w celu uzyskania dostępu do zasobów usługi Event Hubs z maszyny wirtualnej należy najpierw włączyć tożsamości zarządzane dla zasobów platformy Azure na maszynie wirtualnej. Aby dowiedzieć się, jak włączyć tożsamości zarządzane dla zasobów platformy Azure, zobacz jeden z następujących artykułów:

Udzielanie uprawnień tożsamości zarządzanej w identyfikatorze Entra firmy Microsoft

Aby autoryzować żądanie do usługi Event Hubs z tożsamości zarządzanej w aplikacji, najpierw skonfiguruj ustawienia kontroli dostępu na podstawie ról (RBAC) platformy Azure dla tej tożsamości zarządzanej. Usługa Azure Event Hubs definiuje role platformy Azure, które obejmują uprawnienia do wysyłania i odczytywania z usługi Event Hubs. Po przypisaniu roli platformy Azure do tożsamości zarządzanej tożsamość zarządzana ma dostęp do danych usługi Event Hubs w odpowiednim zakresie. Aby uzyskać więcej informacji na temat przypisywania ról platformy Azure, zobacz Uwierzytelnianie za pomocą identyfikatora Entra firmy Microsoft w celu uzyskania dostępu do zasobów usługi Event Hubs.

Korzystanie z usługi Event Hubs przy użyciu tożsamości zarządzanych

Aby używać usługi Event Hubs z tożsamościami zarządzanymi, przypisz rolę RBAC usługi Event Hubs w odpowiednim zakresie do tożsamości. Procedura w tej sekcji używa prostej aplikacji, która działa w ramach tożsamości zarządzanej i uzyskuje dostęp do zasobów usługi Event Hubs.

W tym miejscu używamy przykładowej aplikacji internetowej hostowanej w usłudze aplikacja systemu Azure Service. Aby uzyskać instrukcje krok po kroku dotyczące tworzenia aplikacji internetowej, zobacz Tworzenie aplikacji internetowej ASP.NET Core na platformie Azure

Po utworzeniu aplikacji wykonaj następujące kroki:

  1. Przejdź do Ustawienia i wybierz pozycję Tożsamość.

  2. Wybierz pozycję Stan , aby mieć wartość Włączone.

  3. Wybierz pozycję Zapisz, aby zapisać ustawienie.

    Screenshot of the Identity page showing the status of system-assigned identity set to ON.

  4. Wybierz pozycję Tak w komunikacie informacyjnym.

    Po włączeniu tego ustawienia zostanie utworzona nowa tożsamość usługi w identyfikatorze Entra firmy Microsoft i skonfigurowana na hoście usługi App Service.

    Teraz przypisz tę tożsamość usługi do roli w wymaganym zakresie w zasobach usługi Event Hubs.

Aby przypisać role platformy Azure przy użyciu witryny Azure Portal

Przypisz jedną z ról usługi Event Hubs do tożsamości zarządzanej w żądanym zakresie (przestrzeń nazw usługi Event Hubs, grupa zasobów, subskrypcja). Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

Uwaga

Aby uzyskać listę usług obsługujących tożsamości zarządzane, zobacz Usługi obsługujące tożsamości zarządzane dla zasobów platformy Azure.

Testowanie aplikacji internetowej

  1. Utwórz przestrzeń nazw usługi Event Hubs i centrum zdarzeń.
  2. Wdróż aplikację internetową na platformie Azure. Aby uzyskać linki do przykładowej aplikacji internetowej w usłudze GitHub, zobacz następującą sekcję z kartami.
  3. Upewnij się, że dla aplikacji internetowej ustawiono domyślny dokument SendReceive.aspx.
  4. Włącz tożsamość dla aplikacji internetowej.
  5. Przypisz tę tożsamość do roli Właściciel danych usługi Event Hubs na poziomie przestrzeni nazw lub centrum zdarzeń.
  6. Uruchom aplikację internetową, wprowadź nazwę przestrzeni nazw i nazwę centrum zdarzeń, komunikat i wybierz pozycję Wyślij. Aby odebrać zdarzenie, wybierz pozycję Odbierz.

Teraz możesz uruchomić aplikację internetową i wskazać przeglądarkę na przykładową stronę aspx. Przykładowa aplikacja internetowa, która wysyła i odbiera dane z zasobów usługi Event Hubs, znajduje się w repozytorium GitHub.

Zainstaluj najnowszy pakiet z pakietu NuGet i rozpocznij wysyłanie zdarzeń do usługi Event Hubs przy użyciu elementu EventHubProducerClient i odbierania zdarzeń przy użyciu elementu EventHubConsumerClient.

Uwaga

Przykład języka Java, który używa tożsamości zarządzanej do publikowania zdarzeń w centrum zdarzeń, zobacz Publikowanie zdarzeń za pomocą przykładu tożsamości platformy Azure w usłudze 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 dla platformy Kafka

Za pomocą aplikacji platformy Apache Kafka można wysyłać komunikaty do usługi Azure Event Hubs i odbierać je z usługi Azure Event Hubs przy użyciu protokołu OAuth tożsamości zarządzanej. Zobacz następujący przykład w witrynie GitHub: Usługa Event Hubs dla platformy Kafka — wysyłanie i odbieranie komunikatów przy użyciu protokołu OAuth tożsamości zarządzanej.

Przykłady

.

Następne kroki