Autenticar uma identidade gerenciada com a ID do Microsoft Entra para acessar os recursos do Barramento de Serviço do Azure
As identidades geridas para os recursos do Azure proporcionam aos recursos do Azure uma identidade gerida automaticamente no Microsoft Entra ID. Você pode usar essa identidade para autenticar em qualquer serviço, como o Barramento de Serviço do Azure, que ofereça suporte à autenticação do Microsoft Entra, sem ter credenciais em seu código. Se você não estiver familiarizado com identidades gerenciadas, consulte Identidades gerenciadas para recursos do Azure antes de continuar a ler este artigo.
Aqui estão as etapas de alto nível para usar uma identidade gerenciada para acessar uma entidade do Service Bus:
Habilite a identidade gerenciada para seu aplicativo cliente ou ambiente. Por exemplo, habilite a identidade gerenciada para seu aplicativo do Serviço de Aplicativo do Azure, aplicativo do Azure Functions ou uma máquina virtual na qual seu aplicativo está sendo executado. Aqui estão os artigos que o ajudam nesta etapa:
Atribua a função de Proprietário de Dados do Barramento de Serviço do Azure, Remetente de Dados do Barramento de Serviço do Azure ou Recetor de Dados do Barramento de Serviço do Azure à identidade gerenciada no escopo apropriado (assinatura do Azure, grupo de recursos, namespace do Barramento de Serviço ou fila ou tópico do Barramento de Serviço). Para obter instruções sobre como atribuir uma função a uma identidade gerenciada, consulte Atribuir funções do Azure usando o portal do Azure.
Em seu aplicativo, use a identidade gerenciada e o ponto de extremidade para namespace do Service Bus para se conectar ao namespace.
Por exemplo, no .NET, você usa o construtor ServiceBusClient que usa
TokenCredential
efullyQualifiedNamespace
(uma cadeia de caracteres, por exemplo:cotosons.servicebus.windows.net
) parâmetros para se conectar ao Service Bus usando a identidade gerenciada. Você passa DefaultAzureCredential, que deriva eTokenCredential
usa a identidade gerenciada. EmDefaultAzureCredentialOptions
, defina oManagedIdentityClientId
como a ID da identidade gerenciada do cliente.string fullyQualifiedNamespace = "<your namespace>.servicebus.windows.net>"; string userAssignedClientId = "<your managed identity client ID>"; var credential = new DefaultAzureCredential( new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId }); var sbusClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
Importante
Você pode desabilitar a autenticação de chave local ou SAS para um namespace do Service Bus e permitir apenas a autenticação do Microsoft Entra. Para obter instruções passo a passo, consulte Desativar a autenticação local.
Funções internas do Azure para o Barramento de Serviço do Azure
O Microsoft Entra autoriza o acesso a recursos protegidos por meio do RBAC (controle de acesso baseado em função) do Azure. O Barramento de Serviço do Azure define um conjunto de funções internas do Azure que englobam conjuntos comuns de permissões usadas para acessar entidades do Barramento de Serviço. Você também pode definir funções personalizadas para acessar os dados.
O Azure fornece as seguintes funções internas do Azure para autorizar o acesso a um namespace do Service Bus:
- Proprietário de Dados do Barramento de Serviço do Azure: use essa função para permitir acesso total ao namespace do Barramento de Serviço e suas entidades (filas, tópicos, assinaturas e filtros)
- Remetente de Dados do Barramento de Serviço do Azure: use esta função para permitir o envio de mensagens para filas e tópicos do Barramento de Serviço.
- Recetor de Dados do Barramento de Serviço do Azure: use essa função para permitir o recebimento de mensagens de filas e assinaturas do Barramento de Serviço.
Para atribuir uma função a uma identidade gerenciada no portal do Azure, use a página Controle de acesso (IAM). Navegue até esta página selecionando Controle de acesso (IAM) na página Namespace do Service Bus ou na página da fila do Service Bus ou na página de tópico do Service Bus. Para obter instruções passo a passo para atribuir uma função, consulte Atribuir funções do Azure usando o portal do Azure.
Âmbito do recurso
Antes de atribuir uma função do Azure a uma identidade gerenciada, determine o escopo de acesso que a identidade gerenciada deve ter. As melhores práticas ditam que é sempre melhor conceder apenas o âmbito mais restrito possível.
A lista a seguir descreve os níveis nos quais você pode definir o escopo de acesso aos recursos do Service Bus, começando com o escopo mais restrito:
Fila, tópico ou assinatura: a atribuição de função se aplica à entidade específica do Service Bus.
Namespace do Barramento de Serviço: a atribuição de função abrange toda a topologia do Service Bus sob o namespace.
Grupo de recursos: a atribuição de função aplica-se a todos os recursos do Service Bus no grupo de recursos.
Assinatura: a atribuição de função aplica-se a todos os recursos do Service Bus em todos os grupos de recursos da assinatura.
Nota
Lembre-se de que as atribuições de função do Azure podem levar até cinco minutos para se propagar.
Atualmente, o portal do Azure não oferece suporte à atribuição de usuários, grupos ou identidades gerenciadas a funções do Service Bus Azure no nível de assinatura do tópico. Veja um exemplo de como usar o comando da CLI do Azure: az-role-assignment-create para atribuir uma identidade a uma função do Azure do Service Bus:
az role assignment create \
--role $service_bus_role \
--assignee $assignee_id \
--scope /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ServiceBus/namespaces/$service_bus_namespace/topics/$service_bus_topic/subscriptions/$service_bus_subscription
Para obter mais informações sobre como as funções internas são definidas, consulte Compreender as definições de função. Para obter informações sobre como criar funções personalizadas do Azure, consulte Funções personalizadas do Azure.
Com SDKs
No .NET, o objeto ServiceBusClient é inicializado usando um construtor que usa um namespace totalmente qualificado e um TokenCredential
arquivo . O DefaultAzureCredential
deriva do TokenCredential
, que usa automaticamente a identidade gerenciada configurada para o aplicativo. O fluxo do contexto de identidade gerenciada para o Service Bus e o handshake de autorização são automaticamente manipulados pela credencial de token. É um modelo mais simples do que usar SAS.
var client = new ServiceBusClient('cotosons.servicebus.windows.net', new DefaultAzureCredential());
Você envia e recebe mensagens como de costume usando ServiceBusSender e ServiceBusReceiver ou ServiceBusProcessor.
Para obter instruções passo a passo completas para enviar e receber mensagens usando uma identidade gerenciada, consulte os seguintes inícios rápidos. Esses inícios rápidos têm o código para usar uma entidade de serviço para enviar e receber mensagens, mas o código é o mesmo para usar uma identidade gerenciada.
Nota
A identidade gerenciada funciona somente dentro do ambiente do Azure, em serviços de aplicativo, VMs do Azure e conjuntos de escala. Para aplicativos .NET, a biblioteca Microsoft.Azure.Services.AppAuthentication, que é usada pelo pacote NuGet do Service Bus, fornece uma abstração sobre esse protocolo e dá suporte a uma experiência de desenvolvimento local. Essa biblioteca também permite que você teste seu código localmente em sua máquina de desenvolvimento, usando sua conta de usuário do Visual Studio, Azure CLI 2.0 ou Autenticação Integrada do Ative Directory. Para obter mais informações sobre opções de desenvolvimento local com esta biblioteca, consulte Autenticação de serviço a serviço no Cofre de Chaves do Azure usando .NET.
Próximos passos
Consulte este exemplo de aplicativo Web .NET no GitHub, que usa uma identidade gerenciada para se conectar ao Service Bus para enviar e receber mensagens. Adicione a identidade do serviço de aplicativo à função de Proprietário de Dados do Barramento de Serviço do Azure.