Authentifier une identité managée avec Microsoft Entra ID pour accéder aux ressources Event Hubs

Azure Event Hubs prend en charge l’authentification Microsoft Entra avec des identités managées pour les ressources Azure. Les identités managées pour ressources Azure peuvent autoriser l’accès à des ressources Event Hubs en utilisant les informations d’identification Microsoft Entra d’applications s’exécutant dans des machines virtuelles Azure, des applications de fonction, des groupes de machines virtuelles identiques et d’autres services. En utilisant des identités managées pour les ressources Azure avec l’authentification Microsoft Entra, vous pouvez éviter de stocker des informations d’identification avec vos applications qui s’exécutent dans le cloud. Cet article montre comment autoriser l’accès à un hub d’événements en utilisant une identité managée à partir d’une machine virtuelle Azure.

Activer les identités managées sur une machine virtuelle

Avant de pouvoir utiliser les identités managées pour ressources Azure en vue d’accéder aux ressources Event Hubs à partir de votre machine virtuelle, vous devez les activer sur la machine virtuelle. Pour savoir comment activer des identités managées pour ressources Azure, consultez un de ces articles :

Octroyer des autorisations à une identité managée dans Microsoft Entra ID

Pour autoriser une requête auprès du service Event Hubs à partir d’une identité managée dans votre application, commencez par configurer les paramètres du contrôle d’accès en fonction du rôle Azure (Azure RBAC) pour cette identité managée. Azure Event Hubs définit les rôles Azure qui englobent les autorisations d’envoi et de lecture à partir d’Event Hubs. Quand le rôle Azure est attribué à une identité managée, celle-ci est autorisée à accéder aux données Event Hubs selon l’étendue appropriée. Pour plus d’informations sur l’attribution des rôles Azure, consultez Autoriser l’accès aux ressources Event Hubs à l’aide de Microsoft Entra ID.

Utiliser Event Hubs avec des identités managées

Pour utiliser Event Hubs avec des identités managées, attribuez le rôle RBAC Event Hubs et l'étendue appropriée à l'identité. La procédure décrite dans cette section utilise une application simple qui s’exécute sous une identité managée et accède aux ressources Event Hubs.

Ici, nous utilisons un exemple d’application web hébergée dans Azure App Service. Pour obtenir des instructions pas à pas sur la création d’une application web, consultez Créer une application web ASP.NET Core dans Azure

Une fois que vous avez créé l’application, suivez ces étapes :

  1. Accédez à Paramètres et sélectionnez Identité.

  2. Définissez État sur Activé.

  3. Sélectionnez Enregistrer pour enregistrer le paramètre.

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

  4. Sélectionnez Oui sur le message d’information.

    Une fois ce paramètre activé, une identité de service est créée dans votre Microsoft Entra ID et configurée dans l’hôte App Service.

    À présent, attribuez cette identité de service à un rôle dans l’étendue requise dans vos ressources Event Hubs.

Pour attribuer des rôles Azure à l’aide du portail Azure

Attribuez un des rôles Event Hubs à l’identité managée à la portée souhaitée (espace de noms Event Hubs, groupe de ressources, abonnement). Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.

Notes

Pour obtenir la liste des services qui prennent en charge les identités managées, consultez Services qui prennent en charge les identités managées pour les ressources Azure.

Tester l’application web

  1. Créez un espace de noms Event Hubs et un hub d’événements.
  2. Déployer l’application web sur Azure. Pour obtenir des liens vers l’application web exemple sur GitHub, voir la section à onglets suivante.
  3. Assurez-vous que SendReceive.aspx est défini en tant que document par défaut pour l’application web.
  4. Activez identité pour l’application web.
  5. Attribuez cette identité au rôle Propriétaire de données Event Hub au niveau de l’espace de noms ou du hub d’événements.
  6. Exécutez l’application web, entrez les noms de l’espace de noms et du hub d’événements, un message, puis sélectionnez Envoyer. Pour recevoir l’événement, sélectionnez Recevoir.

Vous pouvez maintenant lancer votre application web et faire pointer votre navigateur vers l’exemple de page aspx. Vous trouverez l’exemple d’application web qui envoie des données aux ressources Event Hubs et reçoit des données de ces ressources dans le dépôt GitHub.

Installez le package le plus récent à partir de NuGet et commencez à envoyer des événements à Event Hubs en utilisant EventHubProducerClient et à recevoir des événements en utilisant EventHubConsumerClient.

Notes

Pour obtenir un exemple Java qui utilise une identité managée pour publier des événements sur un Event Hub, consultez l’exemple PublishEventsWithAzureIdentity.java sur 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 pour Kafka

Vous pouvez utiliser les applications Apache Kafka pour envoyer et recevoir des messages dans Azure Event Hubs à l’aide d’une identité managée OAuth. Consultez l’exemple suivant sur GitHub : Event Hubs pour Kafka - Envoyer et recevoir des messages à l’aide d’une identité managée OAuth.

Exemples

.

Étapes suivantes