Identidades gerenciadas nos Aplicativos de Contêiner do Azure
Artigo
Uma identidade gerenciada da ID do Microsoft Entra permite que seu aplicativo de contêiner acesse outros recursos protegidos do Microsoft Entra. Para saber mais sobre identidades gerenciadas na ID do Microsoft Entra, consulte Identidades gerenciadas para recursos do Azure.
Seu aplicativo de contêiner pode receber dois tipos de identidades:
Uma identidade atribuída pelo sistema é vinculada ao aplicativo de contêiner e é excluída quando o aplicativo de contêiner for excluído. Um aplicativo só pode ter uma identidade atribuída pelo sistema.
Uma identidade atribuída ao usuário é um recurso independente do Azure que pode ser atribuído ao aplicativo de contêiner e a outros recursos. Um aplicativo de contêiner pode ter várias identidades atribuídas pelo usuário. A identidade existe até que você as exclua.
Por que usar uma identidade gerenciada?
Você pode usar uma identidade gerenciada em um aplicativo de contêiner em execução para autenticar em qualquer serviço que ofereça suporte à autenticação do Microsoft Entra.
Com identidades gerenciadas:
Seu aplicativo se conecta a recursos com a identidade gerenciada. Você não precisa gerenciar credenciais no aplicativo de contêiner.
Você pode usar o controle de acesso baseado em função para conceder permissões específicas a uma identidade gerenciada.
As identidades atribuídas pelo sistema são criadas e gerenciadas automaticamente. Elas são excluídas quando o aplicativo de contêiner é excluído.
Você pode adicionar e excluir identidades atribuídas pelo usuário e atribuí-las a vários recursos. Elas são independentes do ciclo de vida do aplicativo de contêiner.
As identidades atribuídas pelo sistema são melhores para cargas de trabalho que:
estejam contidas em um único recurso
precisem de identidades independentes
As identidades atribuídas pelo usuário são ideais para cargas de trabalho que:
sejam executadas em vários recursos e que possam compartilhar uma só identidade
precisem de pré-autorização para um recurso seguro
Limitações
Não há suporte para o uso de identidades gerenciadas em regras de escala. Você ainda precisa incluir a cadeia de conexão ou a chave na secretRef da regra de escala.
Os contêineres de inicialização não podem acessar identidades gerenciadas.
Configurar identidades gerenciadas
Você pode configurar suas identidades gerenciadas por meio de:
o portal do Azure
a CLI do Azure
seu modelo do ARM (Azure Resource Manager)
Quando uma identidade gerenciada é adicionada, excluída ou modificada em um aplicativo de contêiner em execução, o aplicativo não é reiniciado automaticamente e uma nova revisão não é criada.
Observação
Ao adicionar uma identidade gerenciada a um aplicativo de contêiner implantado antes de 11 de abril de 2022, você deve criar uma nova revisão.
Na navegação esquerda da página do aplicativo de contêiner, role para baixo até o grupo Configurações.
Selecionar Identidade.
Na guia Sistema atribuído, alterne o Status para Ligado. Selecione Salvar.
Execute o comando az containerapp identity assign para criar uma identidade atribuída pelo sistema:
az containerapp identity assign --name myApp --resource-group myResourceGroup --system-assigned
Um modelo do ARM pode ser usado para automatizar a implantação do aplicativo de contêiner e dos recursos. Para adicionar uma identidade atribuída pelo sistema, adicione uma seção identity ao modelo do ARM.
"identity": {
"type": "SystemAssigned"
}
Adicionar o tipo atribuído pelo sistema diz ao Azure para criar e gerenciar a identidade do seu aplicativo. Para obter um exemplo completo de modelo do ARM, consulte Especificação de API do ARM.
Alguns comandos da CLI do Azure, incluindo az containerapp create e az containerapp job create, dão suporte a arquivos YAML para entrada. Para adicionar uma identidade atribuída pelo sistema, adicione uma identity seção ao arquivo YAML.
identity:
type: SystemAssigned
Adicionar o tipo atribuído pelo sistema diz ao Azure para criar e gerenciar a identidade do seu aplicativo. Para obter um exemplo de modelo YAML completo, consulte Especificação da API ARM.
Adicionar uma identidade atribuída pelo usuário
Configurar um aplicativo de contêiner com uma identidade atribuída pelo usuário requer que você primeiro crie a identidade e adicione seu identificador de recurso à configuração do aplicativo de contêiner. Você pode criar identidades atribuídas pelo usuário por meio do portal do Azure ou da CLI do Azure. Para obter informações sobre como criar e gerenciar identidades atribuídas pelo usuário, consulte Gerenciar identidades gerenciadas atribuídas pelo usuário.
Na navegação esquerda da página do aplicativo de contêiner, role para baixo até o grupo Configurações.
Selecionar Identidade.
Na guia Usuário atribuído, selecione Adicionar.
Procure a identidade que você criou anteriormente e selecione-a. Selecione Adicionar.
Crie uma identidade atribuída pelo usuário.
az identity create --resource-group <GROUP_NAME> --name <IDENTITY_NAME> --output json
Observe a propriedade id da nova identidade.
Execute o comando az containerapp identity assign para atribuir a identidade ao aplicativo. O parâmetro de identidades é uma lista separada por espaço.
Substitua <IDENTITY_RESOURCE_ID> pela propriedade id da identidade. Para atribuir mais de uma identidade atribuída pelo usuário, forneça uma lista separada por espaço de IDs de identidade ao parâmetro --user-assigned.
Para adicionar uma ou mais identidades atribuídas pelo usuário, adicione uma seção identity ao modelo do ARM. Substitua <IDENTITY1_RESOURCE_ID> e <IDENTITY2_RESOURCE_ID> pelos identificadores de recurso das identidades que você deseja adicionar.
Especifique cada identidade atribuída pelo usuário adicionando um item ao objeto userAssignedIdentities com o identificador de recurso da identidade como chave. Use um objeto vazio como valor.
Um aplicativo pode ter identidades atribuídas pelo sistema e atribuídas pelo usuário ao mesmo tempo. Nesse caso, o propriedade type seria SystemAssigned,UserAssigned.
Para adicionar uma ou mais identidades atribuídas pelo usuário, adicione uma identity seção ao arquivo de configuração do YAML. Substitua <IDENTITY1_RESOURCE_ID> e <IDENTITY2_RESOURCE_ID> pelos identificadores de recurso das identidades que você deseja adicionar.
Especifique cada identidade atribuída pelo usuário adicionando um item ao objeto userAssignedIdentities com o identificador de recurso da identidade como chave. Use um objeto vazio como valor.
Um aplicativo pode ter identidades atribuídas pelo sistema e atribuídas pelo usuário ao mesmo tempo. Nesse caso, o propriedade type seria SystemAssigned,UserAssigned.
Configurar um recurso de destino
Para alguns recursos, você precisará configurar atribuições de função para a identidade gerenciada do aplicativo a fim de conceder acesso. Caso contrário, as chamadas do seu aplicativo para serviços, como o Azure Key Vault e o Banco de Dados SQL do Azure, serão rejeitadas mesmo que você use um token válido para essa identidade. Para saber mais sobre o RBAC do Azure (controle de acesso baseado em função do Azure), consulte O que é o RBAC?. 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. Se você atualizar a política de acesso de um recurso de destino específico e recuperar imediatamente um token para esse recurso, você poderá continuar a obter um token em cache com permissões desatualizadas até que esse token expire. Atualmente, não é possível forçar uma atualização de token.
Conectar-se aos serviços do Azure no código do aplicativo
Com identidades gerenciadas, um aplicativo pode obter tokens para acessar recursos do Azure que usam a ID do Microsoft Entra, como o Banco de Dados SQL do Azure, o Cofre de Chaves do Azure e o Armazenamento do Azure. Esses tokens representam o acesso do aplicativo ao recurso e não um usuário específico do aplicativo.
Os Aplicativos de Contêiner fornecem um ponto de extremidade REST acessível internamente para recuperar tokens. 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. 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.
Observação
Ao usar a biblioteca de cliente de Identidade do Azure, a ID do cliente de identidade gerenciada atribuída pelo usuário deve ser especificada.
Para aplicativos .NET, a maneira mais simples de trabalhar com uma identidade gerenciada é por meio da biblioteca de clientes de Identidade do Azure para .NET. Consulte os respectivos títulos de documentação da biblioteca de clientes para obter informações:
Os exemplos vinculados usam DefaultAzureCredential. Isso é útil para a maioria dos cenários porque o mesmo padrão funciona no Azure (com identidades gerenciadas) e no computador local (sem identidades gerenciadas).
Para aplicativos Node.js, a maneira mais simples de trabalhar com uma identidade gerenciada é por meio da biblioteca de clientes de Identidade do Azure para JavaScript. Consulte os respectivos títulos de documentação da biblioteca de clientes para obter informações:
Os exemplos vinculados usam DefaultAzureCredential. Isso é útil para a maioria dos cenários porque o mesmo padrão funciona no Azure (com identidades gerenciadas) e no computador local (sem identidades gerenciadas).
Para obter mais exemplos de código da biblioteca de clientes de Identidade do Azure para JavaScript, confira os exemplos de Identidade do Azure.
Para aplicativos do Python, a maneira mais simples de trabalhar com uma identidade gerenciada é por meio da biblioteca de clientes de Identidade do Azure para Python. Consulte os respectivos títulos de documentação da biblioteca de clientes para obter informações:
Os exemplos vinculados usam DefaultAzureCredential. Isso é útil para a maioria dos cenários porque o mesmo padrão funciona no Azure (com identidades gerenciadas) e no computador local (sem identidades gerenciadas).
Para aplicativos e funções Java, a maneira mais simples de trabalhar com uma identidade gerenciada é por meio da biblioteca de clientes de Identidade do Azure para Java. Consulte os respectivos títulos de documentação da biblioteca de clientes para obter informações:
Os exemplos vinculados usam DefaultAzureCredential. Isso é útil para a maioria dos cenários porque o mesmo padrão funciona no Azure (com identidades gerenciadas) e no computador local (sem identidades gerenciadas).
Para obter mais exemplos de código da biblioteca de clientes de Identidade do Azure para Java, confira os exemplos de Identidade do Azure.
Use o seguinte script para recuperar um token do ponto de extremidade local especificando um URI de recurso de um serviço do Azure. Substitua o espaço reservado pelo URI do recurso para obter o token.
Uma solicitação HTTP GET real tem aparência como a do seguinte exemplo.
Obtenha a URL do ponto de extremidade do token da IDENTITY_ENDPOINT variável de ambiente. x-identity-header contém o GUID armazenado na IDENTITY_HEADER variável de ambiente.
GET http://localhost:42356/msi/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
x-identity-header: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a
Um aplicativo de contêiner com uma identidade gerenciada expõe o ponto de extremidade de identidade definindo duas variáveis de ambiente:
IDENTITY_ENDPOINT - URL local a partir da qual seu aplicativo de contêiner pode solicitar tokens.
IDENTITY_HEADER - um cabeçalho usado para ajudar a mitigar ataques de falsificação de solicitação do lado do servidor (SSRF). O valor é trocado pela plataforma.
Para obter um token para um recurso, solicite uma HTTP GET para o 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. O recurso pode ser um dos serviços do Azure que oferecem 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 a versão "2019-08-01" ou posterior.
X-IDENTITY-HEADER
Cabeçalho
O valor da variável de ambiente IDENTITY_HEADER. Esse cabeçalho reduz 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 inclua principal_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.
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 inclua 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 inclua principal_id, client_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.
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.
Exibir identidades gerenciadas
Você pode mostrar as identidades gerenciadas atribuídas pelo sistema e atribuídas pelo usuário usando o seguinte comando da CLI do Azure. A saída mostrará o tipo de identidade gerenciada, as IDs de locatário e as IDs de entidade de segurança de todas as identidades gerenciadas atribuídas ao seu aplicativo de contêiner.
az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>
Remover uma identidade gerenciada
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 da ID do Microsoft Entra quando você exclui o próprio recurso do aplicativo de contêiner. A remoção de identidades gerenciadas atribuídas pelo usuário do seu aplicativo de contêiner não as remove da ID do Microsoft Entra.
No painel de navegação esquerdo da página do aplicativo, role para baixo até o grupo Configurações.
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. Selecione 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.
Para remover a identidade atribuída pelo sistema:
az containerapp identity remove --name <APP_NAME> --resource-group <GROUP_NAME> --system-assigned
Para remover uma ou mais identidades atribuídas pelo usuário: