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:

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:

  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.

    Managed identity for a web app

  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. Vea 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