Compartilhar via


Autenticar aplicativos JavaScript hospedados no Azure em recursos do Azure usando uma identidade gerenciada atribuída pelo sistema

A abordagem recomendada para autenticar um aplicativo hospedado no Azure em outros recursos do Azure é usar uma identidade gerenciada. Essa abordagem tem suporte 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 de 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 pelo sistema para seu aplicativo
  • Como atribuir funções à identidade gerenciada atribuída pelo sistema
  • Como autenticar usando a identidade gerenciada atribuída pelo sistema do código do 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 do aplicativo. Internamente, o Azure controla a identidade 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.

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

  • As identidades gerenciadas atribuídas pelo sistema são habilitadas diretamente em um recurso do Azure e estão vinculadas ao 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.
  • As identidades gerenciadas atribuídas pelo usuário são criadas como recursos autônomos do Azure e oferecem maior flexibilidade e funcionalidades. Elas 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 atribuídas pelo usuário no artigo de recomendações de melhores práticas de identidade gerenciada .

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

Habilitar uma identidade gerenciada atribuída pelo 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, um Aplicativo de Contêiner do Azure ou uma 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.

  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 Ativado.

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

    Uma captura de tela mostrando como habilitar uma identidade gerenciada atribuída pelo 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:

  • Recurso: as funções atribuídas se aplicam somente a esse recurso específico.
  • Grupo de recursos: as funções atribuídas se aplicam a todos os recursos contidos no grupo de recursos.
  • Assinatura: as funções atribuídas se aplicam a todos os recursos contidos na assinatura.

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

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

  2. Selecione controle de acesso (IAM) na navegação à esquerda.

  3. Na página controle 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 de várias etapas com guias para atribuir funções a identidades. Na guia Função inicial, use a caixa de pesquisa na parte superior para localizar a função que você deseja atribuir à identidade.

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

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

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

  8. No painel Selecionar identidades gerenciadas , use as listas suspensas Assinatura e Identidade Gerenciada para filtrar os resultados da pesquisa para suas identidades. Use a caixa de pesquisa Selecionar para localizar a identidade do sistema que você habilitou para o recurso do Azure que hospeda seu aplicativo.

    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 Examinar + atribuir na parte inferior da página.

  11. Na guia Revisão + atribuição final, selecione Examinar + atribuir para concluir o fluxo de trabalho.

Autenticar nos serviços do Azure em seu aplicativo

A biblioteca de Identidade do Azure fornece várias credenciais – implementações de TokenCredential adaptação para dar suporte a diferentes cenários e fluxos de autenticação do Microsoft Entra. Como a identidade gerenciada não está disponível ao ser executada localmente, as etapas à frente demonstram qual credencial usar em qual cenário:

  • Ambiente de desenvolvimento local: somente durante o desenvolvimento local, use uma classe chamada DefaultAzureCredential para uma cadeia de credenciais opinativa e pré-configurada. DefaultAzureCredential descobre as credenciais do usuário de suas ferramentas locais ou IDE, como a CLI do Azure ou o Visual Studio Code. Ele também oferece flexibilidade e conveniência para novas tentativas, tempos de espera para respostas e suporte para várias opções de autenticação. Visite o artigo Autenticar nos serviços do Azure durante o desenvolvimento local para saber mais.
  • Aplicativos hospedados no Azure: quando seu aplicativo estiver em execução no Azure, use ManagedIdentityCredential para descobrir com segurança a identidade gerenciada configurada para seu aplicativo. Especificar esse tipo exato de credencial impede que outras credenciais disponíveis sejam coletadas inesperadamente.

Implementar o código

Em um projeto JavaScript, adicione o pacote @azure/identidade . Em um terminal de sua escolha, navegue até o diretório do projeto de aplicativo e execute os seguintes comandos:

npm install @azure/identity

Os serviços do Azure são acessados usando classes de cliente especializadas das várias bibliotecas de clientes do SDK do Azure. Em index.js, conclua as seguintes etapas para configurar a autenticação baseada em token:

  1. Importe o @azure/identity pacote.

  2. Passe uma instância apropriada TokenCredential para o cliente:

    • Usar DefaultAzureCredential quando o aplicativo estiver em execução localmente
    • Use ManagedIdentityCredential quando seu aplicativo estiver em execução no Azure.
    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    function createBlobServiceClient() {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
    
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            return new BlobServiceClient(url, new ManagedIdentityCredential());
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main() {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME);
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

Implementar o código

Em um projeto JavaScript, adicione o pacote @azure/identidade . Em um terminal de sua escolha, navegue até o diretório do projeto de aplicativo e execute os seguintes comandos:

npm install @azure/identity @types/node

Os serviços do Azure são acessados usando classes de cliente especializadas das várias bibliotecas de clientes do SDK do Azure. Em index.js, conclua as seguintes etapas para configurar a autenticação baseada em token:

  1. Importe o @azure/identity pacote.

  2. Passe uma instância apropriada TokenCredential para o cliente:

    • Usar DefaultAzureCredential quando o aplicativo estiver em execução localmente
    • Use ManagedIdentityCredential quando seu aplicativo estiver em execução no Azure.
    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    function createBlobServiceClient(): BlobServiceClient {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            return new BlobServiceClient(url, new ManagedIdentityCredential());
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main(): Promise<void> {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME!);
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err: any) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err: Error) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

O código anterior se comporta de forma diferente dependendo do ambiente em que está em execução:

  • Em sua estação de trabalho de desenvolvimento local, DefaultAzureCredential procura nas variáveis de ambiente uma entidade de serviço de aplicativo ou em ferramentas de desenvolvedor instaladas localmente, como o Visual Studio Code, para obter um conjunto de credenciais de desenvolvedor.
  • Quando implantado no Azure, ManagedIdentityCredential descobre as configurações de identidade gerenciada para autenticar-se em outros serviços automaticamente.