Share via


Utiliser des identités managées avec l’interface CLI Azure Machine Learning v1

S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

S’APPLIQUE À :extension Azure CLI ml v1

Les identités managées vous permettent de configurer votre espace de travail avec les autorisations minimales requises pour accéder aux ressources.

Pour configurer un espace de travail Azure Machine Learning de manière fiable, il est important de s’assurer que les différents services associés à l’espace de travail disposent du niveau d’accès correct. Par exemple, pendant le workflow Machine Learning, l’espace de travail doit accéder à Azure Container Registry (ACR) pour les images Docker et aux comptes de stockage pour les données de formation.

En outre, les identités managées permettent un contrôle affiné des autorisations, par exemple, vous pouvez accorder à un registre ACR spécifique l’accès à des ressources de calcul particulières, ou le révoquer.

Cet article explique comment utiliser les identités managées pour :

  • Configurer et utiliser ACR pour votre espace de travail Azure Machine Learning sans avoir à activer l’accès utilisateur administrateur à ACR.
  • Accéder à un ACR privé externe à votre espace de travail, pour extraire des images de base à des fins de formation ou d’inférence.
  • Créer un espace de travail avec une identité managée affectée par l’utilisateur pour accéder aux ressources associées.

Prérequis

Configurer des identités managées

Dans certains cas, il est nécessaire d’interdire l’accès utilisateur administrateur à Azure Container Registry. Par exemple, il se peut que le registre ACR soit partagé et que vous deviez interdire l’accès administrateur à d’autres utilisateurs. Ou encore, une stratégie de niveau d’abonnement n’autorise pas la création d’un ACR avec accès utilisateur administrateur activé.

Important

Lors de l’utilisation d’Azure Machine Learning pour l’inférence sur Azure Container Instance (ACI), l’accès utilisateur administrateur sur ACR est requis. Ne le désactivez pas si vous envisagez de déployer des modèles dans ACI pour l’inférence.

Lorsque vous créez un ACR sans activer l’accès utilisateur administrateur, les identités managées sont utilisées pour accéder à l’ACR afin de créer et d’extraire des images Docker.

Vous pouvez utiliser votre propre ACR avec accès utilisateur administrateur désactivé lorsque vous créez l’espace de travail. Vous pouvez également laisser Azure Machine Learning créer un ACR d’espace de travail et désactiver l’accès utilisateur administrateur par la suite.

Utiliser votre propre ACR

Si l’accès utilisateur administrateur pour ACR n’est pas autorisé par la stratégie d’abonnement, vous devez d’abord créer l’ACR sans accès utilisateur administrateur, puis l’associer à l’espace de travail. En outre, si vous avez déjà un ACR avec accès utilisateur administrateur désactivé, vous pouvez le joindre à l’espace de travail.

Créez un ACR à partir d’Azure CLI sans définir d’argument --admin-enabled, ou à partir du portail Azure sans activer l’accès utilisateur administrateur. Ensuite, lors de la création de l’espace de travail Azure Machine Learning, spécifiez l’ID de ressource Azure de l’ACR. L’exemple suivant illustre la création d’un nouvel espace de travail Azure Machine Learning qui utilise un ACR existant :

Conseil

Pour obtenir la valeur du paramètre --container-registry , utilisez la commande az acr show pour afficher des informations pour votre ACR. Le champ id contient l’ID de ressource de votre ACR.

az ml workspace create -w <workspace name> \
-g <workspace resource group> \
-l <region> \
--container-registry /subscriptions/<subscription id>/resourceGroups/<acr resource group>/providers/Microsoft.ContainerRegistry/registries/<acr name>

Laisser Azure Machine Learning Service créer un ACR d’espace de travail

Si vous n’utilisez pas votre propre ACR, le service Azure Machine Learning en crée un pour vous lorsque vous effectuez une opération qui en a besoin. Par exemple, soumettre un cycle de formation à Capacité de calcul Machine Learning, construire un environnement ou déployer un point de terminaison de service Web. L’ACR créé par l’espace de travail aura l’accès utilisateur administrateur activé et vous devrez le désactiver manuellement.

  1. Créer un espace de travail

    az ml workspace show -n <my workspace> -g <my resource group>
    
  2. Effectuez une action qui requiert ACR. Par exemple, le didacticiel sur l’apprentissage d’un modèle.

  3. Faites créer le nom ACR par le cluster :

    az ml workspace show -w <my workspace> \
    -g <my resource group>
    --query containerRegistry
    

    Cette commande retourne une valeur semblable au texte suivant. Vous souhaitez uniquement la dernière partie du texte, c’est-à-dire le nom de l’instance ACR :

    /subscriptions/<subscription id>/resourceGroups/<my resource group>/providers/MicrosoftContainerReggistry/registries/<ACR instance name>
    
  4. Mettez à jour l’ACR pour désactiver l’accès utilisateur administrateur :

    az acr update --name <ACR instance name> --admin-enabled false
    

Créez une instance de calcul avec une identité managée pour accéder aux images Docker pour la formation

Pour accéder à l’ACR d’espace de travail, créez un cluster de calcul Machine Learning avec l’identité managée attribuée par le système activée. Vous pouvez activer l’identité à partir du portail Azure ou de Studio lors de la création d’une instance de calcul, ou à partir d’Azure CLI en utilisant les informations ci-dessous. Pour plus d’informations, consultez Utiliser l’identité managée avec des clusters de calcul.

Lorsque vous créez un cluster de calcul avec AmlComputeProvisioningConfiguration, utilisez le paramètre identity_type pour définir le type d’identité managée.

Une identité managée reçoit automatiquement le rôle ACRPull dans l’ACR d’espace de travail pour lui permettre d’extraire des images Docker pour la formation.

Notes

Si vous créez d’abord l’instance de calcul, avant l’ACR d’espace de travail, vous devez attribuer le rôle ACRPull manuellement.

Accéder aux images de base à partir d’un ACR privé

Par défaut, Azure Machine Learning utilise les images de base Docker qui proviennent d’un référentiel public géré par Microsoft. Il génère ensuite votre environnement de formation ou d’inférence sur ces images. Pour plus d’informations, consultez Que sont les environnements ML ?.

Pour utiliser une image de base personnalisée interne à votre entreprise, vous pouvez utiliser des identités managées pour accéder à votre ACR privé. Il existe deux cas d’utilisation :

  • Utilisez l’image de base pour la formation en l’état.
  • Créez une image managée Azure Machine Learning avec une image personnalisée comme base.

Extrayez l’image de base Docker vers le cluster de calcul Machine Learning pour la formation en l’état

Créez un cluster de calcul Machine Learning avec l’identité managée attribuée par le système activée, comme décrit plus haut. Ensuite, déterminez l’ID du principal de l’identité managée.

S’APPLIQUE À :Extension Azure ML CLI v1

az ml computetarget amlcompute identity show --name <cluster name> -w <workspace> -g <resource group>

Éventuellement, vous pouvez mettre à jour le cluster de calcul pour attribuer une identité managée attribuée par l’utilisateur :

S’APPLIQUE À :Extension Azure ML CLI v1

az ml computetarget amlcompute identity assign --name <cluster name> \
-w $mlws -g $mlrg --identities <my-identity-id>

Pour permettre au cluster de calcul d’extraire les images de base, accordez le rôle ACRPull de l’identité du service managé sur l’ACR privé

az role assignment create --assignee <principal ID> \
--role acrpull \
--scope "/subscriptions/<subscription ID>/resourceGroups/<private ACR resource group>/providers/Microsoft.ContainerRegistry/registries/<private ACR name>"

Enfin, lors de la soumission d’une exécution d’entraînement , spécifiez l’emplacement de l’image de base dans la définition de l’environnement.

S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

from azureml.core import Environment
env = Environment(name="private-acr")
env.docker.base_image = "<ACR name>.azurecr.io/<base image repository>/<base image version>"
env.python.user_managed_dependencies = True

Important

Pour vous assurer que l’image de base est directement extraite dans la ressource de calcul, définissez user_managed_dependencies = True et ne spécifiez pas de fichier Dockerfile. Dans le cas contraire, Azure Machine Learning Service tentera de créer une nouvelle image Docker et échouera, car seul le cluster de calcul a accès à l’extraction de l’image de base à partir d’ACR.

Créer un environnement managé Azure Machine Learning dans l’image de base de l’ACR privé pour la formation ou l’inférence

S’APPLIQUE À :Extension Azure ML CLI v1

Dans ce scénario, Azure Machine Learning Service crée l’environnement de formation ou d’inférence en plus d’une image de base que vous fournissez à partir d’un ACR privé. Étant donné que la tâche de création d’image s’effectue dans l’ACR d’espace de travail à l’aide d’ACR Tasks, vous devez effectuer des étapes supplémentaires pour autoriser l’accès.

  1. Créez une identité managée attribuée par l’utilisateur et accordez-lui l’accès ACRPull sur l’ACR privé.

  2. Accordez à l’identité managée attribuée par le système de l’espace de travail un rôle Opérateur de l’identité managée sur l’identité managée attribuée par l’utilisateur de l’étape précédente. Ce rôle permet à l’espace de travail d’attribuer l’identité managée attribuée par l’utilisateur à ACR Task pour la création de l’environnement managé.

    1. Obtenez l’ID du principal de l’identité managée attribuée par le système de l’espace de travail :

      az ml workspace show -w <workspace name> -g <resource group> --query identityPrincipalId
      
    2. Accordez le rôle Opérateur de l’identité managée :

      az role assignment create --assignee <principal ID> --role managedidentityoperator --scope <user-assigned managed identity resource ID>
      

      L’ID de ressource d’identité managée affectée par l'utilisateur est l’ID de ressource Azure de l’identité attribuée par l’utilisateur, au format /subscriptions/<subscription ID>/resourceGroups/<resource group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned managed identity name>.

  3. Spécifiez l’ID client et l’ACR externe de l’identité managée attribuée par l’utilisateur dans les connexions de l’espace de travail à l’aide de la méthode Workspace.set_connection :

    S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

    workspace.set_connection(
        name="privateAcr", 
        category="ACR", 
        target = "<acr url>", 
        authType = "RegistryConnection", 
        value={"ResourceId": "<user-assigned managed identity resource id>", "ClientId": "<user-assigned managed identity client ID>"})
    
  4. Une fois la configuration terminée, vous pouvez utiliser les images de base de l’ACR privé lors de la création d’environnements pour la formation ou l’inférence. L’extrait de code suivant montre comment spécifier l’image de base ACR et le nom de l’image dans une définition d’environnement :

    S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

    from azureml.core import Environment
    
    env = Environment(name="my-env")
    env.docker.base_image = "<acr url>/my-repo/my-image:latest"
    

    Vous pouvez éventuellement spécifier l’URL de ressource d’identité managée et l’ID de client dans la définition d’environnement proprement dite à l’aide de RegistryIdentity. Si vous utilisez l’identité de registre de manière explicite, elle remplace toutes les connexions d’espace de travail spécifiées précédemment :

    S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

    from azureml.core.container_registry import RegistryIdentity
    
    identity = RegistryIdentity()
    identity.resource_id= "<user-assigned managed identity resource ID>"
    identity.client_id="<user-assigned managed identity client ID>"
    env.docker.base_image_registry.registry_identity=identity
    env.docker.base_image = "my-acr.azurecr.io/my-repo/my-image:latest"
    

Utiliser des Images Docker pour l’inférence

Une fois que vous avez configuré ACR sans accès utilisateur administrateur comme décrit plus haut, vous pouvez accéder aux images Docker pour l’inférence sans clés d’administration à partir de votre instance Azure Kubernetes Service (AKS). Lorsque vous créez ou joignez AKS à l’espace de travail, le principal de service du cluster se voit automatiquement attribuer l’accès ACRPull à l’ACR d’espace de travail.

Notes

Si vous utilisez votre propre cluster AKS, le cluster doit avoir le principal de service activé au lieu de l’identité managée.

Créer un espace de travail avec une identité managée affectée par l’utilisateur

Lorsque vous créez un espace de travail, vous pouvez spécifier votre propre identité managée affectée par l’utilisateur qui sera utilisée pour accéder aux ressources associées : ACR, Key Vault, Stockage et App Insights.

Important

Lorsque vous créez un espace de travail avec une identité managée affectée par l’utilisateur, vous devez vous-même créer les ressources associées et accorder les rôles d’identité managée sur ces ressources. Utilisez le modèle ARM d’attribution de rôle pour effectuer les attributions.

Utilisez Azure CLI ou le SDK Python pour créer l’espace de travail. Si vous utilisez l’interface CLI, spécifiez l’ID à l’aide du paramètre --primary-user-assigned-identity. Si vous utilisez le SDK, utilisez primary_user_assigned_identity. Voici des exemples d’utilisation d’Azure CLI et de Python en vue de créer un espace de travail à l’aide des paramètres suivants :

Azure CLI

S’APPLIQUE À :Extension Azure ML CLI v1

az ml workspace create -w <workspace name> -g <resource group> --primary-user-assigned-identity <managed identity ARM ID>

Python

S’APPLIQUE À :Kit de développement logiciel (SDK) Python azureml v1

from azureml.core import Workspace

ws = Workspace.create(name="workspace name", 
    subscription_id="subscription id", 
    resource_group="resource group name",
    primary_user_assigned_identity="managed identity ARM ID")

Vous pouvez également utiliser un modèle ARM pour créer un espace de travail avec une identité managée affectée par l’utilisateur.

Pour un espace de travail disposant de clés gérées par le client pour le chiffrement, vous pouvez passer une identité managée affectée par l’utilisateur pour vous authentifier auprès de Key Vault à partir du stockage. Utilisez l’argument user-assigned-identity-for-cmk-encryption (CLI) ou l’argument user_assigned_identity_for_cmk_encryption (SDK) pour passer l’identité managée. Cette identité managée peut être identique ou différente de celle de l’utilisateur principal de l’espace de travail.

Étapes suivantes