Autenticación de una identidad administrada con Azure Active Directory para acceder a recursos de Event Hubs
Azure Event Hubs admite la autenticación de Azure Active Directory (Azure AD) con identidades administradas para los recursos de Azure. Las identidades administradas para recursos de Azure pueden autorizar el acceso a los recursos de Event Hubs con credenciales de Azure AD desde aplicaciones que se ejecutan en máquinas virtuales (VM) de Azure, aplicaciones de función, conjuntos de escalado de máquinas virtuales y otros servicios. Si usa identidades administradas para recursos de Azure junto con autenticación de Azure AD, puede evitar el almacenamiento de credenciales con las 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 autorizar 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 los recursos de Azure, consulte uno de estos artículos:
- Azure Portal
- Azure PowerShell
- CLI de Azure
- Plantilla de Azure Resource Manager
- Bibliotecas cliente de Azure Resource Manager
Concesión de permisos a una identidad administrada en Azure AD
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 más información sobre la asignación de roles de Azure, consulte Autenticación con Azure Active Directory para el acceso a recursos de Event Hubs.
Uso de Event Hubs con identidades administradas
Para usar Event Hubs con identidades administradas, debe asignar el rol y el ámbito adecuados a la identidad. 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. Vea 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.
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
Ejemplos de Azure.Messaging.EventHubs
Ejemplos de Microsoft.Azure.EventHubs.
En estos ejemplos se usa la biblioteca anterior Microsoft.Azure.EventHubs, pero se puede actualizar fácilmente para usar la biblioteca Azure.Messaging.EventHubs más reciente. Para que los ejemplos usen la biblioteca nueva en lugar de la anterior, consulte la Guía para migrar de Microsoft.Azure.EventHubs a Azure.Messaging.EventHubs. Este ejemplo se ha actualizado para usar la biblioteca Azure.Messaging.EventHubs más reciente.
Pasos siguientes
- 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:
- Autenticación de solicitudes a Azure Event Hubs desde una aplicación mediante Azure Active Directory
- Autenticación de solicitudes para Azure Event Hubs mediante firmas de acceso compartido
- Autorización del acceso a recursos de Event Hubs mediante Azure Active Directory
- Autorización del acceso a recursos de Event Hubs mediante firmas de acceso compartido