Autenticar uma identidade gerenciada na ID do Microsoft Entra para acessar os recursos dos Hubs de Serviços do Azure

As identidades gerenciadas dos recursos do Azure fornecem aos serviços do Azure uma identidade gerenciada automaticamente na ID do Microsoft Entra. É possível usar essa identidade para se autenticar em qualquer serviço, como o Barramento de Serviço do Azure, que seja compatível com a autenticação do Microsoft Entra, sem a necessidade de 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 Barramento de Serviço:

  1. Habilite a identidade gerenciada para seu aplicativo ou ambiente cliente. Por exemplo, habilite a identidade gerenciada para seu aplicativo Serviço de Aplicativo do Azure, aplicativo Azure Functions ou uma máquina virtual na qual seu aplicativo está em execução. Aqui estão os artigos que ajudam você com esta etapa:

  2. Atribua a função Proprietário dos Dados do Barramento de Serviço do Azure, Remetente de Dados do Barramento de Serviço do Azure ou Receptor 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, fila ou tópico do Barramento de Serviço). Para obter instruções para atribuir uma função a uma identidade gerenciada, consulte Como atribuir funções do Azurepor meio do portal do Azure.

  3. Em seu aplicativo, use a identidade gerenciada e o ponto de extremidade para o namespace do Barramento de Serviço para se conectar ao namespace.

    Por exemplo, no .NET, você usa o construtor ServiceBusClient que usa os parâmetros TokenCredential e fullyQualifiedNamespace (uma cadeia de caracteres, por exemplo: cotosons.servicebus.windows.net) para se conectar ao Barramento de Serviço por meio da identidade gerenciada. Você passa defaultAzureCredential, que deriva de TokenCredential e usa a identidade gerenciada. Em DefaultAzureCredentialOptions, defina a ManagedIdentityClientId 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 de SAS para um namespace do Barramento de Serviço e permitir apenas a autenticação do Microsoft Entra. Para obter instruções passo a passo, confira Desabilitar a autenticação local.

Funções internas do Azure para o Barramento de Serviço do Azure

O Microsoft Entra autoriza o acesso aos 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 abrangem conjuntos comuns de permissões usados para acessar entidades do Serviço de Barramento. Você também pode definir funções personalizadas para acessar os dados.

O Azure fornece as funções internas do Azure a seguir para autorizar o acesso a um namespace 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 Barramento de Serviço ou na página Fila do Barramento de Serviço ou na página Tópicos do Barramento de Serviço . Para obter instruções passo a passo para atribuir uma função, consulte Como atribuir funções do Azure por meio do portal do Azure.

Escopo 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. De acordo com as melhores práticas, sempre é melhor conceder o escopo mais estreito possível.

A lista a seguir descreve os níveis de escopo de acesso que você pode definir para os recursos de Barramento de Serviço, começando pelo escopo mais estreito:

  • Fila, tópico ou assinatura: a atribuição de função se aplica à entidade de Barramento de Serviço específica.

  • Namespace do Barramento de Serviço: a atribuição de função abrange toda a topologia do Barramento de Serviço no namespace.

  • Grupo de recursos: a atribuição de função se aplica a todos os recursos do Barramento de Serviço no grupo de recursos.

  • Assinatura: a atribuição de função se aplica a todos os recursos do Barramento de Serviço em todos os grupos de recursos na assinatura.

    Observação

    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 dá suporte à atribuição de usuários/grupos/identidades gerenciadas às funções do Barramento de Serviço do Azure no nível da assinatura. 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 Barramento de Serviço do Azure:

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, confira Compreender as definições de função. Para obter informações sobre como criar funções personalizadas do Azure, confira Funções personalizadas do Azure.

Uso de SDKs

No .NET, o objeto ServiceBusClient é inicializado usando um construtor que usa um namespace totalmente qualificado e um TokenCredential. O DefaultAzureCredential deriva de TokenCredential, que usa automaticamente a identidade gerenciada configurada para o aplicativo. O fluxo do contexto de identidade gerenciada para o Barramento de Serviço e o handshake de autorização são manipulados automaticamente pela credencial de token. É um modelo mais simples que usar SAS.

var client = new ServiceBusClient('cotosons.servicebus.windows.net', new DefaultAzureCredential());

Você envia e recebe mensagens normalmente por meio de ServiceBusSender e ServiceBusReceiver ou ServiceBusProcessor.

Para obter instruções passo a passo completas para enviar e receber mensagens por meio de uma identidade gerenciada, consulte os guias de início rápido a seguir. Esses guias de início rápido 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.

Observação

A identidade gerenciada funciona somente dentro do ambiente do Azure, em serviços de aplicativos, VMs do Azure e nos conjuntos de dimensionamento. Para aplicativos .NET, a biblioteca Microsoft.Azure.Services.AppAuthentication, que é usada pelo pacote NuGet do Barramento de Serviço, fornece uma abstração sobre esse protocolo e dá suporte a uma experiência de desenvolvimento local. Essa biblioteca também permite testar o código localmente no computador de desenvolvimento, usando a conta de usuário do Visual Studio, a CLI 2.0 do Azure ou a Autenticação Integrada do Active Directory. Para obter mais informações sobre as opções de desenvolvimento local com essa biblioteca, consulte Autenticação de serviço a serviço para o Azure Key Vault usando .NET.

Próximas etapas

Veja este exemplo de aplicativo Web .NET no GitHub, que usa uma identidade gerenciada para se conectar ao Barramento de Serviço para enviar e receber mensagens. Adicione a identidade do serviço de aplicativo à função Proprietário de Dados do Barramento de Serviço do Azure.