Configurer l’authentification pour des ressources et workflows Azure Machine Learning

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (préversion)

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 est utilisé lorsque vous avez besoin d’un processus automatisé pour l’authentification auprès du service, sans intervention 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 ne l’utilise pas, alors qu’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

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.

Après avoir créé les comptes Microsoft Entra, consultez Gérer l’accès à l’espace de travail Azure Machine Learning pour plus d’informations sur l’octroi à ceux-ci de l’accès à l’espace de travail ainsi que sur d’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.

Voici 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 se connecter à 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.

  1. Authentifiez-vous auprès de votre abonnement Azure :

    az login
    

    Si l’interface CLI peut ouvrir votre navigateur par défaut, elle le fera et chargera une page de connexion par la même occasion. 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.

  2. 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 utilisent --sdk-auth.

    Vous devez obtenir une sortie JSON semblable à ce qui suit. Notez les valeurs des champs clientId, clientSecretet tenantId, car vous en aurez besoin pour certaines étapes ultérieures dans 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"
    }
    
  3. 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"
    }
    
  4. 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 :

    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

  1. Activer une Identité managée affectée par le système pour les ressources Azure sur la machine virtuelle.

  2. Dans le portail Azure, sélectionnez votre espace de travail, puis Contrôle d’accès (IAM) .

  3. Sélectionnez Ajouter, Ajouter une attribution de rôle pour ouvrir la page Ajouter une attribution de rôle.

  4. 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 se connecter à 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 :

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. Pour utiliser l’accès conditionnel aux espaces de travail Azure Machine Learning spécifiquement, attribuez la stratégie d’accès conditionnel à l’application se nommant Azure Machine Learning. L’ID d’application est 0736f41a-0425-bdb5-1563eff02385.

Étapes suivantes