Partager via


Identités managées dans Azure Container Apps

Une identité managée depuis Microsoft Entra ID permet à votre application conteneur d’accéder à d’autres ressources protégées par Microsoft Entra. Pour plus d’informations sur les identités managées dans Microsoft Entra ID, consultez Identités managées pour les ressources Azure.

Deux types d’identité peuvent être accordés à votre application de conteneur :

  • Une identité attribuée par le système est liée à votre application de conteneur et est supprimée si votre application de conteneur est supprimée. Une application ne peut avoir qu’une seule identité attribuée par le système.
  • Une identité attribuée par l’utilisateur est une ressource Azure autonome que vous pouvez affecter à votre application conteneur et à d’autres ressources. Une application de conteneur peut avoir plusieurs identités attribuées par l’utilisateur. Les identités affectées par l’utilisateur existent jusqu’à ce que vous les supprimiez.

Pourquoi utiliser une identité managée ?

Vous pouvez utiliser une identité managée dans une application de conteneur en cours d’exécution pour vous authentifier sur n’importe quel service prenant en charge l’authentification Microsoft Entra.

Avec des identités managées :

  • Votre application se connecte aux ressources avec l’identité managée. Vous n’avez pas besoin de gérer les informations d’identification dans votre application de conteneur.
  • Vous pouvez utiliser le contrôle d’accès en fonction du rôle pour accorder des autorisations spécifiques à une identité managée.
  • Les identités attribuées par le système sont automatiquement créées et gérées. Elles sont supprimées lorsque votre application de conteneur est supprimée.
  • Vous pouvez ajouter et supprimer des identités attribuées par l’utilisateur et les affecter à plusieurs ressources. Elles sont indépendantes du cycle de vie de votre application de conteneur.
  • Vous pouvez utiliser l’identité managée pour vous authentifier auprès d’un Azure Container Registry privé sans nom d’utilisateur et mot de passe pour extraire des conteneurs pour votre application conteneur.
  • Vous pouvez utiliser une identité managée pour créer des connexions pour les applications prenant en charge Dapr via des composants Dapr

Cas d’utilisation courants

Les identités attribuées par le système conviennent parfaitement aux charges de travail qui :

  • sont contenues dans une ressource unique
  • nécessitent des identités indépendantes

Les identités attribuées par l’utilisateur sont idéales pour les charges de travail qui :

  • s’exécutent sur plusieurs ressources et peuvent partager une même identité
  • nécessitent une pré-autorisation pour accéder à une ressource sécurisée

Limites

Les conteneurs init ne peuvent pas accéder aux identités managées dans les environnements de consommation uniquement et les environnements de profils de charge de travail dédiés.

Configurer des identités managées

Vous pouvez configurer vos identités managées via :

  • le portail Azure
  • Interface de ligne de commande Azure
  • votre modèle Azure Resource Manager (ARM)

Lorsqu’une identité managée est ajoutée, supprimée ou modifiée sur une application de conteneur en cours d’exécution, l’application ne redémarre pas automatiquement et une nouvelle révision n’est pas créée.

Remarque

Vous devez créer une nouvelle révision lors de l’ajout d’une identité managée à une application de conteneur déployée avant le 11 avril 2022.

Ajouter une identité affectée par le système

  1. Accédez à votre application conteneur dans le portail Azure.

  2. Dans le groupe Paramètres, sélectionnez Identité.

  3. Dans l’onglet Attribuée par le système, définissez État sur Activé.

  4. Cliquez sur Enregistrer.

Capture d’écran des identités attribuées par le système.

Ajouter une identité attribuée par l’utilisateur

La configuration d’une application de conteneur avec une identité attribuée par l’utilisateur nécessite d’abord de créer l’identité, puis d’ajouter son identificateur de ressource à la configuration de votre application de conteneur. Vous pouvez créer des identités attribuées par l’utilisateur via le Portail Azure ou l’interface Azure CLI. Pour plus d’informations sur la création et la gestion des identités attribuées par l’utilisateur, consultez Gérer les identités managées attribuées par l’utilisateur.

Tout d’abord, vous devrez créer une ressource d’identité attribuée par l’utilisateur.

  1. Créez une ressource d’identité managée affectée par l’utilisateur en fonction des étapes décrites dans Gérer les identités managées affectées par l’utilisateur.

  2. Accédez à votre application conteneur dans le portail Azure.

  3. Dans le groupe Paramètres, sélectionnez Identité.

  4. Dans l’onglet Affecté(e) par l’utilisateur, sélectionnez Ajouter.

  5. Recherchez et sélectionnez l’identité que vous avez créée précédemment.

  6. Sélectionnez Ajouter.

Capture d’écran des identités affectées par l’utilisateur.

Configurer une ressource cible

Pour certaines ressources, vous devez configurer les attributions de rôles pour l’identité managée de votre application afin d’en accorder l’accès. Dans le cas contraire, les appels de votre application vers des services, tels qu’Azure Key Vault et Azure SQL Database, sont rejetés même lorsque vous utilisez un jeton valide pour cette identité. Pour plus d’informations sur le contrôle d’accès en fonction du rôle Azure (Azure RBAC), consultez Qu’est-ce que le contrôle d’accès en fonction du rôle Azure (Azure RBAC) ?. Pour en savoir plus sur les ressources qui prennent en charge les jetons Microsoft Entra, consultez Services Azure prenant en charge l’authentification Microsoft Entra.

Important

Les services principaux pour les identités gérées conservent un cache par URI de ressource pendant environ 24 heures. Si vous mettez à jour la stratégie d’accès d’une ressource cible particulière et que vous récupérez immédiatement un jeton pour cette ressource, vous pouvez continuer à obtenir un jeton mis en cache avec des autorisations obsolètes jusqu’à ce que ce jeton expire. L’actualisation d’un jeton de manière forcée n’est pas prise en charge.

Connexion aux services Azure dans le code de l’application

Grâce aux identités managées, une application peut obtenir des jetons pour accéder aux ressources Azure qui utilisent Microsoft Entra ID, telles qu’Azure SQL Database, Azure Key Vault et Stockage Azure. Ces jetons représentent l’application qui accède à la ressource, pas un utilisateur spécifique de l’application.

Container Apps fournit un point de terminaison REST accessible en interne pour récupérer des jetons. Le point de terminaison REST est disponible à partir de l’application avec une requête HTTP standard GET, que vous pouvez envoyer avec un client HTTP générique dans votre langue préférée. Pour les langages .NET, JavaScript, Java et Python, la bibliothèque de client Azure Identity fournit une abstraction sur ce point de terminaison REST. Vous pouvez vous connecter à d’autres services Azure en ajoutant un objet d’informations d’identification au client spécifique au service.

Remarque

Lorsque vous utilisez la bibliothèque de client Azure Identity, vous devez spécifier explicitement l’ID de client de l’identité managée affectée par l’utilisateur.

Remarque

Lorsque vous vous connectez à des sources de données Azure SQL avec Entity Framework Core, pensez à utiliser Microsoft.Data.SqlClient, qui fournit des chaînes de connexion spéciales pour la connectivité de l’identité managée.

Pour les applications .NET, la façon la plus simple d’utiliser une identité managée consiste à recourir à la bibliothèque de client Azure Identity pour .NET. Pour plus d'informations, consultez les ressources suivantes :

Les exemples liés utilisent DefaultAzureCredential. Cet objet est efficace dans la plupart des scénarios, car le même modèle fonctionne dans Azure (avec des identités managées) et sur votre ordinateur local (sans identités managées).

Utiliser l’identité managée pour les règles de mise à l’échelle

Vous pouvez utiliser des identités managées dans vos règles de mise à l’échelle pour vous authentifier auprès des services Azure qui prennent en charge les identités managées. Pour utiliser une identité managée dans votre règle de mise à l’échelle, utilisez la propriété identity au lieu de la propriété auth dans votre règle de mise à l’échelle. Les valeurs acceptables pour la propriété identity sont soit l’ID de ressource Azure d’une identité affectée par l’utilisateur, soit system pour utiliser une identité affectée par le système.

Remarque

L’authentification par identité managée dans les règles de mise à l’échelle est en préversion publique. Elle est disponible dans la version d’API 2024-02-02-preview.

L’exemple de modèle ARM suivant montre comment utiliser une identité managée avec une règle de mise à l’échelle Stockage File d’attente Azure :

Le compte Stockage File d’attente utilise la propriété accountName pour identifier le compte de stockage, tandis que la propriété identity spécifie l’identité managée à utiliser. Vous n’avez pas besoin d’utiliser la propriété auth.

"scale": {
    "minReplicas": 1,
    "maxReplicas": 10,
    "rules": [{
        "name": "myQueueRule",
        "azureQueue": {
            "accountName": "mystorageaccount",
            "queueName": "myqueue",
            "queueLength": 2,
            "identity": "<IDENTITY1_RESOURCE_ID>"
        }
    }]
}

Pour en savoir plus sur l’utilisation d’identités managées avec des règles de mise à l’échelle, consultez Définir des règles de mise à l’échelle dans Azure Container Apps.

Contrôler la disponibilité des identités managées

Container Apps vous permet de spécifier des conteneurs init et des conteneurs principaux. Par défaut, les conteneurs principaux et init dans un environnement de profils de charge de travail de consommation peuvent tous les deux utiliser une identité managée pour accéder à d’autres services Azure. Dans les environnements de consommation uniquement et les environnements de profils de charge de travail dédiés, seuls les conteneurs principaux peuvent utiliser les identités managées. Les jetons d’accès aux identités managées sont disponibles pour chaque identité managée configurée sur l’application conteneur. Toutefois, dans certaines situations, seul le conteneur init ou le conteneur principal nécessite des jetons d’accès pour une identité managée. D’autres fois, vous pouvez utiliser une identité managée uniquement pour accéder à votre instance Azure Container Registry afin d’extraire l’image conteneur, et votre application n’a pas besoin d’avoir accès à votre instance Azure Container Registry.

À partir de l’API version 2024-02-02-preview, vous pouvez contrôler les identités managées à disposition de votre application conteneur pendant les phases init et main pour suivre le principe de sécurité des privilèges minimum. Les options suivantes sont disponibles :

  • Init : disponible uniquement pour les conteneurs init. Utilisez cette option lorsque vous souhaitez effectuer un travail d’initialisation nécessitant une identité managée, mais que vous n’avez plus besoin de l’identité managée dans le conteneur principal. Cette option n’est actuellement prise en charge que dans les environnements de consommation de profils de charge de travail
  • Main : disponible uniquement pour les conteneurs principaux. Utilisez cette option si votre conteneur init n’a pas besoin d’une identité managée.
  • All : disponible pour tous les conteneurs. Cette valeur est le paramétrage par défaut.
  • None : non disponible pour n’importe quel conteneur. Utilisez cette option lorsque vous disposez d’une identité managée qui est uniquement utilisée pour l’extraction d’images ACR, les règles de mise à l’échelle ou les secrets Key Vault et qui n’a pas besoin d’être accessible au code exécuté dans vos conteneurs.

L’exemple de modèle ARM suivant montre comment configurer une application conteneur sur un environnement de consommation de profils de charge de travail qui :

  • Restreint l’identité affectée par le système de l’application conteneur aux conteneurs principaux uniquement.
  • Restreint une identité affectée par l’utilisateur spécifique aux conteneurs init uniquement.
  • Utilise une identité affectée par l’utilisateur spécifique pour l’extraction d’images Azure Container Registry sans autoriser le code dans les conteneurs à utiliser cette identité managée pour accéder au registre. Dans cet exemple, les conteneurs eux-mêmes n’ont pas besoin d’accéder au registre.

Cette approche limite les ressources accessibles au cas où un acteur malveillant obtiendrait un accès non autorisé aux conteneurs.

{
    "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",
                }
            ]
        }
    }
}

Afficher les identités managées

Vous pouvez afficher les identités managées attribuées par le système et attribuées par l’utilisateur à l’aide de la commande Azure CLI suivante. La sortie affiche le type d’identité managée, les ID de locataire et les ID principaux de toutes les identités managées affectées à votre application de conteneur.

az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>

Supprimer une identité managée

Lorsque vous supprimez une identité affectée par le système, elle est supprimée de Microsoft Entra ID. Les identités affectées par le système sont également automatiquement supprimées de Microsoft Entra ID lorsque vous supprimez la ressource d’application de conteneur elle-même. La suppression des identités managées attribuées par l’utilisateur de votre application de conteneur ne les supprime pas de Microsoft Entra ID.

  1. Dans le volet de navigation gauche de la page de votre application, faites défiler la page vers le bas jusqu’au groupe Paramètres.

  2. Sélectionnez Identité. Suivez ensuite les étapes en fonction du type d’identité :

    • Identité affectée par le système : Dans l’onglet Affectée par le système, basculez État sur Désactivé. Cliquez sur Enregistrer.
    • Identité affectée par l’utilisateur : Sélectionnez l’onglet Affectée par l’utilisateur, cochez la case de l’identité, puis sélectionnez Supprimer. Sélectionnez Oui pour confirmer.

Étapes suivantes