Autenticación de una identidad administrada con Microsoft Entra ID para acceder a recursos de Event Hubs

Azure Event Hubs admite la autenticación de Microsoft Entra con identidades administradas para los recursos de Azure. Las identidades administradas para los recursos de Azure pueden autorizar el acceso a los recursos de Event Hubs utilizando credenciales de Microsoft Entra desde aplicaciones que se ejecutan en máquinas virtuales (VM) de Azure, aplicaciones de funciones, conjuntos de escalas de máquinas virtuales y otros servicios. Mediante el uso de identidades administradas para los recursos de Azure junto con la autenticación de Microsoft Entra, puede evitar el almacenamiento de credenciales con sus aplicaciones que se ejecutan en la nube. En este artículo se muestra cómo autorizar el acceso a un centro de eventos con una identidad administrada desde una máquina virtual de Azure.

Habilitación de identidades administradas en una máquina virtual

Para poder usar identidades administradas para recursos de Azure a fin de acceder a los recursos de Event Hubs desde la máquina virtual, primero debe habilitar las identidades administradas para los recursos de Azure en la máquina virtual. Para aprender a habilitar las identidades administradas para recursos de Azure, consulte uno de estos artículos:

Conceder permisos a una identidad administrada en Microsoft Entra ID

Para autorizar una solicitud al servicio Event Hubs desde una identidad administrada de la aplicación, primero configure los valores del control de acceso basado en roles de Azure (Azure RBAC) de esa identidad administrada. Azure Event Hubs define los roles de Azure que abarcan los permisos para enviar y leer desde Event Hubs. Cuando el rol de Azure se asigna a una identidad administrada, a esta se le concede acceso a los datos de Event Hubs en el ámbito adecuado. Para obtener más información sobre la asignación de funciones de Azure, consulte Autenticación con Microsoft Entra ID para acceder a los recursos de Event Hubs.

Uso de Event Hubs con identidades administradas

Para usar Event Hubs con identidades administradas, asigne a la identidad un rol de RBAC de Event Hubs del ámbito adecuado. En el procedimiento de esta sección se usa una aplicación sencilla que se ejecuta en una identidad administrada y accede a los recursos de Event Hubs.

A continuación, usaremos una aplicación web de ejemplo hospedada en Azure App Service. Para instrucciones paso a paso sobre cómo crear una aplicación web, consulte Creación de una aplicación web de ASP.NET Core en Azure.

Una vez creada la aplicación, siga estos pasos:

  1. Vaya a Configuración y seleccione Identidad.

  2. Seleccione el Estado que va a estar Activado.

  3. Seleccione Guardar para guardar la configuración.

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

  4. Seleccione en el mensaje de información.

    Una vez habilitada esta configuración, se crea una identidad de servicio en Azure Active Directory (Azure AD) y se configura en el host de App Service.

    Ahora, asigne esta identidad de servicio a un rol en el ámbito requerido en los recursos de Event Hubs.

Para asignar roles de Azure mediante Azure Portal

Asigne uno de los roles de Event Hubs a la identidad administrada en el ámbito deseado (espacio de nombres de Event Hubs, grupo de recursos, suscripción). Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

Nota

Para ver una lista de los servicios que admiten identidades administradas, consulte Servicios que admiten identidades administradas para recursos de Azure.

Prueba de la aplicación web

  1. Cree un espacio de nombres de Event Hubs y un centro de eventos.
  2. Implemente la aplicación web en Azure. Consulte la siguiente sección con pestañas para obtener vínculos a la aplicación web en GitHub.
  3. Asegúrese de que SendReceive.aspx esté establecido como documento predeterminado de la aplicación web.
  4. Habilite una identidad para la aplicación web.
  5. Asigne esta identidad al rol Propietario de datos de Event Hubs en el nivel del espacio de nombres o en el del centro de eventos.
  6. Ejecute la aplicación web, escriba los nombres del espacio de nombres y del centro de eventos y un mensaje y seleccione Enviar. Para recibir el evento, seleccione Recibir.

Ahora puede iniciar la aplicación web y apuntar el explorador a la página aspx de ejemplo. Puede encontrar la aplicación web de ejemplo que envía y recibe datos de los recursos de Event Hubs en el repositorio de GitHub.

Instale el paquete más reciente de NuGet y empiece a enviar eventos a Event Hubs con EventHubProducerClient y a recibirlos con EventHubConsumerClient.

Nota

Para ver un ejemplo de Java que usa una identidad administrada para publicar eventos en un centro de eventos, consulte la publicación de eventos con in ejemplo de identidad de Azure en 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 para Kafka

Puede usar aplicaciones de Apache Kafka para enviar y recibir mensajes en Azure Event Hubs mediante la autorización OAuth de identidad administrada. Consulte el siguiente ejemplo en GitHub: Event Hubs para Kafka: envío y recepción de mensajes mediante la autorización OAuth de identidad administrada.

Ejemplos

.

Pasos siguientes