Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A abordagem recomendada para autenticar um aplicativo hospedado em Azure para outros recursos Azure é usar uma identidade gerenciada. Essa abordagem é com suporte para a maioria dos serviços Azure, incluindo aplicativos hospedados em Azure App Service, Azure Container Apps e Azure Virtual Machines. 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 usuário para seu aplicativo
- Como atribuir funções à identidade gerenciada atribuída pelo usuário
- Como autenticar usando a identidade gerenciada atribuída ao usuário a partir 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 Azure sem o uso de chaves secretas ou outros segredos do aplicativo. Internamente, Azure controla a identidade e os recursos aos quais tem permissão para se conectar. Azure usa essas informações para obter automaticamente Microsoft Entra tokens para o aplicativo para permitir que ele se conecte a outros recursos 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 seu ciclo de vida. Quando o recurso é excluído, 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 ao 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 de 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 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 usuário para um aplicativo hospedado Azure. Se você precisar usar uma identidade gerenciada atribuída pelo sistema, visite o artigo de identidades gerenciadas atribuídas pelo sistema para obter mais informações.
Criar uma identidade gerenciada atribuída ao usuário
As identidades gerenciadas atribuídas pelo usuário são criadas como recursos autônomos em sua assinatura de Azure usando o portal Azure ou o Azure CLI. Azure CLI comandos podem ser executados no Azure Cloud Shell ou em uma estação de trabalho com o Azure CLI instalado.
No portal do Azure, insira Configurações gerenciadas na barra de pesquisa principal e selecione o resultado correspondente na seção Services.
Na página Identidades Gerenciadas , selecione + Criar.
Na página Criar Identidade Gerenciada Atribuída ao Usuário , selecione uma assinatura, um grupo de recursos e uma região para a identidade gerenciada atribuída pelo usuário e forneça um nome.
Selecione Examinar + criar para examinar e validar suas entradas.
Selecione Criar para criar a identidade gerenciada atribuída pelo usuário.
Depois que a identidade for criada, selecione Ir para o recurso.
Na página Visão geral da nova identidade, copie o valor da ID do cliente a ser usado posteriormente quando você configurar o código do aplicativo.
Atribuir a identidade gerenciada ao seu aplicativo
Uma identidade gerenciada atribuída pelo usuário pode ser associada a um ou mais recursos Azure. Todos os recursos que utilizam essa identidade recebem as permissões atribuídas pelas funções da identidade.
No portal Azure, navegue até o recurso que hospeda o código do aplicativo, como uma instância Azure App Service ou Azure Container Apps.
Na página Visão geral do recurso, expanda Configurações e selecione Identidade na navegação.
Na página Identidade, alterne para a aba Atribuição do usuário.
Selecione + Adicionar para abrir o painel Adicionar identidade gerenciada atribuída pelo usuário .
No painel Adicionar identidade gerenciada atribuída pelo usuário, use a lista suspensa Assinatura para filtrar as identidades nos resultados da pesquisa. Use a caixa de pesquisa Identidades gerenciadas atribuídas pelo usuário para localizar a identidade gerenciada atribuída pelo usuário que você habilitou para o recurso Azure que hospeda seu aplicativo.
Selecione a identidade e escolha Adicionar na parte inferior do painel para continuar.
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 de Azure relacionados usando um único grupo de recursos.
Navegue até a página Visão geral do grupo de recursos que contém o aplicativo com a identidade gerenciada atribuída pelo usuário.
Selecione controle de acesso (IAM) na navegação à esquerda.
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 .
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.
Selecione a função nos resultados e, em seguida , escolha Avançar para ir para a guia Membros .
Para a opção Atribuir acesso à opção, selecione Identidade gerenciada.
Para a opção Membros , escolha + Selecionar membros para abrir o painel Selecionar identidades gerenciadas .
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 Select para localizar a identidade gerenciada atribuída pelo usuário que você habilitou para o recurso Azure que hospeda seu aplicativo.
Selecione a identidade e escolha Selecionar na parte inferior do painel para continuar.
Selecione Examinar + atribuir na parte inferior da página.
Na guia Revisão + atribuição final, selecione Examinar + atribuir para concluir o fluxo de trabalho.
Autenticar nos serviços do Azure a partir do seu aplicativo
A biblioteca Azure Identity fornece várias credenciais - implementações de TokenCredential adaptadas 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.
DefaultAzureCredentialdescobre as credenciais do usuário de seu IDE ou ferramentas locais, como o Azure CLI ou 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 Autenticação nos serviços do Azure durante o desenvolvimento local para saber mais. -
Azure-hosted apps: quando o aplicativo estiver em execução no Azure, use
ManagedIdentityCredentialpara 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
Azure serviços são acessados usando classes de cliente especializadas das várias bibliotecas de cliente Azure SDK. Em index.js, conclua as seguintes etapas para configurar a autenticação baseada em token:
- Importe o
@azure/identitypacote. - Passe uma instância apropriada
TokenCredentialpara o cliente:- Use
DefaultAzureCredentialquando o aplicativo estiver em execução localmente. - Use
ManagedIdentityCredentialquando o aplicativo estiver em execução no Azure e configurar a ID do cliente, a ID do recurso ou a ID do objeto.
- Use
A ID do cliente é usada para identificar uma identidade gerenciada ao configurar aplicativos ou serviços que precisam ser autenticados usando essa identidade.
Recupere a ID do cliente atribuída a uma identidade gerenciada atribuída pelo usuário usando o seguinte comando:
az identity show \ --resource-group <resource-group-name> \ --name <identity-name> \ --query 'clientId'Configure
ManagedIdentityCredentialcom o ID do cliente:import { BlobServiceClient } from '@azure/storage-blob'; import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity'; console.log(process.env); 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") { const clientId = process.env.AZURE_CLIENT_ID; if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity'); return new BlobServiceClient(url, new ManagedIdentityCredential(clientId)); } else { return new BlobServiceClient(url, new DefaultAzureCredential()); } } async function main() { try { const blobServiceClient = createBlobServiceClient(); const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME); // do something with client 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 TypeScript, 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 typescript @azure/identity @types/node
Azure serviços são acessados usando classes de cliente especializadas das várias bibliotecas de cliente Azure SDK. Em index.js, conclua as seguintes etapas para configurar a autenticação baseada em token:
- Importe o
@azure/identitypacote. - Passe uma instância apropriada
TokenCredentialpara o cliente:- Usar
DefaultAzureCredentialquando o aplicativo estiver em execução localmente - Use
ManagedIdentityCredentialquando o aplicativo estiver em execução no Azure e configurar a ID do cliente, a ID do recurso ou a ID do objeto.
- Usar
A ID do cliente é usada para identificar uma identidade gerenciada ao configurar aplicativos ou serviços que precisam ser autenticados usando essa identidade.
Recupere a ID do cliente atribuída a uma identidade gerenciada atribuída pelo usuário usando o seguinte comando:
az identity show \ --resource-group <resource-group-name> \ --name <identity-name> \ --query 'clientId'Configure
ManagedIdentityCredentialcom o ID do cliente: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") { const clientId = process.env.AZURE_CLIENT_ID; if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity'); return new BlobServiceClient(url, new ManagedIdentityCredential(clientId)); } 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,
DefaultAzureCredentialprocura nas variáveis de ambiente de uma entidade de serviço de aplicativo ou em ferramentas de desenvolvedor instaladas localmente, como Visual Studio Code, para um conjunto de credenciais de desenvolvedor. - Quando implantado em Azure,
ManagedIdentityCredentialdescobre as configurações de identidade gerenciada para se autenticar automaticamente em outros serviços.