Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
-
Azure App Service (version
2019-08-01de l’API) - Machines virtuelles Azure
- Azure Arc
- Azure Cloud Shell
- Azure Service Fabric
- Azure ML
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.