Compartilhar via


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

Observação

A partir de 1º de junho de 2024, os aplicativos do Serviço de Aplicativo recém-criados podem gerar um nome de host padrão exclusivo que usa a convenção de nomenclatura <app-name>-<random-hash>.<region>.azurewebsites.net. Os nomes de aplicativos existentes permanecem inalterados. Por exemplo:

myapp-ds27dh7271aah175.westus-01.azurewebsites.net

Para obter mais informações, confira 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.

Pré-requisitos

Para executar as etapas abordadas neste documento, você deve ter um conjunto mínimo de permissões em relação aos recursos do Azure. O conjunto de permissões específico de que você precisa variará de acordo com seu cenário. Os cenários mais comuns são resumidos na tabela a seguir:

Cenário Permissão necessária Exemplo de funções internas
Criar uma identidade atribuída pelo sistema para seu aplicativo 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 a identidade será criada Colaborador de Identidade Gerenciada
Atribuir uma identidade atribuída pelo usuário ao seu aplicativo Microsoft.Web/sites/write sobre o aplicativo (ou Microsoft.Web/sites/slots/write sobre o slot),
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 (no escopo do recurso de destino) Administrador de Controle de Acesso Baseado em Função ou Administrador de Acesso do Usuário

Um conjunto diferente de permissões pode ser necessário para outros cenários.

Adicionar uma identidade atribuída pelo sistema

Para habilitar uma identidade gerenciada atribuída pelo sistema em seu aplicativo ou slot, você precisa de permissões de gravação por esse aplicativo ou slot. A função Colaborador do site fornece essas permissões.

  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.

Para atribuir uma identidade gerenciada atribuída pelo usuário ao seu aplicativo ou slot, você precisa de permissões de gravação por esse aplicativo ou slot. A função Colaborador do site fornece essas permissões. Você também deve ter permissão para atribuir a identidade gerenciada atribuída pelo usuário que você usará. A função Operador de Identidade Gerenciada fornece essas permissões.

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

Você precisa configurar o recurso de destino para permitir o acesso do seu aplicativo. Para a maioria dos serviços do Azure, você faz isso criando uma atribuição de função. Alguns serviços usam mecanismos diferentes do RBAC do Azure. Consulte a documentação de cada recurso de destino para entender como configurar o acesso usando uma identidade. 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 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, as chamadas para o Key Vault serão rejeitadas, 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. 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.

Para remover uma identidade gerenciada do seu aplicativo ou slot, você precisa de permissões de gravação por esse aplicativo ou slot. A função Colaborador do site fornece essas permissões.

  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