Identidades gerenciadas nos Aplicativos de Contêiner do Azure
Uma identidade gerenciada do Microsoft Entra ID permite que seu aplicativo contêiner acesse outros recursos protegidos pelo Microsoft Entra. Para saber mais sobre identidades gerenciadas no Microsoft Entra ID, confira 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 pelo usuário é um recurso independente do Azure que você pode atribuir ao aplicativo contêiner e a outros recursos. Um aplicativo de contêiner pode ter várias identidades atribuídas pelo usuário. As identidades atribuídas pelo usuário existem até que você as exclua.
Por que usar uma identidade gerenciada?
Você pode usar uma identidade gerenciada em um aplicativo contêiner para autenticar em qualquer serviço que dê 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 contêiner.
- Você pode usar a identidade gerenciada para autenticar com um Registro de Contêiner do Azure privado sem um nome de usuário e senha para baixar contêineres para seu aplicativo contêiner.
- Você pode usar uma identidade gerenciada para criar conexões para aplicativos habilitados para Dapr por meio de componentes da Dapr
Casos de uso comuns
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
Os contêineres de inicialização não podem acessar identidades gerenciadas em ambientes somente consumo e ambientes de perfil de carga de trabalho dedicados
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.
Adicionar uma identidade atribuída pelo sistema
Vá para o aplicativo de contêiner no portal do Azure.
No grupo Configurações, selecione Identidade.
Na guia Sistema atribuído, alterne o Status para Ligado.
Selecione Salvar.
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.
Primeiro, você precisará criar um recurso de identidade atribuído pelo usuário.
Crie um recurso de identidade gerenciada atribuída pelo usuário de acordo com as etapas encontradas em Gerenciar identidades gerenciadas atribuídas pelo usuário.
Vá para o aplicativo de contêiner no portal do Azure.
No grupo Configurações, selecione Identidade.
Na guia Usuário atribuído, selecione Adicionar.
Procure e selecione a identidade que você criou anteriormente.
Selecione Adicionar.
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 a serviços, como o Azure Key Vault e o Banco de Dados SQL do Azure, são rejeitadas mesmo quando 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. Não há suporte para 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 o Microsoft Entra ID, como o Banco de Dados SQL do Azure, o Azure Key Vault 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 está disponível de dentro do aplicativo com uma solicitação GET
HTTP padrão, que você pode enviar com um cliente HTTP genérico na sua linguagem preferida. Para .NET, JavaScript, Java e Python, a biblioteca de clientes da Identidade do Azure fornece uma abstração desse ponto de extremidade REST. Você pode se conectar a outros serviços do Azure adicionando um objeto de credencial ao cliente específico do serviço.
Observação
Ao usar a biblioteca de clientes da Identidade do Azure, você precisa especificar explicitamente a ID do cliente de identidade gerenciada atribuída pelo usuário.
Observação
Ao se conectar a fontes de dados do SQL do Azure com o Entity Framework Core, considere usar o Microsoft.Data.SqlClient, que fornece cadeias de conexão especiais para conectividade de identidade gerenciada.
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. Confira os recursos a seguir para saber mais:
- Adicionar a biblioteca de clientes de Identidade do Azure ao seu projeto
- Acessar o serviço do Azure com uma identidade atribuída pelo sistema
- Acessar o serviço do Azure com uma identidade atribuída pelo usuário
Os exemplos vinculados usam DefaultAzureCredential
. Esse objeto é eficaz na maioria dos cenários, pois o mesmo padrão funciona no Azure (com identidades gerenciadas) e no computador local (sem identidades gerenciadas).
Usar a identidade gerenciada para regras de escala
Use as identidades gerenciadas em suas regras de escala para autenticar com os serviços do Azure que dão suporte a identidades gerenciadas. Para usar uma identidade gerenciada em sua regra de escala, use a propriedade identity
em vez da propriedade auth
em sua regra de escala. Os valores aceitáveis para a propriedade identity
são a ID de recurso do Azure de uma identidade atribuída pelo usuário ou system
para usar uma identidade atribuída pelo sistema.
Observação
A autenticação de identidade gerenciada em regras de escala está em versão prévia pública. Ele está disponível na versão 2024-02-02-preview
da API.
O exemplo de modelo do ARM a seguir mostra como usar uma identidade gerenciada com uma regra de escala do Armazenamento de Filas do Azure:
A conta de armazenamento de fila usa a propriedade accountName
para identificar a conta de armazenamento, enquanto a propriedade identity
especifica qual identidade gerenciada usar. Não é necessário usar a propriedade auth
.
"scale": {
"minReplicas": 1,
"maxReplicas": 10,
"rules": [{
"name": "myQueueRule",
"azureQueue": {
"accountName": "mystorageaccount",
"queueName": "myqueue",
"queueLength": 2,
"identity": "<IDENTITY1_RESOURCE_ID>"
}
}]
}
Para saber mais sobre como usar a identidade gerenciada com regras de escala, consulte Definir regras de dimensionamento nos Aplicativos de Contêiner do Azure.
Controlar a disponibilidade de identidade gerenciada
Os Aplicativos de Contêiner permitem especificar contêineres de inicialização e contêineres principais. Por padrão, contêineres principais e de inicialização em um ambiente de perfil de carga de trabalho de consumo podem usar a identidade gerenciada para acessar outros serviços do Azure. Em ambientes somente de consumo e ambientes de perfil de carga de trabalho dedicados, somente os contêineres principais podem usar a identidade gerenciada. Os tokens de acesso de identidade gerenciada estão disponíveis para cada identidade gerenciada configurada no aplicativo de contêiner. No entanto, em algumas situações, apenas o contêiner de inicialização ou o contêiner principal exigem tokens de acesso para uma identidade gerenciada. Às vezes, você poderá usar uma identidade gerenciada apenas para acessar o Registro de Contêiner do Azure para efetuar pull da imagem de contêiner e o próprio aplicativo não precisa ter acesso ao Registro de Contêiner do Azure.
A partir da versão 2024-02-02-preview
da API, e quais identidades gerenciadas estão disponíveis para seu aplicativo de contêiner durante as fases inicial e principal para seguir o princípio de segurança de privilégios mínimos. As opções a seguir estão disponíveis:
Init
: disponível somente para contêineres de inicialização. Use isso quando quiser executar algum trabalho de inicialização que exija uma identidade gerenciada, mas você não precisa mais da identidade gerenciada no contêiner principal. Atualmente, essa opção só tem suporte em ambientes de consumo de perfil de carga de trabalhoMain
: disponível somente para contêineres principais. Use isso se o contêiner de inicialização não precisar de identidade gerenciada.All
: disponível para todos os contêineres. Essa é a configuração padrão.None
: não disponível para contêineres. Use isso ao ter uma identidade gerenciada que seja usada apenas para pull de imagem do ACR, regras de escala ou segredos do Key Vault e não precisar estar disponível para o código em execução em seus contêineres.
O exemplo de modelo do ARM a seguir mostra como configurar um aplicativo de contêiner em um ambiente de consumo de perfil de carga de trabalho que:
- Restringe apenas a identidade atribuída pelo sistema do aplicativo de contêiner a contêineres principais.
- Restringe uma identidade específica atribuída pelo usuário a apenas contêineres de inicialização.
- Usa uma identidade específica atribuída pelo usuário para pull de imagem do Registro de Contêiner do Azure sem permitir que o código nos contêineres use essa identidade gerenciada para acessar o registro. Neste exemplo, os próprios contêineres não precisam acessar o registro.
Essa abordagem limita os recursos que podem ser acessados se um ator mal-intencionado tiver acesso não autorizado aos contêineres.
{
"location": "eastus2",
"identity":{
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"<IDENTITY1_RESOURCE_ID>":{},
"<ACR_IMAGEPULL_IDENTITY_RESOURCE_ID>":{}
}
},
"properties": {
"workloadProfileName":"Consumption",
"environmentId": "<CONTAINER_APPS_ENVIRONMENT_ID>",
"configuration": {
"registries": [
{
"server": "myregistry.azurecr.io",
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID"
}],
"identitySettings":[
{
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID",
"lifecycle": "None"
},
{
"identity": "<IDENTITY1_RESOURCE_ID>",
"lifecycle": "Init"
},
{
"identity": "system",
"lifecycle": "Main"
}]
},
"template": {
"containers":[
{
"image":"myregistry.azurecr.io/main:1.0",
"name":"app-main"
}
],
"initContainers":[
{
"image":"myregistry.azurecr.io/init:1.0",
"name":"app-init",
}
]
}
}
}
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 do Microsoft Entra ID ao excluir o próprio recurso do aplicativo contêiner. A remoção de identidades gerenciadas atribuídas pelo usuário do seu aplicativo contêiner não as remove do Microsoft Entra ID.
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.