Autenticar uma identidade gerenciada na ID do Microsoft Entra para acessar os Recursos dos Hubs de Eventos

Os Hubs de Eventos do Azure dão suporte à autenticação do Microsoft Entra com identidades gerenciadas para recursos do Azure. As identidades gerenciadas para recursos do Azure podem autorizar o acesso aos recursos dos Hubs de Eventos do Azure usando as credenciais do Microsoft Entra em aplicativos executados em VMs (máquinas virtuais) do Azure, aplicativos de funções, Conjuntos de Dimensionamento de Máquinas Virtuais e outros serviços. Usando as identidades gerenciadas para recursos do Azure com a autenticação do Microsoft Entra, você pode evitar o armazenamento de credenciais com seus aplicativos que são executados na nuvem. Este artigo mostra como autorizar o acesso a um hub de eventos usando uma identidade gerenciada de uma VM do Azure.

Habilitar identidades gerenciadas em uma VM

Antes de usar as identidades gerenciadas para recursos do Azure para acessar recursos dos Hubs de Eventos da sua VM, você deve primeiro habilitar identidades gerenciadas para recursos do Azure na VM. Para saber como habilitar identidades gerenciadas para Recursos do Azure, confira um dos seguintes artigos:

Conceder permissões a uma identidade gerenciada no Microsoft Entra ID

Para autorizar uma solicitação ao serviço dos Hubs de Eventos do Azure a partir de uma identidade gerenciada em seu aplicativo, primeiro defina as configurações do controle de acesso baseado em função do Azure (RBAC do Azure) para essa identidade gerenciada. Os Hubs de Eventos do Azure definem funções do Azure que abrangem permissões para enviar e ler nos Hubs de Eventos. Quando a função do Azure é atribuída a uma identidade gerenciada, a identidade gerenciada recebe acesso às entidades dos Hubs de Eventos do Azure no escopo apropriado. Para obter mais informações sobre como atribuir funções do Azure, confira Autenticar-se com o Microsoft Entra ID para acessar os recursos dos Hubs de Eventos.

Usar os Hubs de Eventos com identidades gerenciadas

Para usar os Hubs de Eventos com identidades gerenciadas, atribua uma função RBAC dos Hubs de Eventos no escopo apropriado para a identidade. O procedimento nesta seção usa um aplicativo simples que é executado em uma identidade gerenciada e acessa os recursos dos Hubs de Eventos.

Aqui, estamos usando um aplicativo Web de exemplo hospedado no Serviço de Aplicativo do Azure. Para obter as instruções passo a passo para criar um aplicativo Web, consulte Criar um aplicativo Web ASP.NET Core no Azure

Depois que o aplicativo for criado, siga estas etapas:

  1. Vá para Configurações e selecione Identidade.

  2. Selecione o Status a ser Ativado.

  3. Clique em Salvar para salvar a configuração.

    Screenshot of the Identity page showing the status of system-assigned identity set to ON.

  4. Selecione Sim na mensagem de informação.

    Depois que você habilitar essa configuração, uma identidade do serviço será criada no Microsoft Entra ID e configurada no host do Serviço de Aplicativo.

    Agora atribua essa identidade de serviço a uma função no escopo necessário nos recursos dos Hubs de Eventos.

Atribuir funções do Azure usando o portal do Azure

Atribua uma das funções dos Hubs de Eventos à identidade gerenciada no escopo desejado (grupo de recursos, assinatura ou namespace dos Hubs de Eventos). Para ver as etapas detalhadas, confira Atribuir funções do Azure usando o portal do Azure.

Observação

Para obter uma lista de serviços do Azure que dão suporte a identidades gerenciadas, veja Serviços que dão suporte a identidades gerenciadas para recursos do Azure.

Testar o aplicativo Web

  1. Criar um namespace de Hubs de Eventos e um hub de eventos.
  2. Implantar um aplicativo Web no Azure. Veja na seguinte seção com guias os links do aplicativo Web de exemplo no GitHub.
  3. Verifique se o SendReceive.aspx está definido como o documento padrão para o aplicativo Web.
  4. Habilite uma identidade para o aplicativo Web.
  5. Atribua essa identidade à função de Proprietário de dados dos Hubs de Eventos no nível do namespace ou no nível dos hubs de eventos.
  6. Execute o aplicativo Web, insira o nome do namespace e o nome do hub de eventos, insira uma mensagem e selecione Enviar. Para receber o evento, selecione Receber.

Agora você pode iniciar o aplicativo Web e apontar o navegador para a página aspx de exemplo. Você pode encontrar o aplicativo Web de exemplo que envia e recebe dados de recursos dos Hubs de Eventos no repositório GitHub.

Instale o pacote mais recente do NuGete comece a enviar eventos aos Hubs de Eventos usando EventHubProducerClient e a receber eventos usando EventHubConsumerClient.

Observação

Para uma amostra de Java que usa uma identidade gerenciada para publicar eventos em um hub de eventos, consulte Publicar eventos com uma amostra de identidade do Azure no 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;
        }
    }
}

Hubs de Eventos para Kafka

Você pode usar aplicativos Apache Kafka para enviar e receber mensagens dos Hubs de Eventos do Azure usando o OAuth de identidade gerenciada. Consulte o exemplo a seguir no GitHub: Hubs de Eventos para o Kafka – enviar e receber mensagens usando o OAuth de identidade gerenciada.

Exemplos

.

Próximas etapas