Acesse Hubs de Eventos do Azure a partir de uma VM usando uma identidade gerenciada

Este artigo mostra como conectar aos Hubs de Eventos do Azure a partir de um aplicativo que roda em uma máquina virtual (VM) Azure usando uma identidade gerenciada. Quando você usa uma identidade gerenciada, sua aplicação se autentica em Hubs de Eventos sem armazenar strings de conexão ou chaves de acesso no código ou configuração. O Azure provisiona e rotaciona as credenciais automaticamente.

Neste artigo, você concluirá as seguintes tarefas:

  • Ative uma identidade gerenciada atribuída pelo sistema em uma VM.
  • Conceda permissão à identidade gerenciada para enviar eventos para um hub de eventos.
  • Crie e execute uma aplicação de exemplo na VM que use a identidade gerenciada.

Para entender como a autenticação de identidade gerenciada funciona com Event Hubs, veja Autenticação de identidade gerenciada para Hubs de Eventos do Azure.

Pré-requisitos

Ative uma identidade gerenciada na VM

Ative uma identidade gerenciada atribuída ao sistema na VM. O Azure cria uma identidade no Microsoft Entra ID que está atrelada ao ciclo de vida da VM.

  1. Entre no portal do Azure.

  2. Acesse a sua máquina virtual.

  3. Na página da VM, selecione Identidade de Segurança> no menu esquerdo.

  4. Na página de Identidade , confirme que você está na aba Sistemas Atribuídos .

  5. Para o campo Status, selecione Ativado.

  6. Selecione Salvar na barra de comandos e depois selecione sim para confirmar.

    Após o Azure criar a identidade, o ID do Objeto (principal) aparece na página. Você usa essa identidade na próxima seção.

Para habilitar uma identidade gerenciada atribuída pelo usuário, veja Configurar identidades gerenciadas para recursos do Azure em uma VM. Uma identidade atribuída pelo usuário é um recurso independente que você pode atribuir a mais de uma VM.

Conceda acesso à identidade gerenciada aos Centros de Eventos

Atribua um papel Azure embutido à identidade gerenciada para que ele possa enviar eventos para seu hub de eventos. Este exemplo atribui a função Hubs de Eventos do Azure Data Sender no escopo de apenas um hub de eventos. Conceda o escopo mais restrito que atenda às necessidades da sua aplicação.

  1. No portal do Azure, vá para o hub de eventos.
  2. Na página do hub de eventos, selecione Controle de Acesso (IAM) no menu esquerdo.
  3. Selecione Adicionar>Adicionar atribuição de função.
  4. Na aba Função, selecione Hubs de Eventos do Azure Data Sender e depois selecione Próximo.
  5. Na guia Membros , para atribuir acesso, selecione Identidade gerenciada.
  6. Selecione + Selecionar membros, escolha a identidade gerenciada da Máquina virtual que você habilitou na seção anterior e, em seguida, selecione Selecionar.
  7. Clique em Revisar + atribuir para concluir a atribuição de função.

Para ver a lista completa de funções e escopos, consulte funções internas do Azure para o Hubs de Eventos do Azure. Para atribuir funções no portal Azure, veja Atribuir papéis no Azure usando o portal Azure.

Note

As atribuições de função podem levar alguns minutos para serem propagadas. Se sua aplicação não conseguir autenticação imediatamente, espere e tente novamente.

Crie e execute a aplicação de exemplo na VM

Crie um aplicativo de console .NET que envie eventos para o seu hub de eventos. Quando o aplicativo roda na VM, DefaultAzureCredential detecta automaticamente a identidade gerenciada, então você não fornece uma cadeia de conexão ou chave.

  1. Conectar-se à VM. Para uma VM Windows, use o Área de Trabalho Remota. Para uma VM Linux, use SSH.

  2. Em um terminal na VM, crie um projeto e adicione os pacotes necessários:

    dotnet new console --name EventHubsManagedIdentitySample
    cd EventHubsManagedIdentitySample
    dotnet add package Azure.Messaging.EventHubs
    dotnet add package Azure.Identity
    
  3. Substitua o conteúdo de Program.cs pelo seguinte código. Substitua <namespace> pelo nome do namespace do seu Event Hub e <event-hub-name> pelo nome do seu 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. Construa e execute a aplicação na VM:

    dotnet run
    

    A aplicação utiliza a identidade gerenciada da VM para autenticar e enviar os eventos. Quando os eventos são enviados, o console exibe Events sent to the event hub.

  5. Para confirmar que os eventos chegaram, use o Data Explorer no portal do Azure para seu hub de eventos, ou as métricas na página de Visão Geral do namespace.

Tip

Quando você usa uma identidade gerenciada atribuída pelo usuário, ou quando mais de uma identidade está disponível na VM, defina o ID do cliente para que DefaultAzureCredential selecione a identidade correta. Para mais informações, veja DefaultAzureCredentialOptions.ManagedIdentityClientId.