Guide pratique pour utiliser des identités managées pour App Service et Azure Functions

Remarque

Depuis le 1er juin 2024, toutes les applications App Service nouvellement créées ont la possibilité de générer un nom d’hôte par défaut unique en utilisant la convention d’affectation de noms <app-name>-<random-hash>.<region>.azurewebsites.net. Les noms d’application existants restent inchangés.

Exemple : myapp-ds27dh7271aah175.westus-01.azurewebsites.net

Pour plus d’informations, reportez-vous à Nom d’hôte par défaut unique pour la ressource App Service.

Cet article vous montre comment créer une identité managée pour les applications App Service et Azure Functions et comment l’utiliser pour accéder à d’autres ressources.

Important

Étant donné que les identités managées ne prennent pas en charge les scénarios sur plusieurs répertoires, elles ne se comportent pas comme prévu si la migration de votre application est effectuée sur plusieurs abonnements ou tenants. Pour recréer les identités managées après un tel déplacement, consultez Les identités managées seront-elles recréées automatiquement si je déplace un abonnement vers un autre répertoire ?. Les ressources en aval doivent également disposer de stratégies d’accès mises à jour pour utiliser la nouvelle identité.

Notes

Les identités managées ne sont pas disponibles pour les applications déployées dans Azure Arc.

Une identité managée de Microsoft Entra ID permet à votre application d’accéder facilement à d’autres ressources protégées Microsoft Entra, comme Azure Key Vault. Managée par la plateforme Azure, l’identité ne nécessite pas que vous approvisionniez ou permutiez de secrets. 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 :

  • Une identité affectée par le système est liée à l’application et est supprimée si l’application 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 assignée à votre application. Une application peut avoir plusieurs identités affectées par l’utilisateur et une identité affectée par l’utilisateur peut être affectée à plusieurs ressources Azure, telles que deux applications App Service.

La configuration de l’identité managée est spécifique à l’emplacement. Pour configurer une identité managée pour un emplacement de déploiement dans le portail, accédez d’abord à l’emplacement. Pour rechercher l’identité managée pour votre application web ou votre emplacement de déploiement dans votre tenant Microsoft Entra à partir du Portail Azure, recherchez-la directement à partir de la page de Présentation de votre tenant. Le nom de l’emplacement est généralement semblable à <app-name>/slots/<slot-name>.

Cette vidéo vous montre comment utiliser des identités managées d'App Service.

Les étapes de la vidéo sont également décrites dans les sections suivantes.

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

  1. Accédez aux paramètres de votre application dans le pPortail Azure sous le groupe Paramètres dans le volet de navigation gauche.

  2. Sélectionnez Identité.

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

    Capture d’écran qui indique où basculer l’État sur Activé, puis sélectionner Enregistrer.

Ajouter une identité attribuée par l’utilisateur

La création d’une application avec une identité attribuée par l’utilisateur nécessite la création de l’identité, puis l’ajout de son identificateur de ressource à la configuration de votre application.

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 attribuée par l’utilisateur en suivant ces instructions.

  2. 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.

  3. Sélectionnez Identité.

  4. Sélectionnez Attribuée par l’utilisateur>Ajouter.

  5. Recherchez l’identité précédemment créée, sélectionnez-la, puis sélectionnez Ajouter.

    Identité managée dans App Service

    Après la sélection de l’option Ajouter, l’application redémarre.

Configurer la ressource cible

Vous pouvez être amené à configurer la ressource cible pour autoriser l’accès à partir de votre application ou fonction. Par exemple, si vous demandez un jeton pour accéder à Key Vault, vous devez également ajouter une stratégie d’accès qui comprend l’identité managée de votre application ou de votre fonction. Sinon, vos appels à Key Vault seront rejetés, même si vous utilisez un jeton valide. Il en va de même pour Azure SQL Database. 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. Cela signifie que les modifications de l’appartenance à un rôle ou un groupe d’une identité managée peuvent prendre plusieurs heures avant de prendre effet. Aujourd’hui, il n’est pas possible de forcer l’actualisation du jeton d’une identité managée avant son expiration. Si vous modifiez l’appartenance à un rôle ou un groupe d’une identité managée pour ajouter ou supprimer des autorisations, il peut être nécessaire de patienter plusieurs heures avant que la ressource Azure utilisant l’identité dispose de l’accès approprié. Pour obtenir des alternatives aux appartenances à des groupes ou à des rôles, consultez Limitation de l’utilisation d’identités managées pour l’autorisation.

Connexion aux services Azure dans le code de l’application

Grâce à son identité managée, une application peut obtenir des jetons pour les ressources Azure qui sont protégées par 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.

App Service et Azure Functions fournissent un point de terminaison REST accessible en interne pour la récupération 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 et simplifie l’expérience de développement. Pour se connecter à d’autres services Azure, il suffit d’ajouter un objet d’informations d’identification au client spécifique au service.

Une requête HTTP GET brute utilise les deux variables d’environnement fournies et ressemble à l’exemple suivant :

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: <ip-address-:-port-in-IDENTITY_ENDPOINT>
X-IDENTITY-HEADER: <value-of-IDENTITY_HEADER>

Et voici un exemple de réponse :

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "00001111-aaaa-2222-bbbb-3333cccc4444"
}

Cette réponse est la même que la réponse pour la demande de jeton d’accès de service à service de Microsoft Entra. Pour accéder à Key Vault, vous ajouterez ensuite la valeur de access_token à une connexion cliente avec le coffre.

Pour plus d’informations sur le point de terminaison REST, consultez Référence du point de terminaison REST.

Supprimer une identité

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 elle-même.

  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.

Notes

Vous pouvez également définir le paramètre d’application WEBSITE_DISABLE_MSI, qui désactive uniquement le service de jetons local. Toutefois, cela ne touche pas à l’identité, et les outils continueront d’afficher l’identité managée comme étant activée. Par conséquent, l’utilisation de ce paramètre n’est pas recommandée.

Référence du point de terminaison REST

Une application avec une identité managée rend ce point de terminaison disponible en définissant deux variables d’environnement :

  • IDENTITY_ENDPOINT - URL du service de jetons local.
  • IDENTITY_HEADER - en-tête utilisé afin de limiter les attaques par falsification de requête côté serveur (SSRF). La plateforme effectue la rotation de la valeur.

IDENTITY_ENDPOINT est une URL locale à partir de laquelle votre application peut demander des jetons. Pour obtenir un jeton pour une ressource, effectuez une requête HTTP GET à destination de ce 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. Il peut s’agir d’un des services Azure prenant en charge l’authentification Microsoft Entra ou toute autre ressource URI.
api-version Requête Version de l’API de jeton à utiliser. Utiliser 2019-08-01.
X-IDENTITY-HEADER En-tête Valeur de la variable d’environnement IDENTITY_HEADER. Cet en-tête est utilisé afin 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ée sur une demande 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 demande 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ée sur une demande 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.

Étapes suivantes