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.
S’APPLIQUE À :
Extension Azure CLI v2 (actuelle)
Kit de développement logiciel (SDK) Python azure-ai-ml v2 (version actuelle)
Cet article explique comment utiliser l’isolation réseau pour améliorer la sécurité d’un point de terminaison en ligne géré par Azure Machine Learning. L’isolation réseau permet de sécuriser la communication entrante et sortante vers et depuis votre point de terminaison.
Pour sécuriser la communication entrante, vous pouvez créer un point de terminaison en ligne managé qui utilise le point de terminaison privé d’un espace de travail Azure Machine Learning. Pour autoriser uniquement les communications sortantes approuvées pour les déploiements, vous pouvez configurer l’espace de travail avec un réseau virtuel managé. Cet article explique comment effectuer ces étapes pour améliorer la sécurité des points de terminaison. Il vous montre également comment créer un déploiement qui utilise les points de terminaison privés du réseau virtuel managé de l’espace de travail pour la communication sortante.
Si vous préférez utiliser la méthode héritée pour l’isolation réseau, consultez les exemples de fichiers de déploiement suivants dans le référentiel GitHub azureml-examples :
- Pour un déploiement qui utilise un modèle générique : deploy-moe-vnet-legacy.sh
- Pour un déploiement qui utilise un modèle MLflow : deploy-moe-vnet-mlflow-legacy.sh
Prérequis
Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Azure CLI et l’extension Azure CLI
ml, installées et configurées. Pour plus d’informations, consultez Installer et configurer l’interface CLI (v2).Conseil
La fonctionnalité de réseau virtuel managé Azure Machine Learning a été introduite le 23 mai 2023. Si vous disposez d’une version antérieure de l’extension
ml, vous devrez peut-être la mettre à jour pour que les exemples de cet article fonctionnent. Pour mettre à jour l’extension, utilisez la commande Azure CLI suivante :az extension update -n mlUn interpréteur de commandes Bash ou un interpréteur de commandes compatible, par exemple, un interpréteur de commandes sur un système Linux ou un sous-système Windows pour Linux. Les exemples Azure CLI de cet article supposent que vous utilisez ce type d’interpréteur de commandes.
Un groupe de ressources Azure dans lequel vous ou le principal de service que vous utilisez disposent d’un accès Contributeur. Pour obtenir des instructions sur la création d’un groupe de ressources, consultez Configurer.
Une identité managée affectée par l’utilisateur avec les autorisations appropriées, si vous souhaitez utiliser une identité managée pour créer et gérer des points de terminaison en ligne et des déploiements en ligne. Pour plus d’informations sur les autorisations requises, consultez Configurer l’authentification entre Azure Machine Learning et d’autres services. Par exemple, vous devez accorder à votre identité managée des autorisations de contrôle d’accès en fonction du rôle Azure (Azure RBAC) spécifiques pour Azure Key Vault.
Migrer de la méthode d’isolation réseau héritée vers un réseau virtuel géré par l’espace de travail
Si vous utilisez la méthode héritée pour l’isolation réseau des points de terminaison en ligne managés et que vous souhaitez migrer vers un réseau virtuel managé pour sécuriser vos points de terminaison, procédez comme suit :
- Créez un espace de travail et activez un réseau virtuel managé. Pour plus d’informations sur la configuration d’un réseau managé pour votre espace de travail, consultez Isolation du réseau virtuel géré par l’espace de travail.
- (Facultatif) Si vos déploiements accèdent à des ressources privées autres que stockage Azure, Key Vault et Azure Container Registry, ajoutez des règles de trafic sortant aux paramètres réseau de votre espace de travail. Plus précisément, le réseau est configuré avec des règles pour stockage Azure, Key Vault et Container Registry par défaut. Ajoutez des règles avec des points de terminaison privés pour toutes les autres ressources privées que vous utilisez.
- (Facultatif) Si vous envisagez d’utiliser un registre Azure Machine Learning, configurez des points de terminaison privés pour la communication sortante vers votre registre, son compte de stockage et son instance de Container Registry.
- Créez des points de terminaison et des déploiements en ligne dans le nouvel espace de travail. Si vous utilisez des registres Azure Machine Learning, vous pouvez déployer directement des composants à partir d’eux. Pour plus d’informations, consultez Déployer le modèle à partir du Registre vers un point de terminaison en ligne dans l’espace de travail.
- Mettez à jour les applications qui appellent des points de terminaison afin que les applications utilisent les URI de scoring des nouveaux points de terminaison en ligne.
- Après avoir validé vos nouveaux points de terminaison, supprimez les points de terminaison en ligne dans votre ancien espace de travail.
Si vous n’avez pas besoin d’éviter les temps d’arrêt pendant la migration, vous pouvez adopter une approche plus simple. Si vous n’avez pas besoin de gérer les instances de calcul, les points de terminaison en ligne et les déploiements dans votre ancien espace de travail, vous pouvez supprimer les instances de calcul, puis mettre à jour l’espace de travail pour activer un réseau virtuel managé.
Limites
L’indicateur
v1_legacy_modedoit être réglé surfalseafin de désactiver le mode hérité v1 sur votre espace de travail Azure Machine Learning. Si ce paramètre est activé, vous ne pouvez pas créer de point de terminaison en ligne managé. Pour plus d’informations, consultez la modification de l’isolation réseau avec notre nouvelle plateforme d’API sur Azure Resource Manager.Si votre espace de travail Azure Machine Learning a un point de terminaison privé créé avant le 24 mai 2022, vous devez recréer ce point de terminaison privé avant de configurer vos points de terminaison en ligne pour utiliser des points de terminaison privés. Pour plus d’informations sur la création d’un point de terminaison privé pour votre espace de travail, consultez Configurer un point de terminaison privé pour un espace de travail Azure Machine Learning.
Conseil
Pour afficher la date de création d’un espace de travail, vous pouvez vérifier les propriétés de l’espace de travail.
- Dans Azure Machine Learning Studio, accédez au coin supérieur droit et sélectionnez le nom de votre espace de travail.
- Dans la fenêtre Annuaire + Abonnement + Espace de travail, sélectionnez Afficher toutes les propriétés dans le portail Azure.
- Dans la page Vue d’ensemble du portail Azure, accédez au coin supérieur droit et sélectionnez Affichage JSON.
- Dans la fenêtre RESOURCE JSON, sous Versions d’API, sélectionnez la dernière version de l’API.
- Dans la
propertiessection du code JSON, vérifiez lacreationTimevaleur.
Vous pouvez également utiliser l’une des méthodes suivantes :
-
Kit de développement logiciel (SDK) Python :
Workspace.get(name=<workspace-name>, subscription_id=<subscription-ID>, resource_group=<resource-group-name>).get_details() -
API REST :
curl https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/?api-version=2023-10-01 -H "Authorization:Bearer <access-token>" -
PowerShell :
Get-AzMLWorkspace -Name <workspace-name> -ResourceGroupName <resource-group-name>
Lorsque vous utilisez l’isolation réseau pour sécuriser les points de terminaison en ligne, vous pouvez utiliser des ressources associées à l’espace de travail à partir d’un groupe de ressources différent de celui de votre groupe de ressources d’espace de travail. Toutefois, ces ressources doivent appartenir au même abonnement et au même locataire que votre espace de travail. Les ressources associées à un espace de travail incluent Azure Container Registry, Stockage Azure, Azure Key Vault et Application Insights.
Remarque
Cet article décrit l’isolation réseau qui s’applique aux opérations de plan de données. Ces opérations résultent de demandes de scoring ou de service de modèle. Les opérations de plan de contrôle, telles que les demandes de création, de mise à jour, de suppression ou de récupération de clés d’authentification, sont envoyées à Azure Resource Manager sur le réseau public.
Préparer votre système
Créez des variables d’environnement en exécutant les commandes suivantes. Remplacez
<resource-group-name>par le groupe de ressources de votre espace de travail. Remplacez<workspace-name>par le nom de votre espace de travail.export RESOURCEGROUP_NAME="<resource-group-name>" export WORKSPACE_NAME="<workspace-name>"Créer votre espace de travail. Le paramètre
-m allow_only_approved_outboundconfigure un réseau virtuel managé pour l’espace de travail et bloque le trafic sortant, sauf vers les destinations approuvées.az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_only_approved_outboundSinon, si vous souhaitez autoriser le déploiement à envoyer du trafic sortant vers Internet, supprimez les marques de commentaire du code suivant et exécutez-le à la place.
# az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_internet_outboundPour plus d’informations sur la création d’un espace de travail ou la mise à niveau de votre espace de travail existant pour utiliser un réseau virtuel managé, consultez Configurer un réseau virtuel managé pour autoriser le trafic sortant Internet.
Approvisionnez le réseau virtuel managé. Pour obtenir des instructions et plus d’informations, consultez Provisionner manuellement un réseau virtuel managé.
Important
Lorsque vous configurez un réseau virtuel managé pour un espace de travail pour la première fois, le réseau n’est pas approvisionné. Vous ne pouvez pas créer de déploiements en ligne tant que vous n’avez pas approvisionné le réseau managé.
Configurez le registre de conteneurs associé à l’espace de travail pour utiliser un plan tarifaire Premium. Ce paramètre est nécessaire pour fournir l’accès au Registre via un point de terminaison privé. Pour plus d’informations, consultez Niveaux de service pour Azure Container Registry.
Configurez votre espace de travail pour utiliser un cluster de calcul ou une instance de calcul pour générer des images. Vous pouvez utiliser la
image_build_computepropriété à cet effet. Pour plus d’informations et d’instructions, consultez Configurer les builds d’images.Configurez les valeurs par défaut pour Azure CLI afin que vous puissiez éviter de transmettre les valeurs de votre espace de travail et de votre groupe de ressources plusieurs fois.
az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAMEClonez le référentiel d’exemples pour obtenir les exemples de fichiers pour le point de terminaison et le déploiement, puis accédez au répertoire cli du référentiel.
git clone --depth 1 https://github.com/Azure/azureml-examples cd azureml-examples/cli
Les commandes de cet article se trouvent dans le fichier deploy-managed-online-endpoint-workspacevnet.sh dans le répertoire cli. Les fichiers de configuration YAML se trouvent dans le sous-répertoire endpoints/online/managed/sample.
Créer un point de terminaison en ligne managé sécurisé
Pour créer un point de terminaison en ligne managé sécurisé, vous créez le point de terminaison dans votre espace de travail. Ensuite, vous définissez la valeur du point de terminaison public_network_access sur disabled pour contrôler la communication entrante.
Ce paramètre force le point de terminaison en ligne à utiliser le point de terminaison privé de l’espace de travail pour la communication entrante. La seule façon d’appeler le point de terminaison en ligne consiste à utiliser un point de terminaison privé qui peut accéder à l’espace de travail dans votre réseau virtuel. Pour plus d’informations, consultez Demandes de scoring entrant sécurisées et configurer un point de terminaison privé pour un espace de travail Azure Machine Learning.
Étant donné que l’espace de travail est configuré pour avoir un réseau virtuel managé, tous les déploiements de points de terminaison utilisent les points de terminaison privés du réseau virtuel managé pour la communication sortante.
Définissez le nom du point de terminaison :
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"Créez un point de terminaison en définissant
public_network_accesssurdisabledpour bloquer le trafic entrant :Remarque
Le script référencé utilise des fichiers de configuration YAML à partir du référentiel cloné. Vérifiez que vous êtes dans le répertoire approprié (cli) après le clonage du référentiel ou fournissez le chemin complet de vos fichiers YAML. Dans Azure Cloud Shell, vérifiez que les fichiers sont accessibles dans votre stockage cloud avant d’exécuter les commandes.
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml --set public_network_access=disabledSinon, si vous souhaitez autoriser le point de terminaison à recevoir des demandes de scoring à partir d’Internet, supprimez les marques de commentaire du code suivant et exécutez-le à la place :
# az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Tester le point de terminaison
Créez un déploiement dans le réseau virtuel managé de l’espace de travail :
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-trafficSi vous recevez une erreur concernant un échec d’autorisation, vérifiez la configuration réseau du compte de stockage de l’espace de travail. Vous devrez peut-être ajuster les paramètres d’accès réseau public pour permettre à l’espace de travail d’accéder au compte de stockage.
Obtenez l’état du déploiement :
az ml online-endpoint show -n $ENDPOINT_NAMETestez le point de terminaison en émettant une demande de scoring :
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.jsonObtenez les journaux de déploiement :
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Nettoyer les ressources
Si vous n’avez plus besoin du point de terminaison, exécutez la commande suivante pour la supprimer.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-waitSi vous n’avez plus besoin de l’espace de travail, de ses ressources associées et des autres ressources de votre groupe de ressources, supprimez-les. Remplacez
<resource-group-name>par le nom du groupe de ressources qui contient votre espace de travail.az group delete --resource-group <resource-group-name>
Résolution des problèmes
Échec de la création d’un point de terminaison en ligne avec un message sur le mode hérité v1
Les points de terminaison en ligne managés sont une fonctionnalité de la plateforme d’API Azure Machine Learning v2. Si votre espace de travail Azure Machine Learning est configuré pour le mode hérité v1, les points de terminaison en ligne managés ne fonctionnent pas. Plus précisément, si le paramètre d'espace de travail v1_legacy_mode est défini sur true, le mode hérité v1 est activé et il n'y a pas de prise en charge des API v2.
Pour savoir comment désactiver le mode hérité v1, consultez la modification de l’isolation réseau avec notre nouvelle plateforme d’API sur Azure Resource Manager.
Important
Vérifiez auprès de votre équipe de sécurité réseau avant de définir v1_legacy_mode sur false, car le mode hérité v1 pourrait être activé pour une raison.
Échec de la création d’un point de terminaison en ligne avec l’authentification basée sur une clé
Utilisez la commande suivante pour répertorier les règles réseau du coffre de clés Azure pour votre espace de travail. Remplacez <key-vault-name> par le nom de votre coffre de clés.
az keyvault network-rule list -n <key-vault-name>
Cette commande retourne une réponse similaire au code JSON suivant :
{
"bypass": "AzureServices",
"defaultAction": "Deny",
"ipRules": [],
"virtualNetworkRules": []
}
Si la valeur de bypass n'est pas égal(e) à AzureServices, suivez les instructions de Configure Azure Key Vault networking settings pour la définir à AzureServices.
Échec des déploiements en ligne avec une erreur de téléchargement d’image
Remarque
Ce problème s’applique lorsque vous utilisez la méthode d’isolation réseau héritée pour les points de terminaison en ligne managés. Dans cette méthode, Azure Machine Learning crée un réseau virtuel managé pour chaque déploiement sous un point de terminaison.
Vérifiez si l'indicateur
egress-public-network-accessa une valeur dedisabledpour le déploiement. Si cet indicateur est activé et que la visibilité du registre de conteneurs est privée, cet échec est attendu.Utilisez la commande suivante pour vérifier l’état de la connexion au point de terminaison privé. Remplacez
<registry-name>par le nom du registre Azure Container Registry de votre espace de travail :az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{ID:id, status:privateLinkServiceConnectionState.status}"Dans le code de réponse, vérifiez que le champ
statusa la valeurApproved. Si la valeur n’est pasApproved, utilisez la commande suivante pour approuver la connexion. Remplacez<private-endpoint-connection-ID>par l’ID retourné par la commande précédente.az network private-endpoint-connection approve --id <private-endpoint-connection-ID> --description "Approved"
Impossible de résoudre le point de terminaison de scoring
Vérifiez que le client qui émet la requête de scoring est un réseau virtuel ayant accès à l’espace de travail Azure Machine Learning.
Utilisez la
nslookupcommande sur le nom d’hôte du point de terminaison pour récupérer les informations d’adresse IP :nslookup <endpoint-name>.<endpoint-region>.inference.ml.azure.comPar exemple, votre commande peut ressembler à celle suivante :
nslookup endpointname.westcentralus.inference.ml.azure.comLa réponse contient une adresse qui doit se trouver dans la plage fournie par le réseau virtuel.
Remarque
- Pour le point de terminaison en ligne Kubernetes, le nom d’hôte du point de terminaison doit être le nom CName (nom de domaine) spécifié dans votre cluster Kubernetes.
- Si le point de terminaison utilise HTTP, l’adresse IP est contenue dans l’URI du point de terminaison, que vous pouvez obtenir à partir de l’interface utilisateur de Studio.
- Pour plus d’informations sur l’obtention de l’adresse IP du point de terminaison, consultez Mettre à jour votre DNS avec un nom de domaine complet.
Si la
nslookupcommande ne résout pas le nom d’hôte, effectuez les actions dans l’une des sections suivantes.
Points de terminaison en ligne managés
Utilisez la commande suivante pour vérifier si un enregistrement A existe dans la zone DNS (Domain Name System) privée pour le réseau virtuel.
az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].nameLes résultats doivent contenir une entrée similaire à
*.<GUID>.inference.<region>.Si aucune valeur d’inférence n’est retournée, supprimez le point de terminaison privé de l’espace de travail, puis recréez-le. Pour plus d’informations, consultez Guide pratique pour configurer un point de terminaison privé.
Si l’espace de travail avec un point de terminaison privé utilise un serveur DNS personnalisé, exécutez la commande suivante pour vérifier que la résolution à partir du serveur DNS personnalisé fonctionne correctement :
dig <endpoint-name>.<endpoint-region>.inference.ml.azure.com
Points de terminaison en ligne Kubernetes
Vérifiez la configuration DNS dans le cluster Kubernetes.
Vérifiez si le routeur d’inférence Azure Machine Learning fonctionne
azureml-fecomme prévu. Pour effectuer cette vérification, procédez comme suit :Exécutez la commande suivante dans le
azureml-fepod :kubectl exec -it deploy/azureml-fe -- /bin/bashExécutez une des commandes suivantes :
curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"Pour HTTP, utilisez la commande suivante :
curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
Si la commande CURl HTTPS échoue ou expire, mais que la commande HTTP fonctionne, vérifiez si le certificat est valide.
Si le processus précédent ne parvient pas à se résoudre sur l’enregistrement A, utilisez la commande suivante pour vérifier si la résolution fonctionne à partir de l’adresse IP publique virtuelle Azure DNS, 168.63.129.16 :
dig @168.63.129.16 <endpoint-name>.<endpoint-region>.inference.ml.azure.comSi la commande précédente réussit, résolvez les problèmes du redirecteur conditionnel pour Azure Private Link sur un DNS personnalisé.
Les déploiements en ligne ne peuvent pas faire l’objet d’un scoring
Exécutez la commande suivante pour afficher l’état d’un déploiement qui ne peut pas être évalué :
az ml online-deployment show -e <endpoint-name> -n <deployment-name> --query '{name:name,state:provisioning_state}'La valeur
Succeededpour le champstateindique un déploiement réussi.Pour un déploiement réussi, utilisez la commande suivante pour vérifier que le trafic est affecté au déploiement :
az ml online-endpoint show -n <endpoint-name> --query trafficLa réponse de cette commande doit répertorier le pourcentage de trafic affecté à chaque déploiement.
Conseil
Cette étape n’est pas nécessaire si vous utilisez l’en-tête
azureml-model-deploymentdans votre requête pour cibler ce déploiement.Si les affectations de trafic (ou l’en-tête de déploiement) sont définies correctement, utilisez la commande suivante pour obtenir les journaux d’activité du point de terminaison.
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name>Passez en revue les journaux pour déterminer s’il existe un problème lors de l’exécution du code de scoring lorsque vous envoyez une demande au déploiement.