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 as identidades gerenciadas para recursos do Azure, confira Configurar as identidades gerenciadas em VMs do Azure.
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 RBAC (controle de acesso baseado em função) dessa identidade gerenciada. Os Hubs de Eventos do Azure definem funções do Azure que abrangem permissões para enviar e receber eventos dos Hubs de Eventos. Quando uma 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, confira Autenticar-se com o Microsoft Entra ID para acessar os recursos dos Hubs de Eventos.
Aplicativo de exemplo
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:
Vá para Configurações e selecione Identidade.
Selecione o Status a ser Ativado.
Clique em Salvar para salvar a configuração.
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
- Criar um namespace de Hubs de Eventos e um hub de eventos.
- Implantar um aplicativo Web no Azure. Veja na seguinte seção com guias os links do aplicativo Web de exemplo no GitHub.
- Verifique se o SendReceive.aspx está definido como o documento padrão para o aplicativo Web.
- Habilite uma identidade para o aplicativo Web.
- 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.
- 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.
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
- .NET.
- Para obter um exemplo que usa o pacote Azure.Messaging.EventHubs mais recente, confira Publicar eventos com uma identidade gerenciada
- Para obter um exemplo que usa o pacote Microsoft.Azure.EventHubs herdado, confira este exemplo do .NET no GitHub
- Java – confira os exemplos a seguir.
- Exemplo de Publicar eventos com uma identidade do Azure no GitHub.
- Para saber como utilizar o protocolo do Apache Kafka a fim de enviar e receber eventos de um hub de eventos usando uma identidade gerenciada, confira Exemplo de Hubs de Eventos para Kafka para enviar e receber mensagens usando uma identidade gerenciada.
Conteúdo relacionado
- Para saber mais sobre as identidades gerenciadas para os recursos do Azure, confira o artigo O que são as identidades gerenciadas para recursos do Azure?
- Confira os seguintes artigos relacionados:
- Autenticar solicitações nos Hubs de Eventos do Azure por meio de um aplicativo usando o Microsoft Entra ID
- Autenticar solicitações para Hubs de Eventos do Azure usando Assinaturas de Acesso Compartilhado
- Autorizar o acesso aos recursos dos Hubs de Eventos usando o Microsoft Entra ID
- Autorizar o acesso aos recursos dos Hubs de Eventos usando Assinaturas de Acesso Compartilhado