Sécuriser un environnement d’inférence Azure Machine Learning à l’aide de réseaux virtuels (v1)

S’APPLIQUE À : SDK Python azureml v1

S’APPLIQUE À : Extension ml Azure CLI v1

Dans cet article, vous allez apprendre à sécuriser les environnements d’inférence à l’aide d’un réseau virtuel dans Azure Machine Learning. Cet article est spécifique au workflow de déploiement Kit de développement logiciel (SDK)/CLI v1 d’un modèle en tant que service web.

Conseil

Cet article fait partie d’une série sur la sécurisation d’un workflow Azure Machine Learning. Consultez les autres articles de cette série :

Pour obtenir un tutoriel sur la création d’un espace de travail sécurisé, consultez le Tutoriel : Créer un espace de travail sécurisé ou les articles Modèle Bicep ou Modèle Terraform.

Dans cet article, vous découvrirez comment sécuriser les ressources de calcul d’inférence dans un réseau virtuel :

  • Un cluster Azure Kubernetes Service (AKS) par défaut
  • Cluster AKS privé
  • Cluster AKS avec liaison privée

Prérequis

  • Lisez l’article Vue d’ensemble de la sécurité réseau pour comprendre les scénarios courants des réseaux virtuels et l’architecture globale des réseaux virtuels.

  • Un réseau virtuel et un sous-réseau existants à utiliser avec vos ressources de calcul.

  • Pour déployer des ressources dans un réseau virtuel ou un sous-réseau, votre compte d’utilisateur doit disposer d’autorisations pour les actions suivantes dans le contrôle d’accès en fonction du rôle Azure (Azure RBAC) :

    • « Microsoft.Network/*/read » sur la ressource de réseau virtuel. Cette autorisation n’est pas nécessaire pour les déploiements de modèles Azure Resource Manager (ARM).
    • « Microsoft.Network/virtualNetworks/join/action » sur la ressource de réseau virtuel.
    • "Microsoft.Network/virtualNetworks/subnets/join/action" sur la ressource de sous-réseau.

    Pour plus d’informations sur Azure RBAC avec la mise en réseau, consultez Rôles intégrés pour la mise en réseau.

Important

Certaines des commandes Azure CLI de cet article utilisent l’extension azure-cli-ml, ou v1, pour Azure Machine Learning. La prise en charge de l’extension v1 se termine le 30 septembre 2025. Vous pourrez installer et utiliser l’extension v1 jusqu’à cette date.

Nous vous recommandons de passer à l’extension ml, ou v2, avant le 30 septembre 2025. Pour plus d’informations sur l’extension v2, consultez Extension Azure ML CLI et le SDK Python v2.

Limites

Azure Container Instances

Lorsque votre espace de travail Azure Machine Learning est configuré avec un point de terminaison privé, le déploiement sur Azure Container Instances dans un réseau virtuel n’est pas pris en charge. Au lieu de cela, envisagez d’utiliser un point de terminaison en ligne managé avec l’isolation réseau.

Azure Kubernetes Service

  • Si votre cluster AKS se trouve derrière un réseau virtuel, votre espace de travail et ses ressources associées (stockage, coffre de clés, Azure Container Registry) doivent avoir des points de terminaison privés ou des points de terminaison de service dans le même réseau virtuel que le réseau virtuel du cluster AKS. Lisez le tutoriel Créer un espace de travail sécurisé pour ajouter ces points de terminaison privés ou points de terminaison de service à votre réseau virtuel.
  • Si votre espace de travail a un point de terminaison privé, le cluster Azure Kubernetes Service doit se trouver dans la même région Azure que l’espace de travail.
  • L’utilisation d’un nom de domaine complet (FQDN) public avec un cluster AKS privé n’est pas prise en charge avec Azure Machine Learning.

Azure Kubernetes Service

Important

Pour utiliser un cluster AKS dans un réseau virtuel, suivez d’abord les prérequis indiqués dans Configurer un réseau avancé dans AKS (Azure Kubernetes Service).

Pour ajouter AKS sur un réseau virtuel à votre espace de travail, effectuez les étapes suivantes :

  1. Connectez-vous à Azure Machine Learning Studio, puis sélectionnez votre abonnement et votre espace de travail.

  2. Sélectionnez Calcul sur la gauche, Clusters d’inférence à partir du centre, puis sélectionnez + Nouveau. Enfin, sélectionnez AksCompute.

    Capture d’écran de la boîte de dialogue Créer un cluster d’inférence.

  3. Dans la boîte de dialogue Créer AksCompute, sélectionnez Créer, la Localisation ainsi que la taille de machine virtuelle à utiliser pour le cluster. Enfin, sélectionnez Suivant.

    Capture d’écran des paramètres de machine virtuelle.

  4. Dans la section Configurer les paramètres, entrez un nom de calcul, sélectionnez l’objectif du cluster, le nombre de nœuds, puis sélectionnez Avancé pour afficher les paramètres réseau. Dans la zone Configurer le réseau virtuel, définissez les valeurs suivantes :

    • Définissez le réseau virtuel à utiliser.

      Conseil

      Si votre espace de travail utilise un point de terminaison privé pour se connecter au réseau virtuel, le champ de sélection Réseau virtuel est grisé.

    • Définissez le sous-réseau dans lequel créer le cluster.

    • Dans le champ Plage d’adresses du service Kubernetes, entrez la plage d’adresses du service Kubernetes. Cette plage d’adresses utilise une plage d’adresses IP de notation CIDR (Classless Inter-Domain Routing) pour définir les adresses IP disponibles pour le cluster. Elle ne doit empiéter sur aucune plage d’adresses IP de sous-réseau (par exemple, 10.0.0.0/16).

    • Dans le champ Plage d’adresses IP du service DNS Kubernetes, entrez l’adresse IP du service DNS Kubernetes. Cette adresse IP est affectée au service DNS Kubernetes. Elle doit se situer dans la plage d’adresses du service Kubernetes (par exemple, 10.0.0.10).

    • Dans le champ Adresse du pont Docker, entrez l’adresse du pont Docker. Cette adresse IP est affectée au pont Docker. Elle ne doit appartenir à aucune plage d’adresses IP de sous-réseau, ni à la plage d’adresses du service Kubernetes (par exemple, 172.18.0.1/16).

    Capture d’écran de la configuration des paramètres réseau.

  5. Quand vous déployez un modèle en tant que service web sur AKS, un point de terminaison de scoring est créé pour gérer les demandes d’inférence. Vérifiez que le groupe de sécurité réseau (NSG) qui contrôle le réseau virtuel dispose d’une règle de sécurité du trafic entrant activée pour l’adresse IP du point de terminaison de scoring si vous souhaitez l’appeler en dehors du réseau virtuel.

    Pour trouver l’adresse IP du point de terminaison de scoring, examinez l’URI de scoring pour le service déployé. Pour plus d’informations sur l’affichage de l’URI de scoring, consultez Consommer un modèle déployé en tant que service web.

    Important

    Conservez les règles de trafic sortant par défaut pour le groupe de sécurité réseau. Pour plus d’informations, consultez les règles de sécurité par défaut dans Groupes de sécurité.

    Capture d’écran montrant une règle de sécurité entrante.

    Important

    L’adresse IP indiquée dans l’image pour le point de terminaison de scoring est différente pour vos déploiements. Bien que la même adresse IP soit partagée par tous les déploiements sur un cluster AKS, chaque cluster AKS a une adresse IP différente.

Vous pouvez également utiliser le SDK Azure Machine Learning pour ajouter Azure Kubernetes Service dans un réseau virtuel. Si vous avez déjà un cluster AKS dans un réseau virtuel, attachez-le à l’espace de travail comme décrit dans Comment déployer dans AKS. Le code suivant crée une instance Azure Kubernetes Service dans le sous-réseau default d’un réseau virtuel nommé mynetwork :

S’APPLIQUE À : SDK Python azureml v1

from azureml.core.compute import ComputeTarget, AksCompute

# Create the compute configuration and set virtual network information
config = AksCompute.provisioning_configuration(location="eastus2")
config.vnet_resourcegroup_name = "mygroup"
config.vnet_name = "mynetwork"
config.subnet_name = "default"
config.service_cidr = "10.0.0.0/16"
config.dns_service_ip = "10.0.0.10"
config.docker_bridge_cidr = "172.17.0.1/16"

# Create the compute target
aks_target = ComputeTarget.create(workspace=ws,
                                  name="myaks",
                                  provisioning_configuration=config)

Une fois le processus de création terminé, vous pouvez effectuer une inférence, ou un scoring de modèle, sur un cluster AKS derrière un réseau virtuel. Pour plus d’informations, consultez Guide pratique pour déployer sur AKS.

Pour plus d'informations sur l'utilisation du contrôle d'accès en fonction du rôle avec Kubernetes, consultez Utiliser Azure RBAC pour l'autorisation Kubernetes.

Rôle du contributeur de réseau

Important

Si vous créez ou attachez un cluster AKS en fournissant un réseau virtuel que vous avez précédemment créé, vous devez accorder au principal de service ou à l’identité managée de votre cluster AKS le rôle de contributeur de réseau sur le groupe de ressources contenant le réseau virtuel.

Pour ajouter l’identité en tant que contributeur de réseau, procédez comme suit :

  1. Pour rechercher le principal de service ou l’ID d’identité managée pour AKS, utilisez les commandes Azure CLI suivantes. Remplacez <aks-cluster-name> par le nom du cluster. Remplacez <resource-group-name> par le nom du groupe de ressources contenant le cluster AKS :

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query servicePrincipalProfile.clientId
    

    Si cette commande renvoie la valeur msi, utilisez la commande suivante pour identifier l’ID du principal de service pour l’identité managée :

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. Pour rechercher l’ID du groupe de ressources contenant votre réseau virtuel, utilisez la commande suivante. Remplacez <resource-group-name> par le nom du groupe de ressources contenant le réseau virtuel :

    az group show -n <resource-group-name> --query id
    
  3. Pour ajouter le principal de service ou l’identité managée en tant que contributeur de réseau, utilisez la commande suivante. Remplacez <SP-or-managed-identity> par l’ID renvoyé pour le principal de service ou l’identité managée. Remplacez <resource-group-id> par l’ID renvoyé pour le groupe de ressources contenant le réseau virtuel.

    az role assignment create --assignee <SP-or-managed-identity> --role 'Network Contributor' --scope <resource-group-id>
    

Pour plus d’informations sur l’utilisation de l’équilibreur de charge interne avec AKS, consultez Utiliser un équilibreur de charge interne avec Azure Kubernetes Service (AKS).

Sécuriser le trafic de réseau virtuel

Il existe deux approches pour isoler le trafic vers et depuis le cluster AKS en direction du réseau virtuel :

  • Cluster AKS privé : Cette approche utilise Azure Private Link pour sécuriser les communications avec le cluster pour les opérations de déploiement et de gestion.
  • Équilibreur de charge AKS interne : Cette approche configure le point de terminaison de vos déploiements sur AKS pour utiliser une adresse IP privée dans le réseau virtuel.

Cluster AKS privé

Les clusters AKS par défaut ont un plan de contrôle (ou un serveur d’API) avec des adresses IP publiques. Vous pouvez configurer AKS pour utiliser un plan de contrôle privé en créant un cluster AKS privé. Pour plus d’informations, consultez Créer un cluster Azure Kubernetes Service privé.

Après avoir créé le cluster AKS privé, attachez le cluster au réseau virtuel à utiliser avec Azure Machine Learning.

Équilibreur de charge AKS interne

Par défaut, les déploiements AKS utilisent un équilibreur de charge public. Dans cette section, vous allez apprendre à configurer AKS pour utiliser un équilibreur de charge interne. Un équilibreur de charge interne (ou privé) est utilisé lorsque des adresses IP privées sont autorisées uniquement au niveau du serveur front-end. Les équilibreurs de charge internes sont utilisés pour équilibrer la charge du trafic au sein d’un réseau virtuel

Un équilibreur de charge privé est activé en configurant AKS pour utiliser un équilibreur de charge interne.

Activer l’équilibreur de charge privé

Important

Vous ne pouvez pas activer une adresse IP privée lors de la création du cluster Azure Kubernetes Service dans le studio Azure Machine Learning. Vous pouvez en créer un avec un équilibreur de charge interne lors de l’utilisation du SDK Python ou de l’extension d’Azure CLI pour le Machine Learning.

Les exemples suivants montrent comment créer un cluster AKS avec une adresse IP privée/un équilibreur de charge interne à l’aide du SDK et de l’interface de ligne de commande :

S’APPLIQUE À : SDK Python azureml v1

import azureml.core
from azureml.core.compute import AksCompute, ComputeTarget

# Verify that cluster does not exist already
try:
    aks_target = AksCompute(workspace=ws, name=aks_cluster_name)
    print("Found existing aks cluster")

except:
    print("Creating new aks cluster")

    # Subnet to use for AKS
    subnet_name = "default"
    # Create AKS configuration
    prov_config=AksCompute.provisioning_configuration(load_balancer_type="InternalLoadBalancer")
    # Set info for existing virtual network to create the cluster in
    prov_config.vnet_resourcegroup_name = "myvnetresourcegroup"
    prov_config.vnet_name = "myvnetname"
    prov_config.service_cidr = "10.0.0.0/16"
    prov_config.dns_service_ip = "10.0.0.10"
    prov_config.subnet_name = subnet_name
    prov_config.load_balancer_subnet = subnet_name
    prov_config.docker_bridge_cidr = "172.17.0.1/16"

    # Create compute target
    aks_target = ComputeTarget.create(workspace = ws, name = "myaks", provisioning_configuration = prov_config)
    # Wait for the operation to complete
    aks_target.wait_for_completion(show_output = True)

Lorsque vous attachez un cluster existant à votre espace de travail, utilisez les load_balancer_type et load_balancer_subnet de AksCompute.attach_configuration() pour configurer l’équilibreur de charge.

Pour plus d’informations sur l’attachement d’un cluster, consultez Attacher un cluster AKS existant.

Limitez la connectivité sortante à partir du réseau virtuel

Si vous ne souhaitez pas utiliser les règles de trafic sortant par défaut et souhaitez limiter l’accès sortant de votre réseau virtuel, vous devez autoriser l’accès à Azure Container Registry. Par exemple, assurez-vous que vos groupes de sécurité réseau (NSG) contiennent une règle qui autorise l’accès à l’étiquette de service AzureContainerRegistry.RegionName, où {RegionName} correspond au nom d’une région Azure.

Étapes suivantes

Cet article fait partie d’une série sur la sécurisation d’un workflow Azure Machine Learning. Consultez les autres articles de cette série :