Autenticar aplicativos hospedados no Azure nos 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:
- Atribuídos 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.
- Atribuído 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 o Serviço de Aplicativo do Azure, precisará habilitar a identidade gerenciada para o aplicativo Web do 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.
2 – Atribuir funções à identidade gerenciada
Em seguida, determine quais funções (permissões) seu aplicativo precisa e atribua 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.
3 – Implementar DefaultAzureCredential no seu aplicativo
DefaultAzureCredential é uma sequência fundamentada e ordenada de mecanismos para autenticação no Microsoft Entra. Cada mecanismo de autenticação é uma classe derivada da classe TokenCredential e é conhecida como credencial. No runtime, DefaultAzureCredential
tenta autenticar usando a primeira credencial. Se essa credencial não conseguir adquirir um token de acesso, a próxima credencial na sequência será tentada e assim por diante, até que um token de acesso seja obtido com êxito. Dessa forma, seu aplicativo pode usar credenciais diferentes em ambientes diferentes sem escrever código específico do ambiente.
A ordem e os locais em que DefaultAzureCredential
procura credenciais são encontrados em DefaultAzureCredential.
Para usar DefaultAzureCredential
, adicione os pacotes Azure.Identity e, opcionalmente, os pacotes Microsoft.Extensions.Azure ao seu aplicativo:
Em um terminal da sua escolha, navegue até o diretório do projeto de aplicativo e execute os seguintes comandos:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Os serviços do Azure são acessados usando classes de cliente especializadas das várias bibliotecas de clientes do SDK do Azure. Essas classes e seus próprios serviços personalizados devem ser registrados para que possam ser acessados pela injeção de dependência no aplicativo. Em Program.cs
, conclua as seguintes etapas para registrar uma classe cliente e DefaultAzureCredential
:
- Inclua os namespaces
Azure.Identity
eMicrosoft.Extensions.Azure
por meio das diretivasusing
. - Registre o cliente de serviço do Azure usando o método de extensão com prefixo
Add
correspondente. - Passe uma instância do
DefaultAzureCredential
para o métodoUseCredential
.
Por exemplo:
using Microsoft.Extensions.Azure;
using Azure.Identity;
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new DefaultAzureCredential());
});
Uma alternativa para UseCredential
é criar uma instância de DefaultAzureCredential
diretamente:
using Azure.Identity;
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
Quando o código anterior é executado na sua estação de trabalho de desenvolvimento local, ele procura uma entidade de serviço de aplicativo nas variáveis de ambiente ou procura um conjunto de credenciais de desenvolvedor nas ferramentas de desenvolvedor instaladas localmente, como o Visual Studio. Qualquer abordagem pode ser usada 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.