Partager via


Configurer l’authentification pour des ressources et workflows Azure Machine Learning à l’aide du kit SDK v1

S’APPLIQUE À : SDK Python azureml v1

Découvrez comment configurer l’authentification à votre espace de travail Azure Machine Learning. 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’authentification Azure CLI est utilisée pendant l’expérimentation et le développement itératif ou en cas de besoin d’un processus automatisé d’authentification auprès du service à l’aide d’une session pré-authentifiée. 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 sur une 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 et instances 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.

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.

Vous devez faire pivoter régulièrement les secrets tels que le mot de passe 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é gérée n’est prise en charge que lors de l’utilisation du kit de développement logiciel (SDK) Azure Machine Learning à partir d’une machine virtuelle Azure ou d’un cluster ou d’une instance de calcul Azure Machine Learning.

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. Attribuez le rôle suivant. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.

    Paramètre Valeur
    Role Rôle que vous voulez attribuer.
    Attribuer l’accès à Identité managée
    Membres Identité managée que vous avez créée précédemment

    Page Ajouter une attribution de rôle dans le portail Azure.

Identité managée avec cluster de calcul

Pour plus d’informations, consultez Configurer une identité managée pour un cluster de calcul.

Utiliser l’authentification interactive

Important

L’authentification interactive utilise votre navigateur et nécessite des cookies (notamment des cookies tiers). Si vous avez désactivé les cookies, vous risquez de recevoir un message d’erreur tel que « Nous n’avons pas pu vous connecter ». Cette erreur peut également se produire si vous avez activé l’authentification multifacteur Microsoft Entra.

La plupart des exemples de la documentation et des exemples utilisent l’authentification interactive. Par exemple, lors de l’utilisation du SDK, deux appels de fonction vous invitent automatiquement à utiliser un flux d’authentification basée sur l’interface utilisateur :

  • L’appel de la fonction from_config() génère l’invite.

    from azureml.core import Workspace
    ws = Workspace.from_config()
    

    La fonction from_config() recherche un fichier JSON contenant les informations de connexion à votre espace de travail.

  • Lorsque vous utilisez le constructeur Workspace pour fournir des informations sur l’abonnement, le groupe de ressources et l’espace de travail, vous êtes également invité à effectuer une authentification interactive.

    ws = Workspace(subscription_id="your-sub-id",
                  resource_group="your-resource-group-id",
                  workspace_name="your-workspace-name"
                  )
    

Conseil

Si vous avez accès à plusieurs locataires, vous devrez peut-être importer la classe et définir explicitement le locataire ciblé. L’appel du constructeur pour InteractiveLoginAuthentication génère également une invite de connexion comme avec les appels montrés ci-dessus.

from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="your-tenant-id")

Lors de l’utilisation de l’interface de ligne de commande Azure, la commande az login est utilisée pour authentifier la session de l’interface de ligne de commande. Pour plus d’informations, consultez Prise en main d’Azure CLI.

Conseil

Si vous utilisez le kit de développement logiciel (SDK) à partir d’un environnement auquel vous vous êtes précédemment authentifié de façon interactive à l’aide de l’interface de ligne de commande Azure, vous pouvez utiliser la classe AzureCliAuthentication pour vous authentifier à l’espace de travail à l’aide des informations d’identification mises en cache par l’interface de ligne de commande :

from azureml.core.authentication import AzureCliAuthentication
cli_auth = AzureCliAuthentication()
ws = Workspace(subscription_id="your-sub-id",
               resource_group="your-resource-group-id",
               workspace_name="your-workspace-name",
               auth=cli_auth
               )

Utiliser une authentification de principal de service

Pour vous authentifier sur votre espace de travail à partir du SDK, à l’aide d’un principal de service, utilisez le constructeur de classe ServicePrincipalAuthentication. Utilisez les valeurs que vous avez obtenues lors de la création du fournisseur de services en tant que paramètres. Les paramètres tenant_id, service_principal_id et service_principal_password sont respectivement mappés aux valeurs tenantId, clientIdet clientSecret notées plus haut.

from azureml.core.authentication import ServicePrincipalAuthentication

sp = ServicePrincipalAuthentication(tenant_id="your-tenant-id", # tenantID
                                    service_principal_id="your-client-id", # clientId
                                    service_principal_password="your-client-secret") # clientSecret

La variable sp contient maintenant un objet d’authentification que vous utilisez directement dans le SDK. En règle générale, il est conseillé de stocker les ID/secrets utilisés ci-dessus dans des variables d’environnement, comme dans ce code. Le stockage dans des variables d’environnement empêche l’archivage accidentel des informations dans un dépôt GitHub.

import os

sp = ServicePrincipalAuthentication(tenant_id=os.environ['AML_TENANT_ID'],
                                    service_principal_id=os.environ['AML_PRINCIPAL_ID'],
                                    service_principal_password=os.environ['AML_PRINCIPAL_PASS'])

Pour les workflows automatisés qui s’exécutent dans Python et utilisent principalement le SDK, vous pouvez utiliser cet objet tel quel dans la plupart des cas d’authentification. Le code suivant effectue l’authentification auprès de votre espace de travail à l’aide de l’objet d’authentification que vous avez créé.

from azureml.core import Workspace

ws = Workspace.get(name="ml-example",
                   auth=sp,
                   subscription_id="your-sub-id",
                   resource_group="your-rg-name")
ws.get_details()

Utiliser l’authentification par identité managée

Pour vous authentifier à l’espace de travail à partir d’une machine virtuelle ou d’un cluster ou d’une instance de calcul avec une identité gérée, utilisez la classe MsiAuthentication. L’exemple suivant montre comment utiliser cette classe pour s’authentifier à un espace de travail :

from azureml.core.authentication import MsiAuthentication

msi_auth = MsiAuthentication()

ws = Workspace(subscription_id="your-sub-id",
                resource_group="your-resource-group-id",
                workspace_name="your-workspace-name",
                auth=msi_auth
                )

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