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.
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.
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 identités managées dans les règles de mise à l’échelle ne sont pas prises en charge. Vous devez inclure des chaînes de connexion ou des clés dans la secretRef de la règle de mise à l’échelle.
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.
Accédez à votre application conteneur dans le portail Azure.
Dans le groupe Paramètres, sélectionnez Identité.
Dans l’onglet Attribuée par le système, définissez État sur Activé.
Cliquez sur Enregistrer.
Exécutez la commande az containerapp identity assign pour créer une identité affectée par le système :
az containerapp identity assign --name myApp --resource-group myResourceGroup --system-assigned
Un modèle ARM peut être utilisé pour automatiser le déploiement de votre application de conteneur et de vos ressources. Pour ajouter une identité attribuée par le système, ajoutez une section identity à votre modèle ARM.
"identity": {
"type": "SystemAssigned"
}
L’ajout du type attribué par le système indique à Azure de créer et de manager l’identité de votre application. Pour obtenir un exemple de modèle ARM complet, consultez Spécification de l’API ARM.
Certaines commandes Azure CLI, y compris az containerapp create et az containerapp job create, prennent en charge les fichiers YAML pour l’entrée. Pour ajouter une identité attribuée par le système, ajoutez une section identity à votre fichier YAML.
identity:
type: SystemAssigned
L’ajout du type attribué par le système indique à Azure de créer et de manager l’identité de votre application. Pour obtenir un exemple de modèle YAML complet, consultez Spécification de l’API ARM.
Un modèle Bicep peut être utilisé pour automatiser le déploiement de votre application de conteneur et de vos ressources. Pour ajouter une identité attribuée par le système, ajoutez une section identity à votre modèle Bicep.
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.
Accédez à votre application conteneur dans le portail Azure.
Dans le groupe Paramètres, sélectionnez Identité.
Dans l’onglet Affecté(e) par l’utilisateur, sélectionnez Ajouter.
Recherchez et sélectionnez l’identité que vous avez créée précédemment.
Sélectionnez Ajouter.
Créer uneidentité affectée par l’utilisateur.
az identity create --resource-group <GROUP_NAME> --name <IDENTITY_NAME> --output json
Notez la propriété id de la nouvelle identité.
Exécutez la commande az containerapp identity assign pour attribuer l’identité à l’application. Le paramètre des identités est une liste séparée par un espace.
Remplacez <IDENTITY_RESOURCE_ID> par la propriété id de l’identité. Pour affecter plusieurs identités attribuées par l’utilisateur, fournissez une liste séparée par un espace des ID d’identité au paramètre --user-assigned.
Pour ajouter une ou plusieurs identités attribuées par l’utilisateur, ajoutez une section identity à votre modèle ARM. Remplacez <IDENTITY1_RESOURCE_ID> et <IDENTITY2_RESOURCE_ID> par les identificateurs de ressources des identités que vous souhaitez ajouter.
Spécifiez chaque identité attribuée par l’utilisateur en ajoutant un élément à l’objet userAssignedIdentities avec l’identificateur de ressources de l’identité comme clé. Utilisez un objet vide comme valeur.
Une application peut avoir simultanément une identité attribuée par le système et une identité attribuée par l’utilisateur. Dans ce cas, la valeur de la propriété type serait SystemAssigned,UserAssigned.
Pour ajouter une ou plusieurs identités affectées par l’utilisateur, ajoutez une section identity à votre fichier de configuration YAML. Remplacez <IDENTITY1_RESOURCE_ID> et <IDENTITY2_RESOURCE_ID> par les identificateurs de ressources des identités que vous souhaitez ajouter.
Spécifiez chaque identité attribuée par l’utilisateur en ajoutant un élément à l’objet userAssignedIdentities avec l’identificateur de ressources de l’identité comme clé. Utilisez un objet vide comme valeur.
Une application peut avoir simultanément une identité attribuée par le système et une identité attribuée par l’utilisateur. Dans ce cas, la propriété type est SystemAssigned,UserAssigned.
Pour ajouter une ou plusieurs identités attribuées par l’utilisateur, ajoutez une section identity à votre modèle Bicep. Remplacez <IDENTITY1_RESOURCE_ID> et <IDENTITY2_RESOURCE_ID> par les identificateurs de ressources des identités que vous souhaitez ajouter.
Spécifiez chaque identité attribuée par l’utilisateur en ajoutant un élément à l’objet userAssignedIdentities avec l’identificateur de ressources de l’identité comme clé. Utilisez un objet vide comme valeur.
Une application peut avoir simultanément une identité attribuée par le système et une identité attribuée par l’utilisateur. Dans ce cas, la propriété type est SystemAssigned,UserAssigned.
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.
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).
Pour les applications Node.js, la façon la plus simple d’utiliser une identité managée consiste à recourir à la bibliothèque de client Azure Identity pour JavaScript. 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).
Pour obtenir plus d’exemples de code de la bibliothèque de client Azure Identity pour JavaScript, consultez Exemples Azure Identity.
Pour les applications Python, la façon la plus simple d’utiliser une identité managée consiste à recourir à la bibliothèque de client Azure Identity pour Python. 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).
Pour les fonctions et applications Java, la façon la plus simple d’utiliser une identité managée consiste à recourir à la bibliothèque de client Azure Identity pour Java. 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).
Pour obtenir plus d’exemples de code de la bibliothèque de client Azure Identity pour Java, consultez Exemples Azure Identity.
Utilisez le script suivant pour récupérer un jeton à partir du point de terminaison local en spécifiant un URI de ressource d’un service Azure. Remplacez l’espace réservé par l’URI de ressource pour obtenir le jeton.
Une requête HTTP GET brute ressemble à l’exemple suivant.
Obtenez l’URL du point de terminaison de jeton à partir de la variable d’environnement IDENTITY_ENDPOINT. x-identity-header contient le GUID stocké dans la variable d’environnement IDENTITY_HEADER.
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
Une réponse peut se présenter comme l’exemple suivant :
Une application de conteneur avec une identité managée expose le point de terminaison d’identité en définissant deux variables d’environnement :
IDENTITY_ENDPOINT : URL locale à partir de laquelle votre application de conteneur peut demander des jetons.
IDENTITY_HEADER : en-tête utilisé afin de limiter les attaques de falsification de requêtes côté serveur (SSRF). La plateforme effectue la rotation de la valeur.
Pour obtenir un jeton pour une ressource, effectuez une requête HTTP GET à destination du point de terminaison, en indiquant notamment les paramètres suivants :
Version de l’API de jeton à utiliser. Utilisez « 2019-08-01 » ou une version ultérieure.
X-IDENTITY-HEADER
En-tête
Valeur de la variable d’environnement IDENTITY_HEADER. Cet en-tête permet de limiter les attaques de falsification de requêtes côté serveur (SSRF).
client_id
Requête
(Facultatif) ID de client de l’identité affectée par l’utilisateur qui doit être utilisée. Ne peut pas être utilisé sur une requête qui inclut principal_id, mi_res_id ou object_id. Si tous les paramètres d’ID (client_id, principal_id,object_id et mi_res_id) sont omis, l’identité affectée par le système est utilisée.
principal_id
Requête
(Facultatif) ID de principal de service de l’identité affectée par l’utilisateur qui doit être utilisée. object_id est un alias qui peut être utilisé à la place. Ne peut pas être utilisé sur une requête qui inclut client_id, mi_res_id ou object_id. Si tous les paramètres d’ID (client_id, principal_id,object_id et mi_res_id) sont omis, l’identité affectée par le système est utilisée.
mi_res_id
Requête
(Facultatif) L’ID de ressource Azure de l’identité affectée par l’utilisateur qui doit être utilisée. Ne peut pas être utilisé sur une requête qui inclut principal_id, client_id ou object_id. Si tous les paramètres d’ID (client_id, principal_id,object_id et mi_res_id) sont omis, l’identité affectée par le système est utilisée.
Important
Si vous tentez d’obtenir des jetons pour des identités affectées par l’utilisateur, vous devez inclure une des propriétés facultatives. Sinon, le service de jetons essaie d’obtenir un jeton pour une identité attribuée par le système, laquelle peut exister ou non.
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.
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.
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.
Pour supprimer l’identité affectée par le système :
az containerapp identity remove --name <APP_NAME> --resource-group <GROUP_NAME> --system-assigned
Pour supprimer une ou plusieurs identités affectées par l’utilisateur :