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 saber cómo habilitar las identidades administradas para los recursos de Azure, consulte Configurar identidades administradas en máquinas virtuales de Azure.
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 (RBAC) de Azure de esa identidad administrada. Azure Event Hubs define roles de Azure que abarcan los permisos para enviar y recibir eventos de Event Hubs. Cuando un 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.
Aplicación de ejemplo
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:
Vaya a Configuración y seleccione Identidad.
Seleccione el Estado que va a estar Activado.
Seleccione Guardar para guardar la configuración.
Seleccione Sí 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
- Cree un espacio de nombres de Event Hubs y un centro de eventos.
- 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.
- Asegúrese de que SendReceive.aspx esté establecido como documento predeterminado de la aplicación web.
- Habilite una identidad para la aplicación web.
- 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.
- 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.
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
- .NET.
- Para obtener un ejemplo que use el paquete Azure.Messaging.EventHubs más reciente, consulte Publicación de eventos con una identidad administrada
- Para obtener un ejemplo que use el paquete Microsoft.Azure.EventHubs heredado, consulte este ejemplo de .NET en GitHub
- Java: consulte los ejemplos siguientes.
- Ejemplo de Publicación de eventos con la identidad de Azure en GitHub.
- Para aprender a usar el protocolo Apache Kafka para enviar y recibir eventos desde un centro de eventos mediante una identidad administrada, consulte Ejemplo de Event Hubs para Kafka para enviar y recibir mensajes mediante una identidad administrada.
Contenido relacionado
- Consulte el artículo siguiente para información sobre las identidades administradas para los recursos de Azure: ¿Qué son las identidades administradas de los recursos de Azure?
- Consulte los artículos relacionados siguientes:
- Autenticar solicitudes a Azure Event Hubs desde una aplicación utilizando Microsoft Entra ID
- Autenticación de solicitudes para Azure Event Hubs mediante firmas de acceso compartido
- Autorizar el acceso a los recursos de Centros de eventos mediante Microsoft Entra ID
- Autorización del acceso a recursos de Event Hubs mediante firmas de acceso compartido