Partilhar via


Autenticar aplicativos .NET hospedados no Azure em recursos do Azure usando uma identidade gerenciada atribuída ao sistema

A abordagem recomendada para autenticar um aplicativo hospedado no Azure em outros recursos do Azure é usar uma identidade gerenciada . Essa abordagem é suportada para a maioria dos serviços do Azure, incluindo aplicativos hospedados no Serviço de Aplicativo do Azure, Aplicativos de Contêiner do Azure e Máquinas Virtuais do Azure. Descubra mais sobre diferentes técnicas e abordagens de autenticação na página visão geral da autenticação. Nas seções a seguir, você aprenderá:

  • Conceitos essenciais de identidade gerenciada
  • Como criar uma identidade gerenciada atribuída ao sistema para seu aplicativo
  • Como atribuir funções à identidade gerenciada atribuída ao sistema
  • Como autenticar usando a identidade gerenciada atribuída pelo sistema a partir do código do seu aplicativo

Conceitos essenciais de identidade gerenciada

Uma identidade gerenciada permite que seu aplicativo se conecte com segurança a outros recursos do Azure sem o uso de chaves secretas ou outros segredos de aplicativo. Internamente, o Azure rastreia a identidade e os recursos aos quais ele pode 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.

Há dois tipos de identidades gerenciadas a serem consideradas ao configurar seu aplicativo hospedado:

  • identidades gerenciadas atribuídas pelo sistema são habilitadas diretamente em um recurso do Azure e vinculadas ao seu ciclo de vida. Quando o recurso é excluído, o Azure exclui automaticamente a identidade para você. As identidades atribuídas pelo sistema fornecem uma abordagem minimalista para o uso de identidades gerenciadas.
  • identidades gerenciadas atribuídas pelo usuário são criadas como recursos autônomos do Azure e oferecem maior flexibilidade e recursos. Eles são ideais para soluções que envolvem vários recursos do Azure que precisam compartilhar a mesma identidade e permissões. Por exemplo, se várias máquinas virtuais precisarem acessar o mesmo conjunto de recursos do Azure, uma identidade gerenciada atribuída pelo usuário fornecerá reutilização e gerenciamento otimizado.

Dica

Saiba mais sobre como selecionar e gerenciar identidades gerenciadas atribuídas pelo sistema e identidades gerenciadas atribuídas pelo usuário no artigo Recomendações de práticas recomendadas de identidade gerenciada.

As seções à frente descrevem as etapas para habilitar e usar uma identidade gerenciada atribuída ao sistema para um aplicativo hospedado no Azure. Se você precisar usar uma identidade gerenciada atribuída pelo usuário, visite o artigo identidades gerenciadas atribuídas pelo usuário para obter mais informações.

Habilitar uma identidade gerenciada atribuída ao sistema no recurso de hospedagem do Azure

Para começar a usar uma identidade gerenciada atribuída pelo sistema com seu aplicativo, habilite a identidade no recurso do Azure que hospeda seu aplicativo, como um Serviço de Aplicativo do Azure, Aplicativo de Contêiner do Azure ou Máquina Virtual do Azure.

Você pode habilitar uma identidade gerenciada atribuída pelo sistema para um recurso do Azure usando o portal do Azure ou a CLI do Azure.

  • do portal do Azure
  • da CLI do Azure
  1. No portal do Azure, navegue até o recurso que hospeda o código do aplicativo, como um Serviço de Aplicativo do Azure ou uma instância do Aplicativo de Contêiner do Azure.

  2. Na página Visão Geral do recurso, expanda Configurações e selecione Identidade na navegação.

  3. Na página Identidade, alterne o controle deslizante Status para On.

  4. Selecione Salvar para aplicar as alterações.

    Uma captura de tela mostrando como habilitar uma identidade atribuída ao sistema em um aplicativo de contêiner.

Atribuir funções à identidade gerenciada

Em seguida, determine quais funções seu aplicativo precisa e atribua essas funções à identidade gerenciada. Você pode atribuir funções a uma identidade gerenciada nos seguintes escopos:

  • Resource: As funções atribuídas aplicam-se apenas a esse recurso específico.
  • Grupo de recursos: As funções atribuídas aplicam-se a todos os recursos contidos no grupo de recursos.
  • Subscrição: As funções atribuídas aplicam-se a todos os recursos contidos na subscrição.

O exemplo a seguir mostra como atribuir funções no escopo do grupo de recursos, já que muitos aplicativos gerenciam todos os seus recursos relacionados do Azure usando um único grupo de recursos.

  1. Navegue até à página Visão Geral do grupo de recursos que contém o aplicativo com a identidade gerenciada atribuída ao sistema.

  2. Selecione Controle de Acesso (IAM) na barra de navegação à esquerda.

  3. Na página Controlo de acesso (IAM), selecione + Adicionar no menu superior e, em seguida, escolha Adicionar atribuição de função para navegar até a página Adicionar atribuição de função.

    Uma captura de tela mostrando como acessar a página de atribuição de função de identidade.

  4. A página Adicionar atribuição de função apresenta um fluxo de trabalho com guias em várias etapas para atribuir funções a identidades. Na pasta inicial Função, usa a caixa de pesquisa na parte superior para localizar a função que pretendes atribuir à identidade.

  5. Selecione a função nos resultados e, em seguida, escolha Avançar para ir para o separador Membros.

  6. Para a opção Atribuir acesso a, selecione Identidade gerenciada.

  7. Para a opção Membros, escolha + Selecionar membros para abrir o painel Selecionar identidades gerenciadas.

  8. No painel Selecionar identidades geridas, use os menus suspensos de Assinatura e Identidade gerida para filtrar os resultados da pesquisa para as suas identidades. Use a caixa de pesquisa Selecionar para localizar a identidade do sistema ativada para o recurso do Azure que hospeda a sua aplicação.

    Uma captura de tela mostrando o processo de atribuição de identidade gerenciada.

  9. Selecione a identidade e escolha Selecionar na parte inferior do painel para continuar.

  10. Selecione Revisão + Atribua na parte inferior da página.

  11. Na aba final Revisão + atribuir, selecione Revisão + atribuir para concluir o fluxo de trabalho.

Implementar DefaultAzureCredential em seu aplicativo

DefaultAzureCredential é uma sequência pré-definida e ordenada de mecanismos de autenticação para o Microsoft Entra ID. Cada mecanismo de autenticação é uma classe derivada da classe TokenCredential e é denominado uma credencial. No tempo de execução, 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.

Para usar DefaultAzureCredential, adicione o Azure.Identity e, opcionalmente, os pacotes Microsoft.Extensions.Azure ao seu aplicativo:

Em um terminal de 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 cliente do SDK do Azure. Essas classes e seus próprios serviços personalizados devem ser registrados para que possam ser acessados por meio de injeção de dependência em todo o aplicativo. No Program.cs, conclua as seguintes etapas para registrar uma classe de cliente e DefaultAzureCredential:

  1. Inclua os namespaces Azure.Identity e Microsoft.Extensions.Azure por meio de diretivas using.
  2. Registe o cliente de serviço do Azure usando o método de extensão prefixado com Addcorrespondente.
  3. Passe uma instância de DefaultAzureCredential para o método UseCredential.

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 ao UseCredential é instanciar 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 nas variáveis de ambiente por um principal de serviço de aplicação ou em ferramentas de desenvolvedor instaladas localmente, como o Visual Studio, por um conjunto de credenciais de desenvolvedor. Qualquer uma das abordagens 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 em outros serviços automaticamente.