Autenticando aplicativos hospedados no Azure para recursos do Azure com o SDK do Azure para .NET

Quando um aplicativo é hospedado no Azure usando um serviço como Serviço de Aplicativo do Azure, Máquinas Virtuais do Azure ou Instâncias de Contêiner do Azure, a abordagem recomendada para autenticar um aplicativo para recursos do Azure é usar uma identidade gerenciada.

Uma identidade gerenciada fornece uma identidade para seu aplicativo de modo que ela possa se conectar a outros recursos do Azure sem a necessidade de usar uma chave secreta ou outro segredo do aplicativo. Internamente, o Azure sabe a identidade do seu aplicativo e a quais recursos ele tem permissão para se conectar. O Azure usa essas informações para obter automaticamente tokens do Microsoft Entra para o aplicativo para permitir que ele se conecte a outros recursos do Azure, tudo sem que você precise gerenciar segredos do aplicativo.

Tipos de identidade gerenciada

Há dois tipos de identidades gerenciadas:

  • Identidades gerenciadas atribuídas pelo sistema – Esse tipo de identidade gerenciada é fornecido e vinculado diretamente a um recurso do Azure. Ao habilitar a identidade gerenciada em um recurso do Azure, você obtém uma identidade gerenciada atribuída pelo sistema para esse recurso. Uma identidade gerenciada atribuída pelo sistema está vinculada ao ciclo de vida do recurso do Azure ao qual está associado. Quando o recurso é excluído, o Azure exclui automaticamente a identidade para você. Como tudo o que você precisa fazer é habilitar a identidade gerenciada para o recurso do Azure que hospeda seu código, esse é o tipo mais fácil de identidade gerenciada a ser usado.
  • Identidades gerenciadas atribuídas pelo usuário: você também pode criar uma identidade gerenciada como um recurso autônomo do Azure. Isso é usado com mais frequência quando sua solução tem várias cargas de trabalho executadas em vários recursos do Azure que precisam compartilhar a mesma identidade e as mesmas permissões. Por exemplo, se a sua solução tivesse componentes executados em várias instâncias de máquina virtual e Serviço de Aplicativo que precisassem de acesso ao mesmo conjunto de recursos do Azure, criar e usar uma identidade gerenciada atribuída pelo usuário nesses recursos faria sentido.

Este artigo abordará as etapas para habilitar e usar uma identidade gerenciada atribuída pelo sistema para um aplicativo. Se você precisar usar uma identidade gerenciada atribuída pelo usuário, consulte o artigo Gerenciar identidades gerenciadas atribuídas pelo usuário para ver como criar uma identidade gerenciada atribuída pelo usuário.

1 – Habilitar a identidade gerenciada no recurso do Azure que hospeda o aplicativo

A primeira etapa é habilitar a identidade gerenciada no recurso do Azure que hospeda seu aplicativo. Por exemplo, se você estiver hospedando um aplicativo .NET usando Serviço de Aplicativo do Azure, precisará habilitar a identidade gerenciada para o aplicativo Web Serviço de Aplicativo que está hospedando seu aplicativo. Se estivesse usando uma máquina virtual para hospedar seu aplicativo, você permitiria que sua VM usasse a identidade gerenciada.

Você pode habilitar a identidade gerenciada a ser usada para um recurso do Azure usando o portal do Azure ou a CLI do Azure.

Instruções Captura de tela
Navegue até o recurso que hospeda o código do aplicativo no portal do Azure.

Por exemplo, você pode digitar o nome do recurso na caixa de pesquisa na parte superior da página e navegar até ele selecionando-o na caixa de diálogo.
A screenshot showing how to use the top search bar in the Azure portal to locate and navigate to a resource in Azure.
Na página do recurso, selecione o item de menu Identidade no menu à esquerda.

Todos os recursos do Azure capazes de dar suporte à identidade gerenciada terão um item de menu Identidade, embora o layout do menu possa variar ligeiramente.
A screenshot showing the location of the Identity menu item in the left-hand menu for an Azure resource.
Na página Identidade:
  1. Mova o controle deslizante Status para Ligar.
  2. Clique em Salvar.
Uma caixa de diálogo de confirmação verificará se você deseja habilitar a identidade gerenciada para o serviço. Responda Sim, e a identidade gerenciada será habilitada para o recurso do Azure.
A screenshot showing how to enable managed identity for an Azure resource on the resource's Identity page.

2 – Atribuir funções à identidade gerenciada

Em seguida, você precisa determinar de quais funções (permissões) seu aplicativo precisa e atribuir a identidade gerenciada a essas funções no Azure. Uma identidade gerenciada pode ser atribuída a funções em um escopo de recurso, grupo de recursos ou assinatura. Este exemplo mostra como atribuir funções no escopo do grupo de recursos, uma vez que a maioria dos aplicativos agrupa todos os seus recursos do Azure em um único grupo de recursos.

Instruções Captura de tela
Localize o grupo de recursos do aplicativo pesquisando pelo nome do grupo de recursos e usando a caixa de pesquisa na parte superior do portal do Azure.

Navegue até o grupo de recursos selecionando o nome do grupo de recursos no título Grupos de recursos na caixa de diálogo.
A screenshot showing how to use the top search bar in the Azure portal to locate and navigate to a resource group in Azure. This is the resource group that you'll assign roles (permissions) to.
Na página do grupo de recursos, selecione Controle de acesso (IAM) no menu à esquerda. A screenshot showing the location of the Access control (IAM) menu item in the left-hand menu of an Azure resource group.
Na página Controle de acesso (IAM):
  1. Selecione a guia Atribuições de função.
  2. Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função no menu suspenso resultante.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
A página Adicionar atribuição de função lista todas as funções que podem ser atribuídas ao grupo de recursos.
  1. Use a caixa de pesquisa para filtrar a lista para obter um tamanho mais gerenciável. Este exemplo mostra como filtrar as funções do Blob de Armazenamento.
  2. Selecione a função que você deseja atribuir.
Selecione Avançar para ir para a próxima tela.
A screenshot showing how to filter and select role assignments to be added to the resource group.
A próxima página Adicionar atribuição de função permite especificar a qual usuário atribuir a função.
  1. Escolha Identidade gerenciada em Atribuir acesso a.
  2. Selecionar + Selecionar membros em Membros
Uma caixa de diálogo será aberta no lado direito do portal do Azure.
A screenshot showing how to select managed identity as the type of user you want to assign the role (permission) on the add role assignments page.
Na caixa de diálogo Selecionar identidades gerenciadas:
  1. A lista suspensa Identidade gerenciada e caixa de texto Selecionar podem ser usadas para filtrar a lista de identidades gerenciadas em sua assinatura. Neste exemplo, selecionando Serviço de Aplicativo, somente identidades gerenciadas associadas a um Serviço de Aplicativo são exibidas.
  2. Selecione a identidade gerenciada para o recurso do Azure que hospeda seu aplicativo.
Para continuar, selecione Selecionar na parte inferior da caixa de diálogo.
A screenshot showing how to use the select managed identities dialog to filter and select the managed identity to assign the role to.
A identidade gerenciada agora será exibida como selecionado na tela Adicionar atribuição de função.

Selecione Revisar + atribuir para ir para a página final e, em seguida, Revisar + atribuir novamente para concluir o processo.
A screenshot of the final add role assignment screen where a user needs to select the Review + Assign button to finalize the role assignment.

3 – Implementar DefaultAzureCredential no seu aplicativo

DefaultAzureCredential dá suporte a vários métodos de autenticação e determina o método de autenticação que está sendo usado em runtime. Dessa forma, seu aplicativo pode usar diferentes métodos de autenticação em ambientes diferentes sem implementar código específico do ambiente.

A ordem e os locais em que DefaultAzureCredential procura credenciais são encontrados em DefaultAzureCredential.

Para implementar DefaultAzureCredential, primeiro adicione os pacotes Azure.Identity e, opcionalmente, os pacotes Microsoft.Extensions.Azure ao seu aplicativo. Você pode fazer isso usando a linha de comando ou o Gerenciador de Pacotes NuGet.

Abra um ambiente de terminal de sua escolha no diretório do projeto do aplicativo e insira o comando abaixo.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Os serviços do Azure geralmente são acessados usando classes de cliente correspondentes do SDK. Essas classes e seus próprios serviços personalizados devem ser registrados no arquivo Program.cs para que possam ser acessados por meio de injeção de dependência em todo o aplicativo. Dentro de Program.cs, siga as etapas abaixo para configurar corretamente seu serviço e DefaultAzureCredential.

  1. Inclua os namespaces Azure.Identity e Microsoft.Extensions.Azure com uma instrução em uso.
  2. Registre o serviço do Azure usando métodos auxiliares relevantes.
  3. Passe uma instância do objeto DefaultAzureCredential para o método UseCredential.

Um exemplo disso é mostrado na ilustração a seguir.

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

Como alternativa, você também pode utilizar DefaultAzureCredential em seus serviços mais diretamente sem a ajuda de métodos de registro adicionais do Azure, conforme visto abaixo.

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Quando o código acima for executado em sua estação de trabalho local durante o desenvolvimento local, ele procurará nas variáveis de ambiente de uma entidade de serviço de aplicativo ou no Visual Studio, VS Code, na CLI do Azure ou Azure PowerShell um conjunto de credenciais de desenvolvedor, que podem ser usadas para autenticar o aplicativo nos recursos do Azure durante o desenvolvimento local.

Quando implantado no Azure, esse mesmo código também pode autenticar seu aplicativo em outros recursos do Azure. DefaultAzureCredential pode recuperar configurações de ambiente e configurações de identidade gerenciada para autenticar-se em outros serviços automaticamente.