Autenticar uma identidade gerenciada com o Microsoft Entra ID para acessar recursos de 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 a recursos de Hubs de Eventos usando credenciais do Microsoft Entra de aplicativos executados em Máquinas Virtuais (VMs) do Azure, aplicativos de Função, Conjuntos de Dimensionamento de Máquina Virtual e outros serviços. Usando identidades gerenciadas para recursos do Azure junto com a autenticação do Microsoft Entra, você pode evitar armazenar credenciais com seus aplicativos 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 identidades gerenciadas para recursos do Azure para acessar recursos de Hubs de Eventos de sua VM, você deve primeiro habilitar identidades gerenciadas para Recursos do Azure na VM. Para saber como habilitar identidades gerenciadas para recursos do Azure, consulte um destes artigos:

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

Para autorizar uma solicitação ao serviço Hubs de Eventos a partir de uma identidade gerenciada em seu aplicativo, primeiro configure as configurações de controle de acesso baseado em função do Azure (Azure RBAC) para essa identidade gerenciada. Os Hubs de Eventos do Azure definem funções do Azure que englobam permissões para envio e leitura de Hubs de Eventos. Quando a função do Azure é atribuída a uma identidade gerenciada, a identidade gerenciada recebe acesso aos dados dos Hubs de Eventos no escopo apropriado. Para obter mais informações sobre como atribuir funções do Azure, consulte Autenticar com o Microsoft Entra ID para acessar recursos de Hubs de Eventos.

Utilizar Hubs de Eventos com identidades geridas

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

Aqui estamos usando um aplicativo Web de exemplo hospedado no Serviço de Aplicativo do Azure. Para obter 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. Selecione Guardar para guardar a definição.

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

  4. Selecione Sim na mensagem informativa.

    Depois de habilitar essa configuração, uma nova identidade de serviço é criada em sua ID do Microsoft Entra e configurada no host do Serviço de Aplicativo.

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

Para atribuir funções do Azure usando o portal do Azure

Atribua uma das funções dos Hubs de Eventos à identidade gerenciada no escopo desejado (namespace de Hubs de Eventos, grupo de recursos, assinatura). Para obter os passos detalhados, veja o artigo Atribuir funções do Azure com o portal do Azure.

Nota

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

Testar a aplicação Web

  1. Crie um namespace de Hubs de Eventos e um hub de eventos.
  2. Implante o aplicativo Web no Azure. Consulte a seção com guias a seguir para obter links para o 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 a identidade para o aplicativo Web.
  5. Atribua essa identidade à função Proprietário de Dados dos Hubs de Eventos no nível do namespace ou do hub de eventos.
  6. Execute o aplicativo Web, insira o nome do namespace e o nome do hub de eventos, uma mensagem e selecione Enviar. Para receber o evento, selecione Receber.

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

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

Nota

Para obter um exemplo Java que usa uma identidade gerenciada para publicar eventos em um hub de eventos, consulte Publicar eventos com o exemplo 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 a identidade gerenciada OAuth. Veja o exemplo a seguir no GitHub: Hubs de Eventos para Kafka - envie e receba mensagens usando a identidade gerenciada OAuth.

Amostras

.

Próximos passos