Compartilhar via


Usar identidades gerenciadas para o Serviço de Aplicativo e o Azure Functions

Este artigo mostra como criar uma identidade gerenciada para aplicativos do Serviço de Aplicativo do Azure e do Azure Functions e como usá-la para acessar outros recursos.

Uma identidade gerenciada da ID do Microsoft Entra permite que seu aplicativo acesse facilmente outros recursos protegidos pelo Microsoft Entra, como o Azure Key Vault. A plataforma do Azure gerencia a identidade, portanto, você não precisa provisionar nem atualizar segredos. Para obter mais informações sobre identidades gerenciadas na ID do Microsoft Entra, consulte Identidades gerenciadas para recursos do Azure.

Você pode conceder dois tipos de identidades ao seu aplicativo:

  • Uma identidade atribuída pelo sistema está vinculada ao aplicativo e será excluída se o aplicativo for excluído. Um aplicativo pode ter apenas uma identidade atribuída pelo sistema.
  • Uma identidade atribuída pelo usuário é um recurso independente do Azure que pode ser atribuído ao seu aplicativo. Um aplicativo pode ter várias identidades atribuídas pelo usuário. Uma identidade atribuída pelo usuário pode ser atribuída a vários recursos do Azure, como dois aplicativos do Serviço de Aplicativo.

A configuração da identidade gerenciada é específica para o slot. Para configurar uma identidade gerenciada para um slot de implantação no portal, vá para o slot primeiro. Para encontrar a identidade gerenciada para o aplicativo Web ou slot de implantação no locatário do Microsoft Entra a partir do portal do Azure, procure-a diretamente na página de Visão geral do locatário.

Observação

As identidades gerenciadas não estão disponíveis para aplicativos implantados no Azure Arc.

Como as identidades gerenciadas não dão suporte a cenários entre diretórios, elas não se comportam conforme o esperado se o aplicativo for migrado entre assinaturas ou locatários. Para recriar as identidades gerenciadas após essa movimentação, consulte Se as identidades gerenciadas serão recriadas automaticamente se eu mover uma assinatura para outro diretório?. Os recursos de downstream também precisarão ter políticas de acesso atualizadas para usar a nova identidade.

Pré-requisitos

Para executar as etapas neste artigo, você deve ter um conjunto mínimo de permissões sobre seus recursos do Azure. As permissões específicas de que você precisa variam de acordo com seu cenário. A tabela a seguir resume os cenários mais comuns:

Cenário Permissão necessária Exemplo de funções internas
Criar uma identidade atribuída pelo sistema Microsoft.Web/sites/write sobre o aplicativo, ou Microsoft.Web/sites/slots/write sobre o slot Colaborador do Site
Criar uma identidade atribuída pelo usuário Microsoft.ManagedIdentity/userAssignedIdentities/write sobre o grupo de recursos no qual criar a identidade Colaborador de Identidade Gerenciada
Atribuir uma identidade atribuída pelo usuário ao seu aplicativo Microsoft.Web/sites/write sobre o aplicativo, Microsoft.Web/sites/slots/write sobre o slot ou
Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action sobre a identidade
Colaborador do site e Operador de Identidade Gerenciada
Criar atribuições de função do Azure Microsoft.Authorization/roleAssignments/write sobre o escopo do recurso de destino Administrador de Controle de Acesso Baseado em Função ou Administrador de Acesso do Usuário

Adicionar uma identidade atribuída pelo sistema

Para habilitar uma identidade gerenciada atribuída pelo sistema, use as instruções a seguir.

  1. No portal do Azure, vá para a página do aplicativo.

  2. No menu à esquerda, selecione Configurações>Identidade.

  3. Na guia Sistema atribuído, alterne o Status para Ativado. Em seguida, selecione Salvar.

Adicionar uma identidade atribuída pelo usuário

Para criar um aplicativo com uma identidade atribuída pelo usuário, crie a identidade e adicione seu identificador de recurso à configuração do aplicativo.

  1. Crie um recurso de identidade gerenciado atribuído pelo usuário de acordo com estas instruções.

  2. No menu à esquerda da página do aplicativo, selecione Configurações>Identidade.

  3. Selecione Usuário atribuído e, em seguida, selecione Adicionar.

  4. Pesquise a identidade que você criou anteriormente, selecione-a e selecione Adicionar.

Depois de concluir essas etapas, o aplicativo será reiniciado.

Configurar o recurso de destino

Você precisa configurar o recurso de destino para permitir o acesso do seu aplicativo. Para a maioria dos serviços do Azure, você configura o recurso de destino criando uma atribuição de função.

Alguns serviços usam mecanismos diferentes do controle de acesso baseado em função do Azure. Para entender como configurar o acesso usando uma identidade, consulte a documentação de cada recurso de destino. Para saber mais sobre quais recursos dão suporte a tokens do Microsoft Entra, consulte os Serviços do Azure que dão suporte à autenticação do Microsoft Entra.

Por exemplo, se você solicitar um token para acessar um segredo no Azure Key Vault, também deverá criar uma atribuição de função que permita que a identidade gerenciada trabalhe com segredos no cofre de destino. Caso contrário, o Key Vault rejeitará suas chamadas mesmo se você usar um token válido. O mesmo vale para o Banco de Dados SQL do Azure e outros serviços.

Importante

Os serviços de back-end para identidades gerenciadas mantêm um cache por URI de recurso por cerca de 24 horas. Pode levar várias horas para que as alterações em uma associação de grupo ou de função de uma identidade gerenciada entrem em vigor. No momento, não é possível forçar a atualização do token de uma identidade gerenciada antes de sua expiração. Se você alterar o grupo ou a associação de função de uma identidade gerenciada para adicionar ou remover permissões, talvez seja necessário aguardar várias horas para que o recurso do Azure que está usando a identidade tenha o acesso correto.

Para obter alternativas a grupos ou associações de função, consulte Limitação do uso de identidades gerenciadas para autorização.

Conectar-se aos serviços do Azure no código do aplicativo

Com sua identidade gerenciada, um aplicativo pode obter tokens para recursos do Azure que a ID do Microsoft Entra ajuda a proteger, como o Banco de Dados SQL do Azure, o Azure Key Vault e o Armazenamento do Azure. Esses tokens representam o aplicativo que acessa o recurso e não qualquer usuário específico do aplicativo.

O Serviço de Aplicativo e o Azure Functions fornecem um ponto de extremidade REST acessível internamente para recuperação de token. Você pode acessar o ponto de extremidade REST de dentro do aplicativo usando uma solicitação HTTP GET padrão. Você pode implementar a solicitação com um cliente HTTP genérico em cada idioma.

Para .NET, JavaScript, Java e Python, a biblioteca de clientes da Identidade do Azure fornece uma abstração desse ponto de extremidade REST e simplifica a experiência de desenvolvimento. Conectar-se a outros serviços do Azure é tão simples quanto adicionar um objeto de credencial ao cliente específico a um serviço.

Uma solicitação HTTP GET bruta usa as duas variáveis de ambiente fornecidas e se parece com o seguinte exemplo:

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: <ip-address-:-port-in-IDENTITY_ENDPOINT>
X-IDENTITY-HEADER: <value-of-IDENTITY_HEADER>

Uma resposta de exemplo pode ser semelhante ao exemplo a seguir:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "00001111-aaaa-2222-bbbb-3333cccc4444"
}

Essa resposta é igual à resposta para a solicitação de token de acesso de serviço a serviço do Microsoft Entra. Para acessar o Key Vault, adicione o valor de access_token a uma conexão de cliente com o cofre.

Para obter mais informações sobre o ponto de extremidade REST, consulte a referência de ponto de extremidade REST mais adiante neste artigo.

Remover uma identidade

Ao remover uma identidade atribuída pelo sistema, ela é excluída do Microsoft Entra ID. As identidades atribuídas pelo sistema também são removidas automaticamente do Microsoft Entra ID ao excluir o próprio recurso do aplicativo.

  1. No menu à esquerda da página do aplicativo, selecione Configurações>Identidade.

  2. Siga as etapas com base no tipo de identidade:

    • Para uma identidade atribuída pelo sistema: na guia Atribuída pelo sistema , alterne o Status para Desativado. Em seguida, selecione Salvar.
    • Para uma identidade atribuída pelo usuário: selecione a guia Atribuída pelo usuário , marque a caixa de seleção da identidade e selecione Remover. Clique em Sim para confirmar.

Observação

Você também pode definir uma configuração de aplicativo que desabilita apenas o serviço de token local: WEBSITE_DISABLE_MSI. No entanto, ela mantém a identidade intacta. As ferramentas ainda mostram a identidade gerenciada como ativada ou habilitada. Como resultado, não recomendamos que você use essa configuração.

Referência de ponto de extremidade REST

Um aplicativo com uma identidade gerenciada torna esse ponto de extremidade disponível definindo duas variáveis de ambiente:

  • IDENTITY_ENDPOINT: a URL para o serviço de token local.
  • IDENTITY_HEADER: Um cabeçalho que pode ajudar a mitigar ataques de falsificação de requisição do lado do servidor (SSRF). A plataforma gira o valor.

A IDENTITY_ENDPOINT variável é uma URL local da qual seu aplicativo pode solicitar tokens. Para obter um token para um recurso, faça uma solicitação HTTP GET para esse endpoint. Inclua os seguintes parâmetros:

Nome do parâmetro No Descrição
resource Consulta O URI do recurso do Microsoft Entra do recurso para o qual um token deve ser obtido. Esse recurso pode ser um dos serviços do Azure que dão suporte à autenticação do Microsoft Entra ou a qualquer outro URI de recurso.
api-version Consulta A versão da API do token a ser usada. Use 2019-08-01.
X-IDENTITY-HEADER Cabeçalho O valor da variável de ambiente IDENTITY_HEADER. Esse cabeçalho é usado para ajudar a atenuar ataques SSRF.
client_id Consulta (Opcional) A ID da identidade atribuída pelo usuário a ser usada. Ele não pode ser usado em uma solicitação que inclua principal_id, mi_res_idou object_id. Se todos os parâmetros de ID (client_id, principal_id, object_ide mi_res_id) forem omitidos, será usada a identidade atribuída pelo sistema.
principal_id Consulta (Opcional) A ID principal da identidade atribuída pelo usuário a ser usada. O object_id parâmetro é um alias que pode ser usado em vez disso. Ele não pode ser usado em uma solicitação que inclua client_id, mi_res_idou object_id. Se todos os parâmetros de ID (client_id, principal_id, object_ide mi_res_id) forem omitidos, será usada a identidade atribuída pelo sistema.
mi_res_id Consulta (Opcional) A ID do recurso do Azure da identidade atribuída pelo usuário a ser usada. Ele não pode ser usado em uma solicitação que inclua principal_id, client_idou object_id. Se todos os parâmetros de ID (client_id, principal_id, object_ide mi_res_id) forem omitidos, será usada a identidade atribuída pelo sistema.

Importante

Se você estiver tentando obter tokens para identidades atribuídas pelo usuário, inclua uma das propriedades opcionais. Caso contrário, o serviço de token tenta obter um token para uma identidade atribuída pelo sistema, que pode ou não existir.

Considere os seguintes tutoriais: