Configurer l’authentification pour des ressources et workflows Azure Machine Learning
S’APPLIQUE À :Extension Azure CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (version actuelle)
Découvrez comment configurer l’authentification sur votre espace de travail Azure Machine Learning à partir d’Azure CLI ou du Kit de développement logiciel (SDK) Azure Machine Learning v2. L’authentification auprès de votre espace de travail Azure Machine Learning est essentiellement basée sur Microsoft Entra ID. En général, il existe quatre workflows d’authentification permettant de se connecter à l’espace de travail :
Interactif : vous utilisez votre compte dans Microsoft Entra ID pour l’authentification directe ou pour obtenir un jeton servant à l’authentification. L’authentification interactive est utilisée pendant l’expérimentation et le développement itératif. L’authentification interactive vous permet de contrôler l’accès aux ressources (par exemple, un service web) pour chaque utilisateur.
Principal de service : vous créez un compte de principal de service dans Microsoft Entra ID et l’utilisez pour vous authentifier ou pour obtenir un jeton. Un principal de service permet d’authentifier un processus automatisé auprès du service sans nécessiter d’interaction de la part de l’utilisateur. Par exemple, un script d’intégration et de déploiement continus qui forme et teste un modèle chaque fois que le code d’apprentissage change.
Session Azure CLI : vous vous authentifiez à l’aide d’une session Azure CLI active. L’extension Azure CLI pour Machine Learning (l’extension
ml
ou CLI v2) est un outil en ligne de commande permettant d’utiliser Azure Machine Learning. Vous pouvez vous connecter à Azure avec Azure CLI sur votre station de travail locale, sans stocker d’informations d’identification dans le code Python ni inviter l’utilisateur à s’authentifier. En parallèle, il est possible de réutiliser les mêmes scripts dans le cadre des pipelines d’intégration continue et de déploiement continu, tout en authentifiant Azure CLI avec une identité de principal de service.Identité managée : Lorsque vous utilisez le kit de développement logiciel (SDK) Azure Machine Learning v2 sur une instance de calcul ouune machine virtuelle Azure vous pouvez utiliser une identité managée pour Azure. Ce flux de travail permet à la machine virtuelle de se connecter à l’espace de travail à l’aide de l’identité gérée, sans stocker les informations d’identification dans le code Python ni inviter l’utilisateur à s’authentifier. Les clusters de calcul Azure Machine Learning peuvent également être configurés pour utiliser une identité managée afin d’accéder à l’espace de travail lors de la formation de modèles.
Quel que soit le workflow d’authentification utilisé, le contrôle d’accès en fonction du rôle Azure (Azure RBAC) permet de définir l’étendue du niveau d’accès (autorisation) autorisé aux ressources. Par exemple, un administrateur ou un processus d’automatisation peut avoir accès à la création d’une instance de calcul, mais pas à son utilisation. En revanche, un scientifique des données peut l’utiliser, mais pas la supprimer ou la créer. Pour plus d’informations, consultez Gérer l’accès à un espace de travail Azure Machine Learning.
L’accès conditionnel Microsoft Entra peut être utilisé pour contrôler ou restreindre davantage l’accès de chaque workflow d’authentification à l’espace de travail. Par exemple, un administrateur peut autoriser l’accès à l’espace de travail à partir d’appareils gérés uniquement.
Prérequis
Créez un espace de travail Azure Machine Learning.
Configurez votre environnement de développement ou utilisez une instance de calcul Azure Machine Learninget installez le kit de développement logiciel (SDK) Azure Machine Learning v2.
Installez Azure CLI.
Microsoft Entra ID
Tous les workflows d’authentification de votre espace de travail reposent sur Microsoft Entra ID. Si vous souhaitez que les utilisateurs s’authentifient à l’aide de comptes individuels, ceux-ci doivent disposer de comptes dans votre Microsoft Entra ID. Si vous souhaitez utiliser des principaux de service, ceux-ci doivent exister dans votre Microsoft Entra ID. Les identités managées sont également une fonctionnalité de Microsoft Entra ID.
Pour plus d’informations sur Microsoft Entra ID, consultez Présentation de l’authentification Microsoft Entra.
Une fois que vous avez créé les comptes Microsoft Entra, consultez Gérer l’accès à un espace de travail Azure Machine Learning pour plus d’informations sur la façon de leur octroyer l’accès à l’espace de travail et à autres opérations dans Azure Machine Learning.
Utiliser l’authentification interactive
S’APPLIQUE À : Kit de développement logiciel (SDK) Python azure-ai-mlv2 (préversion)
L’authentification interactive utilise le package Azure Identity pour Python. La plupart des exemples utilisent DefaultAzureCredential
pour accéder à vos informations d’identification. Lorsqu’un jeton est nécessaire, il demande une identité à l’aide de plusieurs identités (EnvironmentCredential
,ManagedIdentityCredential
, SharedTokenCacheCredential
, VisualStudioCodeCredential
, AzureCliCredential
, AzurePowerShellCredential
) à son tour, s’arrêtant lorsqu’un jeton est fourni. Pour plus d’informations, consultez la référence de classeDefaultAzureCredential.
Le code suivant est un exemple d’utilisation de DefaultAzureCredential
pour l’authentification. En cas d’échec de l’authentification avec DefaultAzureCredential
, une authentification de secours via votre navigateur web est utilisé à la place.
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
try:
credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
# This will open a browser page for
credential = InteractiveBrowserCredential()
Une fois l’objet d’informations d’identification créé, la classe MLClient est utilisée pour la connexion à l’espace de travail. Par exemple, le code suivant utilise la méthode pour charger les from_config()
informations de connexion :
from azure.ai.ml import MLClient
try:
ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
# NOTE: Update following workspace information to contain
# your subscription ID, resource group name, and workspace name
client_config = {
"subscription_id": "<SUBSCRIPTION_ID>",
"resource_group": "<RESOURCE_GROUP>",
"workspace_name": "<AZUREML_WORKSPACE_NAME>",
}
# write and reload from config file
import json, os
config_path = "../.azureml/config.json"
os.makedirs(os.path.dirname(config_path), exist_ok=True)
with open(config_path, "w") as fo:
fo.write(json.dumps(client_config))
ml_client = MLClient.from_config(credential=credential, path=config_path)
print(ml_client)
Configurer un principal du service
Pour utiliser un principal de service (SP), vous devez d’abord le créer. Accordez-lui ensuite l’accès à votre espace de travail. Comme mentionné précédemment, le contrôle d’accès en fonction du rôle (Azure RBAC) permet de contrôler l’accès. Vous devez donc également décider de l’accès accordé au principal du service.
Important
Lorsque vous utilisez un principal de service, accordez-lui l’accès minimal requis pour la tâche pour laquelle il est utilisé. Par exemple, vous ne pouvez pas accorder l’accès propriétaire ou contributeur au principal de service s’il est utilisé uniquement pour la lecture du jeton d’accès pour un déploiement web.
La raison pour laquelle vous accordez l’accès le plus bas est qu’un principal de service utilise un mot de passe pour l’authentification et que le mot de passe peut être stocké dans le cadre d’un script d’automatisation. Si le mot de passe est divulgué, le fait d’avoir un accès minimal requis pour une tâche spécifique réduit au minimum l’utilisation malveillante du principal de service.
Le moyen le plus simple de créer un principal de service et de lui accorder l’accès à votre espace de travail consiste à utiliser Azure CLI. Pour créer un principal de service et lui accorder l’accès à votre espace de travail, procédez comme suit :
Notes
Vous devez être administrateur de l’abonnement pour pouvoir effectuer toutes les étapes ci-dessous.
Authentifiez-vous auprès de votre abonnement Azure :
az login
Si l’interface CLI peut ouvrir votre navigateur par défaut, elle le fait et charge une page de connexion. Dans le cas contraire, vous devez ouvrir un navigateur et suivre les instructions de la ligne de commande. Les instructions impliquent de naviguer vers https://aka.ms/devicelogin et d’entrer un code d’autorisation.
Si vous avez plusieurs abonnements Azure, vous pouvez utiliser la commande
az account set -s <subscription name or ID>
pour configurer l’abonnement. Pour plus d'informations, consultez Utiliser plusieurs abonnements Azure.Pour les autres méthodes d’authentification, consultez Se connecter avec Azure CLI.
Créez le principal de service. Dans l’exemple suivant, un principal de service nommé ml-auth est créé :
az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
Le paramètre
--json-auth
est disponible dans les versions d’Azure CLI >= 2.51.0. Les versions antérieures à celle-ci utilisent--sdk-auth
.La sortie est un document JSON similaire à ce qui suit. Prenez note des champs
clientId
,clientSecret
ettenantId
, car vous en aurez besoin pour d’autres étapes de cet article.{ "clientId": "your-client-id", "clientSecret": "your-client-secret", "subscriptionId": "your-sub-id", "tenantId": "your-tenant-id", "activeDirectoryEndpointUrl": "https://login.microsoftonline.com", "resourceManagerEndpointUrl": "https://management.azure.com", "activeDirectoryGraphResourceId": "https://graph.windows.net", "sqlManagementEndpointUrl": "https://management.core.windows.net:5555", "galleryEndpointUrl": "https://gallery.azure.com/", "managementEndpointUrl": "https://management.core.windows.net" }
Récupérez les détails du principal de service à l’aide de la valeur
clientId
retournée à l’étape précédente :az ad sp show --id your-client-id
Le code JSON ci-dessous est un exemple simplifié de sortie générée par la commande. Notez la valeur du champ
objectId
, car vous devrez l’indiquer à la prochaine étape.{ "accountEnabled": "True", "addIns": [], "appDisplayName": "ml-auth", ... ... ... "objectId": "your-sp-object-id", "objectType": "ServicePrincipal" }
Pour accorder l’accès à l’espace de travail et à d’autres ressources utilisées par Azure Machine Learning, utilisez les informations contenues dans les articles suivants :
- Comment attribuer des rôles et des actions dans Azure Machine Learning
- Guide pratique pour attribuer des rôles dans l’interface CLI
Important
L’accès propriétaire permet au principal de service d’effectuer quasiment n’importe quelle opération dans votre espace de travail. Il est utilisé dans ce document pour vous montrer comment accorder l’accès. Dans un environnement de production, Microsoft recommande d’accorder au principal de service l’accès minimal nécessaire pour qu’il puisse exécuter le rôle que vous lui donnez. Pour plus d’informations sur la création d’un rôle personnalisé avec l’accès nécessaire pour votre scénario, consultez Gérer l’accès à l’espac de travail Azure Machine Learning.
Configurer une identité managée
Important
L’identité managée n’est prise en charge que lors de l’utilisation du kit SDK Azure Machine Learning à partir d’une machine virtuelle Azure, d’un cluster de calcul Azure Machine Learning, ou d’une instance de calcul.
Identité managée avec une machine virtuelle
Activer une Identité managée affectée par le système pour les ressources Azure sur la machine virtuelle.
Dans le portail Azure, sélectionnez votre espace de travail, puis Contrôle d’accès (IAM) .
Sélectionnez Ajouter, Ajouter une attribution de rôle pour ouvrir la page Ajouter une attribution de rôle.
Sélectionnez le rôle que vous souhaitez attribuer à l’identité managée. Par exemple, Lecteur. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.
Identité managée avec cluster de calcul
Pour plus d’informations, consultez Configurer une identité managée pour un cluster de calcul.
Identité managée avec instance de calcul
Pour plus d’informations, consultez Configurer une identité managée pour une instance de calcul.
Utiliser une authentification de principal de service
S’APPLIQUE À : Kit de développement logiciel (SDK) Python azure-ai-mlv2 (préversion)
L’authentification auprès d’un principal de service utilise le package Azure Identity pour Python. La classe DefaultAzureCredential
recherche les variables d’environnement suivantes et utilise les valeurs lors de l’authentification en tant que principal de service :
AZURE_CLIENT_ID
- ID client retourné lors de la création du principal du service.AZURE_TENANT_ID
- ID de locataire retourné lors de la création du principal du service.AZURE_CLIENT_SECRET
- Mot de passe/identifiant généré pour le principal du service.
Conseil
Pendant le développement, envisagez d’utiliser le package python-dotenv pour définir ces variables d’environnement. Python-dotenv charge les variables d’environnement à partir de .env
fichiers. Le fichier standard .gitignore
pour Python exclut automatiquement les fichiers. Ils ne doivent donc pas être archivés .env
dans les dépôts github pendant le développement.
L’exemple suivant illustre l’utilisation de python-dotenv pour charger les variables d’environnement à partir d’un .env
fichier, puis l’utilisation DefaultAzureCredential
pour créer l’objet d’informations d’identification :
from dotenv import load_dotenv
if ( os.environ['ENVIRONMENT'] == 'development'):
print("Loading environment variables from .env file")
load_dotenv(".env")
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")
Une fois l’objet d’informations d’identification créé, la classe MLClient est utilisée pour la connexion à l’espace de travail. Par exemple, le code suivant utilise la méthode pour charger les from_config()
informations de connexion :
try:
ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
# NOTE: Update following workspace information to contain
# your subscription ID, resource group name, and workspace name
client_config = {
"subscription_id": "<SUBSCRIPTION_ID>",
"resource_group": "<RESOURCE_GROUP>",
"workspace_name": "<AZUREML_WORKSPACE_NAME>",
}
# write and reload from config file
import json, os
config_path = "../.azureml/config.json"
os.makedirs(os.path.dirname(config_path), exist_ok=True)
with open(config_path, "w") as fo:
fo.write(json.dumps(client_config))
ml_client = MLClient.from_config(credential=credential, path=config_path)
print(ml_client)
Le principal de service permet également de s’authentifier auprès de l’’API REST Azure Machine Learning. Vous utilisez le flux d’octroi des informations d’identification du client Microsoft Entra ID, qui permet d’effectuer des appels de service à service pour l’authentification sans affichage dans les workflows automatisés.
Important
Si vous utilisez actuellement la bibliothèque d’authentification Azure Active Directory (ADAL) pour récupérer les informations d’identification, nous vous recommandons de migrer vers la bibliothèque d’authentification Microsoft (MSAL). Le support ADAL a pris fin le 30 juin 2022.
Pour obtenir des informations et des exemples sur l’authentification avec MSAL, consultez les articles suivants :
- JavaScript - Comment migrer une application JavaScript d’ADAL.js vers MSAL.js.
- Node.js - Comment migrer une application Node.js de Microsoft Authentication Library vers MSAL
- Python - Guide de migration de Microsoft Authentication Library vers MSAL pour Python.
Utiliser l’authentification par identité managée
S’APPLIQUE À : Kit de développement logiciel (SDK) Python azure-ai-mlv2 (préversion)
L’authentification auprès d’une identité managée utilise le package Azure Identity pour Python. Pour vous authentifier à l’espace de travail à partir d’une machine virtuelle ou d’un cluster de calcul configuré avec une identité gérée, utilisez la classe DefaultAzureCredential
. Cette classe détecte automatiquement si une identité managée est utilisée et utilise l’identité managée pour s’authentifier auprès des services Azure.
L’exemple suivant illustre l’utilisation de la classe DefaultAzureCredential
pour créer l’objet d’informations d’identification, puis l’utilisation de la classe MLClient
pour se connecter à l’espace de travail :
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")
try:
ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
# NOTE: Update following workspace information to contain
# your subscription ID, resource group name, and workspace name
client_config = {
"subscription_id": "<SUBSCRIPTION_ID>",
"resource_group": "<RESOURCE_GROUP>",
"workspace_name": "<AZUREML_WORKSPACE_NAME>",
}
# write and reload from config file
import json, os
config_path = "../.azureml/config.json"
os.makedirs(os.path.dirname(config_path), exist_ok=True)
with open(config_path, "w") as fo:
fo.write(json.dumps(client_config))
ml_client = MLClient.from_config(credential=credential, path=config_path)
print(ml_client)
Utiliser l’accès conditionnel
En tant qu’administrateur, vous pouvez appliquer des stratégies d’accès conditionnel Microsoft Entra pour les utilisateurs qui se connectent à l’espace de travail. Par exemple, vous pouvez exiger l’authentification à deux facteurs ou autoriser la connexion à partir d’appareils gérés uniquement. Voici les ID d’application à utiliser pour l’accès conditionnel :
ID de l’application | Nom | Remarque |
---|---|---|
d7304df8-741f-47d3-9bc2-df0e24e2071f | Application web Azure Machine Learning Workbench | Azure Machine Learning Studio |
cb2ff863-7f30-4ced-ab89-a00194bcf6d9 | Application Azure AI Studio | Azure AI Studio |
Rechercher le principal de service
Avant d’ajouter la stratégie d’accès conditionnel, vérifiez que l’ID d’application est listé dans la section Applications d’entreprise du portail Azure :
Important
Pour effectuer les étapes de cette section, vous devez disposer de Microsoft Entra ID P2. Pour plus d’informations, consultez Gestion des licences Microsoft Entra.
Recherchez Applications d’entreprise dans le champ de recherche situé en haut du portail, puis sélectionnez l’entrée de l’application d’entreprise.
Dans Applications d’entreprise, utilisez le champ Rechercher par nom d’application ou par ID d’objet pour rechercher l’entrée à utiliser avec un accès conditionnel. Si une entrée apparaît, cela signifie qu’un principal de service existe déjà pour l’ID d’application. Ignorez le reste des étapes de cette section, puis accédez à la section Ajouter l’accès conditionnel.
Important
Le seul filtre doit être L’ID d’application commence par. Supprimez tout autre filtre présent.
Si aucune entrée n’apparaît, utilisez la cmdlet Azure PowerShell suivante afin de créer un principal de service pour l’ID d’application :
New-AzAdServicePrincipal -ApplicationId "application-ID"
Par exemple :
New-AzADServicePrincipal -ApplicationId "d7304df8-741f-47d3-9bc2-df0e24e2071f"
.Une fois que vous avez créé le principal de service, retournez à Applications d’entreprise, et vérifiez que vous pouvez désormais trouver l’ID d’application. Vous trouverez la liste des ID dans la section Utiliser l’accès conditionnel.
Ajouter l’accès conditionnel
Pour utiliser l’accès conditionnel, affectez la stratégie d’accès conditionnel à l’ID d’application. Si l’application n’apparaît pas dans l’accès conditionnel, suivez les étapes décrites dans la section Rechercher le principal de service.