Identidades gerenciadas em Aplicativos de Contêiner do Azure

Uma identidade gerenciada do Microsoft Entra ID permite que seu aplicativo de contêiner acesse outros recursos protegidos pelo Microsoft Entra. Para obter mais informações sobre identidades gerenciadas no Microsoft Entra ID, 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 seu aplicativo de contêiner e é excluída quando seu aplicativo de contêiner é excluído. Uma aplicação só pode ter uma identidade atribuída pelo sistema.
  • Uma identidade atribuída pelo usuário é um recurso autônomo do Azure que você pode atribuir ao seu aplicativo de contêiner e 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 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 em seu 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. Eles são excluídos quando seu aplicativo de contêiner é excluído.
  • Você pode adicionar e excluir identidades atribuídas pelo usuário e atribuí-las a vários recursos. Eles são independentes do ciclo de vida do seu aplicativo de 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 extrair contêineres para seu aplicativo de contêiner.
  • Você pode usar uma identidade gerenciada para criar conexões para aplicativos habilitados para Dpr por meio de componentes do Dapr

Casos comuns de utilização

As identidades atribuídas pelo sistema são melhores para cargas de trabalho que:

  • estão contidos num único recurso
  • precisam de identidades independentes

As identidades atribuídas pelo usuário são ideais para cargas de trabalho que:

  • executar em vários recursos e pode compartilhar uma única identidade
  • precisa 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 de consumo e ambientes de perfil de carga de trabalho dedicados

Configurar identidades geridas

Você pode configurar suas identidades gerenciadas através de:

  • Portal do Azure
  • da CLI do Azure
  • seu modelo do Azure Resource Manager (ARM)

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.

Nota

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 ao sistema

  1. Vá para seu aplicativo de contêiner no portal do Azure.

  2. No grupo Configurações, selecione Identidade.

  3. Na guia Sistema atribuído, alterne Status para Ativado.

  4. Selecione Guardar.

Captura de ecrã de identidades atribuídas pelo sistema.

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, em seguida, 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.

  1. Crie um recurso de identidade gerenciada atribuído pelo usuário de acordo com as etapas encontradas em Gerenciar identidades gerenciadas atribuídas pelo usuário.

  2. Vá para seu aplicativo de contêiner no portal do Azure.

  3. No grupo Configurações, selecione Identidade.

  4. Na guia Usuário atribuído, selecione Adicionar.

  5. Procure e selecione a identidade que criou anteriormente.

  6. Selecione Adicionar.

Captura de ecrã das identidades atribuídas pelo utilizador.

Configurar um recurso de destino

Para alguns recursos, você precisa configurar atribuições de função para a identidade gerenciada do seu aplicativo para conceder acesso. Caso contrário, as chamadas do seu aplicativo para serviços, como o Cofre da Chave do Azure e o Banco de Dados SQL do Azure, serão rejeitadas mesmo quando você usar um token válido para essa identidade. Para saber mais sobre o controle de acesso baseado em função do Azure (Azure RBAC), consulte O que é RBAC?. Para saber mais sobre quais recursos oferecem suporte a tokens do Microsoft Entra, consulte Serviços do Azure que oferecem suporte à autenticação do Microsoft Entra.

Importante

Os serviços back-end para identidades geridas mantêm um cache por URI de recurso durante 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, poderá continuar a obter um token armazenado 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 a ID do Microsoft Entra, como o Banco de Dados SQL do Azure, o Cofre da Chave do Azure e o Armazenamento do Azure. Esses tokens representam o aplicativo que acessa o recurso, e não qualquer usuário específico do aplicativo.

Container Apps fornece um ponto de extremidade REST acessível internamente para recuperar tokens. O ponto de extremidade REST está disponível no aplicativo com uma solicitação HTTP GET padrão, que você pode enviar com um cliente HTTP genérico em seu idioma preferido. Para .NET, JavaScript, Java e Python, a biblioteca de cliente do Azure Identity fornece uma abstração sobre esse 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.

Nota

Ao usar a biblioteca de cliente do Azure Identity, você precisa especificar explicitamente a ID do cliente de identidade gerenciada atribuída pelo usuário.

Nota

Ao conectar-se a fontes de dados SQL do Azure com o Entity Framework Core, considere usar 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 cliente do Azure Identity para .NET. Para mais informações, consulte os seguintes recursos:

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 em sua máquina local (sem identidades gerenciadas).

Usar identidade gerenciada para regras de escala

Você pode usar identidades gerenciadas em suas regras de escala para autenticar com serviços do Azure que dão suporte a identidades gerenciadas. Para usar uma identidade gerenciada em sua regra de escala, use a identity propriedade em vez da propriedade em sua regra de auth escala. Os valores aceitáveis para a identity propriedade 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.

Nota

A autenticação de identidade gerenciada em regras de escala está em visualização pública. Está disponível na versão 2024-02-02-previewAPI.

O exemplo de modelo 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 accountName propriedade para identificar a conta de armazenamento, enquanto a identity propriedade especifica qual identidade gerenciada usar. Você não precisa usar a auth propriedade.

"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 em Aplicativos de Contêiner do Azure.

Controlar a disponibilidade de identidade gerenciada

Container Apps permite que você especifique contêineres init e contêineres principais. Por padrão, os contêineres principal 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 init ou o contêiner principal exigem tokens de acesso para uma identidade gerenciada. Outras vezes, você pode usar uma identidade gerenciada apenas para acessar seu Registro de Contêiner do Azure para extrair a imagem do contêiner, e seu aplicativo em si não precisa ter acesso ao seu Registro de Contêiner do Azure.

A partir da versão 2024-02-02-previewda API, você pode controlar 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 menor privilégio. Também estão disponíveis as seguintes opções:

  • Init: Disponível apenas para recipientes de entrada. Use isso quando quiser executar algum trabalho de inicialização que exija uma identidade gerenciada, mas não precise mais da identidade gerenciada no contêiner principal. Atualmente, essa opção só é suportada em ambientes de consumo de perfil de carga de trabalho
  • Main: Disponível apenas para contentores principais. Use isso se o contêiner de inicialização não precisar de identidade gerenciada.
  • All: Disponível para todos os contentores. Esse valor é a configuração padrão.
  • None: Não disponível para nenhum recipiente. Use isso quando você tiver uma identidade gerenciada que seja usada apenas para extração de imagem ACR, regras de escala ou segredos do Cofre da Chave e não precise estar disponível para o código em execução em seus contêineres.

O exemplo de modelo ARM a seguir mostra como configurar um aplicativo contêiner em um ambiente de consumo de perfil de carga de trabalho que:

  • Restringe a identidade atribuída pelo sistema do aplicativo contêiner apenas aos contêineres principais.
  • Restringe uma identidade específica atribuída pelo usuário apenas a contêineres de inicialização.
  • Usa uma identidade específica atribuída pelo usuário para a extração 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 obtiver 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 pelo usuário usando o seguinte comando da CLI do Azure. A saída mostra o tipo de identidade gerenciada, IDs de locatário e IDs principais 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

Quando você remove uma identidade atribuída ao sistema, ela é excluída da ID do Microsoft Entra. As identidades atribuídas ao sistema também são removidas automaticamente do Microsoft Entra ID quando você exclui o próprio recurso do aplicativo 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.

  1. Na navegação à esquerda da página da sua aplicação, desloque-se para baixo até ao grupo Definições .

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

    • Identidade atribuída ao sistema: na guia Sistema atribuído, alterne Status para Desativado. Selecione Guardar.
    • Identidade atribuída pelo usuário: selecione a guia Usuário atribuído , marque a caixa de seleção da identidade e selecione Remover. Selecione Sim para confirmar.

Próximos passos