Accede a Azure Event Hubs desde una máquina virtual usando una identidad gestionada

Este artículo te muestra cómo conectarte a Azure Event Hubs desde una aplicación que se ejecuta en una máquina virtual (VM) de Azure utilizando una identidad gestionada. Cuando usas una identidad gestionada, tu aplicación se autentica en los Event Hubs sin almacenar cadenas de conexión ni claves de acceso en el código o configuración. Azure provisiona y rota las credenciales automáticamente.

En este artículo, se realizarán las siguientes tareas:

  • Activa una identidad gestionada asignada por el sistema en una máquina virtual.
  • Concede permiso a la identidad gestionada para enviar eventos a un centro de eventos.
  • Crea y ejecuta una aplicación de ejemplo en la VM que use la identidad gestionada.

Para saber cómo funciona la autenticación de identidad gestionada con los Event Hubs, consulta Autenticación de identidad gestionada para Azure Event Hubs.

Prerequisites

Habilitar una identidad gestionada en la VM

Activa una identidad gestionada asignada por el sistema en la VM. Azure crea una identidad en Microsoft Entra ID que está ligada al ciclo de vida de la máquina virtual.

  1. Inicie sesión en Azure Portal.

  2. Vaya a la máquina virtual.

  3. En la página de la máquina virtual, selecciona Identidad de seguridad> en el menú izquierdo.

  4. En la página de Identidad , confirma que estás en la pestaña de Sistema asignado .

  5. Para el campo Estado , selecciona Activado.

  6. Selecciona Guardar en la barra de comandos y luego selecciona Sí para confirmar.

    Después de que Azure crea la identidad, el ID del objeto (principal) aparece en la página. Usas esta identidad en la siguiente sección.

Para habilitar una identidad gestionada asignada por el usuario, consulte Configurar identidades gestionadas para recursos de Azure en una máquina virtual. Una identidad asignada por el usuario es un recurso independiente que puedes asignar a más de una máquina virtual.

Conceder a la identidad administrada acceso a Event Hubs

Asigna un rol integrado de Azure a la identidad gestionada para que pueda enviar eventos a tu hub de eventos. Este ejemplo asigna el rol de Remitente de Datos de Azure Event Hubs en el ámbito de un único hub de eventos. Concede el alcance más limitado que se adapte a las necesidades de tu solicitud.

  1. En Azure Portal, vaya al centro de eventos.
  2. En la página del centro de eventos, selecciona Control de acceso (IAM) en el menú izquierdo.
  3. Seleccione Agregar>Agregar asignación de rol.
  4. En la pestaña de Rol, selecciona Azure Event Hubs Data Sender y luego selecciona Siguiente.
  5. En la pestaña Miembros, para Asignar acceso a, seleccione Identidad administrada.
  6. Selecciona + Seleccionar miembros, elige la identidad administrada de la máquina virtual que habilitaste en la sección anterior y, después, selecciona Seleccionar.
  7. Seleccione Revisar y asignar para completar la asignación de roles.

Para obtener la lista completa de roles y ámbitos, consulta Roles integrados de Azure para Azure Event Hubs. Para asignar roles en el portal de Azure, consulte Asignar roles de Azure usando el portal de Azure.

Note

Las asignaciones de roles pueden tardar unos minutos en propagarse. Si tu solicitud no puede autenticarse inmediatamente, espera y inténtalo de nuevo.

Crea y ejecuta la aplicación de ejemplo en la VM

Crea una aplicación de consola .NET que envíe eventos a tu centro de eventos. Cuando la aplicación se ejecuta en la VM, DefaultAzureCredential detecta automáticamente la identidad gestionada, así que no proporcionas una cadena de conexión ni una clave.

  1. Conéctese a la máquina virtual. Para una máquina virtual de Windows, usa Escritorio remoto. Para una máquina virtual con Linux, usa SSH.

  2. En un terminal de la VM, crea un proyecto y añade los paquetes necesarios:

    dotnet new console --name EventHubsManagedIdentitySample
    cd EventHubsManagedIdentitySample
    dotnet add package Azure.Messaging.EventHubs
    dotnet add package Azure.Identity
    
  3. Reemplace el contenido de Program.cs por el código siguiente. Sustituye <namespace> por el nombre del espacio de nombres de tu Event Hub y <event-hub-name> por el nombre de tu event hub.

    using Azure.Identity;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Producer;
    
    // DefaultAzureCredential detects the managed identity available on the VM.
    var credential = new DefaultAzureCredential();
    
    var producerClient = new EventHubProducerClient(
        "<namespace>.servicebus.windows.net",
        "<event-hub-name>",
        credential);
    
    using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
    eventBatch.TryAdd(new EventData("First event from a managed identity"));
    eventBatch.TryAdd(new EventData("Second event from a managed identity"));
    
    await producerClient.SendAsync(eventBatch);
    await producerClient.DisposeAsync();
    
    Console.WriteLine("Events sent to the event hub.");
    
  4. Compila y ejecuta la aplicación en la VM:

    dotnet run
    

    La aplicación utiliza la identidad gestionada de la VM para autenticar y envía los eventos. Cuando se envían los eventos, la consola se muestra Events sent to the event hub.

  5. Para confirmar que los eventos han llegado, utiliza el Data Explorer en el portal de Azure para tu centro de eventos, o las métricas en la página de Resumen del espacio de nombres.

Tip

Cuando usas una identidad gestionada asignada por el usuario, o cuando hay más de una identidad disponible en la VM, establece el ID del cliente para que DefaultAzureCredential seleccione la identidad correcta. Para más información, consulta DefaultAzureCredentialOptions.ManagedIdentityClientId.