Une identité managée de 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 qui peut être affectée à une votre application de conteneur et d’autres ressources. Une application de conteneur peut avoir plusieurs identités attribuées par l’utilisateur. L’identité existe jusqu’à ce que vous la supprimiez.
Pourquoi utiliser une identité managée ?
Vous pouvez utiliser une identité managée dans une application conteneur en cours d’exécution pour vous authentifier auprès de 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.
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
L’utilisation d’identités managées dans les règles de mise à l’échelle n’est pas prise en charge. Vous devez toujours inclure la chaîne de connexion ou la clé dans le secretRef de la règle de mise à l’échelle.
Les conteneurs Init ne peuvent pas accéder aux identités managées.
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.
Dans le volet de navigation gauche de la page de votre application conteneur, faites défiler la page vers le bas jusqu’au groupe Paramètres.
Sélectionnez Identité.
Dans l’onglet Attribuée par le système, définissez État sur Activé. Sélectionnez 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, notamment az containerapp create et az containerapp job create, prennent en charge les fichiers YAML pour l’entrée. Pour ajouter une identité affectée par le système, ajoutez une identity section à 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 la spécification de l’API ARM.
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.
Dans le volet de navigation gauche de la page de votre application conteneur, faites défiler la page vers le bas jusqu’au groupe Paramètres.
Sélectionnez Identité.
Dans l’onglet Affecté(e) par l’utilisateur, sélectionnez Ajouter.
Recherchez l’identité que vous avez créée précédemment et sélectionnez-la. 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 propriété de type doit êtreSystemAssigned,UserAssigned.
Pour ajouter une ou plusieurs identités affectées par l’utilisateur, ajoutez une identity section à 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.
Pour obtenir un exemple de modèle YAML complet, consultez la spécification de l’API ARM.
Remarque
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é de type doit êtreSystemAssigned,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, seront rejetés même si 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. Il n’existe actuellement aucun moyen de forcer l’actualisation d’un jeton.
Connexion aux services Azure dans le code de l’application
Avec des identités managées, une application peut obtenir des jetons pour accéder aux ressources Azure qui utilisent Microsoft Entra ID, comme 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 accessible depuis l’application avec une instruction HTTP GET standard, qui peut être implémentée avec un client HTTP générique dans chaque langage. Pour les langages .NET, JavaScript, Java et Python, la bibliothèque de client Azure Identity fournit une abstraction sur ce point de terminaison REST. Pour se connecter à d’autres services Azure, il suffit d’ajouter un objet d’informations d’identification au client spécifique au service.
Remarque
Lors de l’utilisation de la bibliothèque de client Azure Identity, l’ID client d’identité managée affecté par l’utilisateur doit être spécifié.
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 titres de documentation respectifs de la bibliothèque de client :
Les exemples liés utilisent DefaultAzureCredential. C’est utile pour la majorité 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 titres de documentation respectifs de la bibliothèque de client :
Les exemples liés utilisent DefaultAzureCredential. C’est utile pour la majorité 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 titres de documentation respectifs de la bibliothèque de client :
Les exemples liés utilisent DefaultAzureCredential. C’est utile pour la majorité 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 titres de documentation respectifs de la bibliothèque de client :
Les exemples liés utilisent DefaultAzureCredential. C’est utile pour la majorité 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 conteneur peut demander des jetons.
IDENTITY_HEADER - en-tête utilisé pour atténuer les attaques de falsification de requête 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 :
Nom du paramètre
Dans
Description
resource
Requête
URI de ressource Microsoft Entra de la ressource pour laquelle un jeton doit être obtenu. La ressource peut être l’un des services Azure qui prennent en charge l’authentification Microsoft Entra ou tout autre URI de ressource.
api-version
Requête
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 l’ID Microsoft Entra lorsque vous supprimez la ressource d’application conteneur elle-même. La suppression des identités managées affectées par l’utilisateur de votre application conteneur ne les supprime pas de l’ID Microsoft Entra.
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é. Sélectionnez 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 :