Como usar identidades gerenciadas para o Serviço de Aplicativo e o Azure Functions

Observação

A partir de 1º de junho de 2024, todos os aplicativos recém-criados do Serviço de Aplicativo terão a opção de gerar um nome do host padrão exclusivo usando a convenção de nomenclatura <app-name>-<random-hash>.<region>.azurewebsites.net. Os nomes de aplicativos existentes permanecerão inalterados.

Exemplo: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

Para obter mais detalhes, consulte Nome do Host Padrão Exclusivo para o Recurso do Serviço de Aplicativo.

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

Importante

Como as identidades gerenciadas não dão suporte a cenários entre diretórios, elas não se comportarão conforme o esperado se seu aplicativo for migrado entre assinaturas ou locatários. Para recriar as identidades gerenciadas após essa movimentação, consulte 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.

Observação

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

Uma identidade gerenciada do Microsoft Entra ID permite que seu aplicativo acesse facilmente outros recursos protegidos pelo Microsoft Entra, como o Azure Key Vault. A identidade é gerenciada pela plataforma do Azure e não exige provisionamento ou giro de nenhum segredo. Para saber mais sobre identidades gerenciadas no Microsoft Entra ID, confira Identidades gerenciadas para recursos do Azure.

Seu aplicativo pode receber dois tipos de identidades:

  • Uma identidade atribuída pelo sistema está vinculada ao aplicativo e será excluída se o aplicativo for excluído. Um aplicativo só pode ter 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 e 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, primeiro navegue até o slot. 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. Normalmente, o nome do slot é semelhante a <app-name>/slots/<slot-name>.

Esse vídeo lhe mostra como usar identidades gerenciadas para o Serviço de Aplicativo.

As etapas no vídeo também são descritas nas seções a seguir.

Adicionar uma identidade atribuída pelo sistema

  1. Acesse as configurações do aplicativo no portal do Azure no grupo Configurações no painel de navegação esquerdo.

  2. Selecionar Identidade.

  3. Na guia Sistema atribuído, alterne o Status para Ligado. Clique em Save (Salvar).

    A captura de tela mostra onde alternar Status para Ligado e selecionar Salvar.

Adicionar uma identidade atribuída pelo usuário

Criar um aplicativo com uma identidade atribuída pelo usuário exige que você crie a identidade e, em seguida, adicione seu identificador de recursos à configuração do aplicativo.

Primeiro, você precisará criar um recurso de identidade atribuído pelo usuário.

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

  2. No painel de navegação esquerdo da página do aplicativo, role para baixo até o grupo Configurações.

  3. Selecionar Identidade.

  4. Selecione Usuário atribuído>Adicionar.

  5. Procure a identidade que você criou anteriormente, selecione-a e selecione Adicionar.

    Identidade gerenciada no Serviço de Aplicativo

    Depois de selecionar Adicionar, o aplicativo é reiniciado.

Configurar o recurso de destino

Talvez seja necessário configurar o recurso de destino para permitir o acesso do aplicativo ou função. Por exemplo, se você solicitar um token para acessar o Key Vault, também precisará adicionar uma política de acesso que inclua a identidade gerenciada de seu aplicativo ou função. Caso contrário, as chamadas para o Key Vault serão rejeitadas, mesmo se você usar um token válido. O mesmo é verdadeiro para Banco de Dados SQL do Azure. 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.

Importante

Os serviços de back-end para identidades gerenciadas mantêm um cache por URI de recurso por cerca de 24 horas. Isso significa que 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 o token de uma identidade gerenciada a ser atualizado antes da expiração. Se você alterar a associação de grupo ou de função de uma identidade gerenciada para adicionar ou remover permissões, poderá ser necessário aguardar várias horas para que o recurso do Azure que usa 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 são protegidos pelo Microsoft Entra ID, como o Banco de Dados SQL do Azure, o Azure Key Vault e o Armazenamento do Microsoft Azure. Esses tokens representam o acesso do aplicativo ao recurso e não um 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. O ponto de extremidade REST pode ser acessado de dentro do aplicativo com um HTTP GET padrão, que pode ser implementado 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 seguinte:

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, você adicionará então 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, confira referência de ponto de extremidade REST.

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 painel de navegação esquerdo da página do aplicativo, role para baixo até o grupo Configurações.

  2. Selecionar Identidade. Em seguida, siga as etapas com base no tipo de identidade:

    • Identidade atribuída pelo sistema: na guia Atribuída pelo sistema, alterne Status para Desativado. Clique em Salvar.
    • 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

Há também uma configuração de aplicativo que pode ser definida, WEBSITE_DISABLE_MSI, que apenas desativa o serviço de token local. No entanto, ele deixa a identidade em vigor e as ferramentas ainda mostrarão a identidade gerenciada como "ativada" ou "habilitada". Como resultado, o uso dessa configuração não é recomendado.

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 usado para ajudar a reduzir os ataques de falsificação da solicitação do lado do servidor (SSRF). O valor é trocado pela plataforma.

O IDENTITY_ENDPOINT é uma URL local a partir da qual o aplicativo pode solicitar tokens. Para obter um token para um recurso, solicite uma HTTP GET para esse ponto de extremidade, incluindo os seguintes parâmetros:

Nome do parâmetro No Descrição
recurso Query O URI do recurso do Microsoft Entra do recurso para o qual um token deve ser obtido. 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 reduzir os ataques de falsificação da solicitação do lado do servidor (SSRF).
client_id Consulta (Opcional) A ID da identidade atribuída pelo usuário a ser usada. Não pode ser usada em uma solicitação que inclui 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. object_id é um alias que pode ser usado no lugar dela. Não pode ser usada em uma solicitação que inclui client_id, mi_res_id ou 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. Não pode ser usada em uma solicitação que inclui 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, deverá incluir uma das propriedades opcionais. Caso contrário, o serviço de token tentará obter um token para uma identidade atribuída pelo sistema, que pode ou não existir.

Próximas etapas