Utilisation de l’identité managée

L’identité managée permet aux développeurs de supprimer la nécessité de stocker, de faire pivoter et de gérer les informations d’identification pour leurs applications s’exécutant dans le cloud Microsoft Azure. Microsoft Authentication Library (MSAL) pour Python prend en charge l’utilisation de l’authentification avec une identité managée sur les charges de travail Azure prises en charge.

Note

L’identité managée dans MSAL Python est prise en charge depuis la version 1.29.0 du msal package.

MSAL Python prend en charge l’acquisition de jetons via le service d’identité managée lorsqu’elle est utilisée avec des applications exécutées à l’intérieur d’une infrastructure Azure, par exemple :

Pour obtenir une liste complète, reportez-vous à Azure services qui peuvent utiliser des identités managées pour accéder à d’autres services.

Quel SDK utiliser - Kit de développement logiciel (SDK) Azure ou MSAL ?

Les bibliothèques MSAL fournissent des API de niveau inférieur plus proches des protocoles OAuth2 et OIDC.

MSAL Python et Kit de développement logiciel (SDK) Azure permettent d’acquérir des jetons via une identité managée. En interne, Kit de développement logiciel (SDK) Azure utilise MSAL Python et fournit une API de plus haut niveau via ses abstractions DefaultAzureCredential et ManagedIdentityCredential.

Si votre application utilise déjà l’un des kits SDK, continuez à utiliser le même KIT SDK.

  • Utilisez Kit de développement logiciel (SDK) Azure si vous écrivez une nouvelle application et prévoyez d'appeler d'autres ressources Azure, car ce KIT de développement logiciel (SDK) offre une meilleure expérience de développement en permettant à l'application de s'exécuter sur des machines de développement privées où l'identité managée n'existe pas.
  • Utilisez MSAL si vous devez appeler d’autres API web en aval comme Microsoft Graph ou votre propre API web.

Comment utiliser des identités managées

Il existe deux types d’identités managées disponibles pour les développeurs : attribués par le système et affectés par l’utilisateur. Vous pouvez en savoir plus sur les différences dans l’article sur les types d’identité managée . MSAL Python prend en charge l’acquisition de jetons avec les deux. La journalisation de MSAL Python permet de suivre les requêtes et les métadonnées associées.

Avant d’utiliser des identités managées à partir de MSAL Python, les développeurs doivent les activer pour les ressources qu’ils souhaitent utiliser via Azure CLI ou le Portail Azure.

Exemples

Dans les identités attribuées par le système et l’utilisateur, les développeurs doivent utiliser ManagedIdentityClient pour accéder aux identités managées.

Identités managées attribuées par le système

Les identités managées affectées par le système peuvent être utilisées en instanciant SystemAssignedManagedIdentity et en passant à ManagedIdentityClient.

Note

Vous devez inclure une http_client référence, qui peut être définie sur requests.Session(). Cela permet à MSAL de gérer un pool de connexions au point de terminaison IMDS.

Vous pouvez spécifier l’étendue de ressource cible lors de l’appel acquire_token_for_client.

import msal
import requests

managed_identity = msal.SystemAssignedManagedIdentity()

global_app = msal.ManagedIdentityClient(managed_identity, http_client=requests.Session())

result = global_app.acquire_token_for_client(resource='https://vault.azure.net')

if "access_token" in result:
    print("Token obtained!")

Important

Vous devez activer une identité affectée par le système pour la ressource où le code Python s’exécute ; sinon, aucun jeton n’est retourné.

Identités managées attribuées par l’utilisateur

Les identités gérées attribuées par l’utilisateur peuvent être utilisées en instanciant UserAssignedManagedIdentity et en le passant à ManagedIdentityClient. Vous devez spécifier l’une des options suivantes :

  • ID du client (client_id)
  • ID de ressource (resource_id)
  • ID d’objet (object_id)

Note

Vous devez inclure une http_client référence, qui peut être définie sur requests.Session(). Cela permet à MSAL de gérer un pool de connexions au point de terminaison IMDS.

Vous pouvez spécifier l’étendue de ressource cible lors de l’appel acquire_token_for_client.

import msal
import requests

managed_identity = msal.UserAssignedManagedIdentity(client_id='YOUR_CLIENT_ID')

global_app = msal.ManagedIdentityClient(managed_identity, http_client=requests.Session())

result = global_app.acquire_token_for_client(resource='https://vault.azure.net')

if "access_token" in result:
    print("Token obtained!")

Note

L'exemple d'identité managée intégrée de MSAL Python montre comment l'identité managée affectée par l'utilisateur peut être déduite à partir de variables d'environnement. Il s’agit d’un modèle d’utilisation avancé qui peut être utilisé au lieu d’une définition explicite de l’ID client dans le code.

Important

Vous devez attacher une identité affectée par l’utilisateur pour la ressource où le code Python s’exécute ; sinon, aucun jeton n’est retourné. Si un identificateur incorrect est utilisé pour l’identité managée affectée par l’utilisateur, aucun jeton n’est également retourné.

Caching

Par défaut, MSAL Python prend en charge la mise en cache en mémoire.

Important

MSAL Python prend également en charge l’extensibilité du cache pour l’identité managée, afin que vous puissiez conserver le cache de jetons sur le disque. Cela peut être utile si vous écrivez un script de ligne de commande et quelques autres scénarios limités. Nous vous déconseillons de partager le cache de jetons d’identité managée entre plusieurs machines, car cela peut entraîner des comportements d’accès inattendus pour les utilisateurs du cache. Un jeton acquis pour un nœud/machine, s’il est mis en cache dans un cache distribué, peut être utilisé pour un autre ordinateur pour lequel il n’est pas prévu.