Een beheerde identiteit verifiëren met Microsoft Entra-id voor toegang tot Event Hubs-resources

Azure Event Hubs ondersteunt Microsoft Entra-verificatie met beheerde identiteiten voor Azure-resources. Beheerde identiteiten voor Azure-resources kunnen toegang verlenen tot Event Hubs-resources met behulp van Microsoft Entra-referenties van toepassingen die worden uitgevoerd in Azure Virtual Machines (VM's), Functie-apps, Virtuele-machineschaalsets en andere services. Door beheerde identiteiten te gebruiken voor Azure-resources samen met Microsoft Entra-verificatie, kunt u voorkomen dat referenties worden opgeslagen met uw toepassingen die in de cloud worden uitgevoerd. In dit artikel wordt beschreven hoe u toegang tot een Event Hub kunt autoriseren met behulp van een beheerde identiteit van een Azure-VM.

Beheerde identiteiten inschakelen op een VIRTUELE machine

Voordat u beheerde identiteiten voor Azure-resources gebruikt om toegang te krijgen tot Event Hubs-resources vanaf uw VM, moet u eerst beheerde identiteiten inschakelen voor Azure-resources op de VM. Zie een van de volgende artikelen voor meer informatie over het inschakelen van beheerde identiteiten voor Azure-resources:

Machtigingen verlenen aan een beheerde identiteit in Microsoft Entra-id

Als u een aanvraag voor de Event Hubs-service wilt autoriseren vanuit een beheerde identiteit in uw toepassing, configureert u eerst op rollen gebaseerd toegangsbeheer (Azure RBAC) voor die beheerde identiteit. Azure Event Hubs definieert Azure-rollen die machtigingen omvatten voor het verzenden en lezen van Event Hubs. Wanneer de Azure-rol is toegewezen aan een beheerde identiteit, krijgt de beheerde identiteit toegang tot Event Hubs-gegevens op het juiste bereik. Zie Verifiëren met Microsoft Entra ID voor toegang tot Event Hubs-resources voor meer informatie over het toewijzen van Azure-rollen.

Event Hubs gebruiken met beheerde identiteiten

Als u Event Hubs met beheerde identiteiten wilt gebruiken, wijst u een Event Hubs RBAC-rol toe aan het juiste bereik voor de identiteit. De procedure in deze sectie maakt gebruik van een eenvoudige toepassing die wordt uitgevoerd onder een beheerde identiteit en toegang heeft tot Event Hubs-resources.

Hier gebruiken we een voorbeeldwebtoepassing die wordt gehost in Azure-app Service. Zie Een ASP.NET Core-web-app maken in Azure voor stapsgewijze instructies voor het maken van een webtoepassing

Zodra de toepassing is gemaakt, voert u de volgende stappen uit:

  1. Ga naar Instellingen en selecteer Identiteit.

  2. Selecteer de status die moet worden ingeschakeld.

  3. Selecteer Opslaan om de instelling op te slaan.

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

  4. Selecteer Ja in het informatiebericht.

    Zodra u deze instelling hebt ingeschakeld, wordt er een nieuwe service-id gemaakt in uw Microsoft Entra-id en geconfigureerd in de App Service-host.

    Wijs deze service-identiteit nu toe aan een rol in het vereiste bereik in uw Event Hubs-resources.

Azure-rollen toewijzen met behulp van Azure Portal

Wijs een van de Event Hubs-rollen toe aan de beheerde identiteit op het gewenste bereik (Event Hubs-naamruimte, resourcegroep, abonnement). Raadpleeg Azure-rollen toewijzen met Azure Portal voor informatie over het toewijzen van rollen.

Notitie

Zie Services die beheerde identiteiten ondersteunen voor Azure-resources voor een lijst met services die beheerde identiteiten ondersteunen.

De webtoepassing testen

  1. Een Event Hubs-naamruimte en een Event Hub maken.
  2. Implementeer de web-app in Azure. Zie de volgende sectie met tabbladen voor koppelingen naar de voorbeeldwebtoepassing op GitHub.
  3. Zorg ervoor dat SendReceive.aspx is ingesteld als het standaarddocument voor de web-app.
  4. Identiteit inschakelen voor de web-app.
  5. Wijs deze identiteit toe aan de rol Event Hubs-gegevenseigenaar op naamruimteniveau of Event Hub-niveau.
  6. Voer de webtoepassing uit, voer de naamruimtenaam en event hubnaam, een bericht in en selecteer Verzenden. Selecteer Ontvangen om de gebeurtenis te ontvangen.

U kunt nu uw webtoepassing starten en uw browser naar de aspx-voorbeeldpagina laten verwijzen. U vindt de voorbeeldwebtoepassing die gegevens verzendt en ontvangt van Event Hubs-resources in de GitHub-opslagplaats.

Installeer het nieuwste pakket van NuGet en begin met het verzenden van gebeurtenissen naar Event Hubs met behulp van EventHubProducerClient en het ontvangen van gebeurtenissen met behulp van EventHubConsumerClient.

Notitie

Zie Gebeurtenissen publiceren met azure-identiteitsvoorbeelden op GitHub voor een Java-voorbeeld dat gebruikmaakt van een beheerde identiteit om gebeurtenissen te publiceren naar een Event Hub.

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 voor Kafka

U kunt Apache Kafka-toepassingen gebruiken om berichten te verzenden naar en te ontvangen van Azure Event Hubs met behulp van OAuth voor beheerde identiteit. Zie het volgende voorbeeld op GitHub: Event Hubs voor Kafka : berichten verzenden en ontvangen met behulp van OAuth voor beheerde identiteit.

Voorbeelden

.

Volgende stappen