Condividi tramite


Come proteggere un ambiente di inferenza di Azure Machine Learning con reti virtuali (v1).

SI APPLICA A:Azure Machine Learning SDK v1 per Python

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v1

Importante

Questo articolo fornisce informazioni sull'uso di Azure Machine Learning SDK v1. SDK v1 è deprecato a partire dal 31 marzo 2025. Il supporto per questo terminerà il 30 giugno 2026. È possibile installare e usare l'SDK v1 fino a tale data.

È consigliabile passare all'SDK v2 prima del 30 giugno 2026. Per altre informazioni su SDK v2, vedere Che cos'è l'interfaccia della riga di comando di Azure Machine Learning e Python SDK v2? e il Riferimento SDK v2.

Il presente articolo spiega come proteggere gli ambienti di inferenza con una rete virtuale in Azure Machine Learning. Questo articolo riguarda in modo specifico il flusso di lavoro di distribuzione di un modello come servizio Web tramite SDK/CLI v1.

Suggerimento

Il presente articolo fa parte di una serie di articoli sulla protezione del flusso di lavoro di Azure Machine Learning. Vedere gli altri articoli della serie:

Per un'esercitazione sulla creazione di un'area di lavoro sicura, vedere Esercitazione: Creare un'area di lavoro sicura, Modello Bicep o Modello Terraform.

Il presente articolo spiega come proteggere le seguenti risorse di inferenza in una rete virtuale:

  • Cluster predefinito del servizio Azure Kubernetes
  • Cluster del servizio Azure Kubernetes privato
  • Cluster del servizio Azure Kubernetes con collegamento privato

Prerequisiti

  • Per comprendere gli scenari di rete virtuale comuni e l'architettura complessiva della rete virtuale, leggere l'articolo Panoramica della sicurezza di rete.

  • Una rete virtuale e una subnet esistenti da usare con le risorse di calcolo.

  • Per distribuire le risorse in una rete virtuale o in una subnet, il tuo account utente deve disporre delle autorizzazioni per eseguire le seguenti azioni nel controllo degli accessi in base al ruolo di Azure:

    • "Microsoft.Network/*/read" nella risorsa della rete virtuale. Questa autorizzazione non è necessaria per le distribuzioni di modelli di Azure Resource Manager (ARM).
    • "Microsoft.Network/virtualNetworks/join/action" nella risorsa della rete virtuale.
    • "Microsoft.Network/virtualNetworks/subnets/join/action" nella risorsa della subnet.

    Per altre informazioni sul controllo degli accessi in base al ruolo di Azure nella rete vedere Ruoli predefiniti di rete

Importante

Alcuni comandi dell'interfaccia della riga di comando di Azure citati in questo articolo utilizzano l'estensione azure-cli-ml, o v1, per Azure Machine Learning. Il supporto per l'estensione v1 terminerà il 30 settembre 2025. È possibile installare e utilizzare l'estensione v1 fino a tale data.

Microsoft consiglia di passare all'estensione ml, o v2, prima del 30 settembre 2025. Per altre informazioni sull'estensione v2, vedere Estensione dell'interfaccia della riga di comando di Azure Machine Learning e Python SDK v2.

Limitazioni

Istanze di Azure Container

Quando l'area di lavoro di Azure Machine Learning è configurata con un endpoint privato, la distribuzione in Istanze di Azure Container in una rete virtuale non è supportata. Provare invece a utilizzare un endpoint online gestito con isolamento di rete.

Servizio Azure Kubernetes

  • Se il cluster del servizio Azure Kubernetes si trova dietro una rete virtuale, l'area di lavoro e le relative risorse associate (archiviazione, insieme di credenziali delle chiavi, Registro Azure Container) devono disporre di endpoint privati o di endpoint di servizio nella stessa rete virtuale o di una rete virtuale come rete virtuale del cluster del servizio Azure Kubernetes. Leggi l'esercitazione creare un'area di lavoro sicura per aggiungere gli endpoint privati o gli endpoint di servizio alla tua rete virtuale.
  • Se l'area di lavoro include un endpoint privato, il cluster del servizio Azure Kubernetes deve trovarsi nella stessa area di Azure dell'area di lavoro.
  • L'utilizzo di un nome di dominio completo (FQDN) pubblico con un cluster del servizio Azure Kubernetes privatonon è supportato in Azure Machine Learning.

Servizio Azure Kubernetes

Importante

Per utilizzare un cluster del servizio Azure Kubernetes in una rete virtuale, seguire prima i prerequisiti descritti in Configurare la rete avanzata nel servizio Azure Kubernetes (AKS).

Per utilizzare il servizio Azure Kubernetes nell'area di lavoro, seguire questa procedura:

  1. Accedere a studio di Azure Machine Learning, quindi selezionare la sottoscrizione e l'area di lavoro.

  2. Selezionare Calcolo a sinistra, Cluster di inferenza al centro e successivamente selezionare + Nuovo. Infine, selezionare AksCompute.

    Screenshot della finestra di dialogo Crea cluster di inferenza.

  3. Nella finestra di dialogo Crea aksCompute selezionare Crea nuovo, Percorso e le dimensioni della macchina virtuale da utilizzare per il cluster. Infine, selezionare Avanti.

    Screenshot che mostra le impostazioni della macchina virtuale.

  4. Nella sezione Configura impostazioni immettere un Nome calcolo, selezionare Scopo del cluster, Numero di nodi e quindi selezionare Avanzato per visualizzare le impostazioni di rete. Nell'area Configura rete virtuale imposta i seguenti i valori:

    • Impostare la rete virtuale da utilizzare.

      Suggerimento

      Se l'area di lavoro utilizza un endpoint privato per connettersi alla rete virtuale, il campo per la selezione della rete virtuale è disattivato.

    • Imposta la subnet in cui creare il cluster.

    • Nel campo Intervallo di indirizzi del servizio Kubernetes immettere l'intervallo di indirizzi del servizio Kubernetes. Questo intervallo di indirizzi utilizza un indirizzo IP in notazione CIDR (Classless Inter-Domain Routing) per definire gli indirizzi IP disponibili per il cluster. Non deve sovrapporsi a nessun intervallo IP della subnet, ad esempio 10.0.0.0/16.

    • Nel campo Indirizzo IP del servizio DNS di Kubernetes immettere l'indirizzo IP del servizio DNS di Kubernetes. Questo indirizzo IP viene assegnato al servizio DNS di Kubernetes. Deve essere compreso nell'intervallo di indirizzi del servizio Kubernetes, ad esempio 10.0.0.10.

    • Nel campo Indirizzo del bridge Docker immettere l'indirizzo del bridge Docker. Questo indirizzo IP viene assegnato al bridge Docker. Non deve essere compreso in nessun intervallo IP della subnet o nell'intervallo di indirizzi del servizio Kubernetes, ad esempio 172.18.0.1/16.

    Screenshot che mostra la configurazione delle impostazioni di rete.

  5. Quando si distribuisce un modello come servizio Web nel servizio Azure Kubernetes, viene creato un endpoint di assegnazione dei punteggi per gestire le richieste di inferenza. Assicurati che il gruppo di sicurezza di rete (NSG) che controlla la rete virtuale disponga di una regola di sicurezza in ingresso abilitata per l'indirizzo IP dell'endpoint di assegnazione dei punteggi se vuoi chiamarlo dall'esterno della rete virtuale.

    Per trovare l'indirizzo IP dell'endpoint di assegnazione dei punteggi, esamina l'URI di assegnazione dei punteggi per il servizio distribuito. Per informazioni sulla visualizzazione dell'URI di assegnazione dei punteggi, vedere Utilizzare un modello distribuito come servizio Web.

    Importante

    Mantenere le regole in uscita predefinite per il gruppo di sicurezza di rete. Per altre informazioni, vedere le regole di sicurezza predefinite in Gruppi di sicurezza.

    Screenshot che mostra una regola di sicurezza in ingresso.

    Importante

    L'indirizzo IP mostrato nell'immagine per l'endpoint di assegnazione dei punteggi sarà diverso per le distribuzioni. Mentre lo stesso IP è condiviso da tutte le distribuzioni in un cluster del servizio Azure Kubernetes, ogni cluster del servizio Azure Kubernetes ha un indirizzo IP diverso.

È anche possibile utilizzare Azure Machine Learning SDK per aggiungere il servizio Azure Kubernetes in una rete virtuale. Se è già presente un cluster del servizio Azure Kubernetes in una rete virtuale, collegarlo all'area di lavoro come descritto nell'articolo relativo alla distribuzione nel servizio Azure Kubernetes. Il codice seguente crea una nuova istanza del servizio Azure Kubernetes nella subnet default di una rete virtuale denominata mynetwork:

SI APPLICA A:Azure Machine Learning SDK v1 per Python

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)

Al termine del processo di creazione, è possibile eseguire l'inferenza o il calcolo del modello in un cluster del servizio Azure Kubernetes in una rete virtuale. Per altre informazioni, vedere Come eseguire la distribuzione nel servizio Azure Kubernetes.

Per altre informazioni sull'uso del Controllo degli accessi in base al ruolo con Kubernetes, vedere Usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione di Kubernetes.

Ruolo di Collaboratore di rete

Importante

Se si crea o si collega un cluster del servizio Azure Kubernetes specificando una rete virtuale creata in precedenza, è necessario concedere all'entità servizio (SP) o all'identità gestita per il cluster del servizio Azure Kubernetes il ruolo Collaboratore di rete al gruppo di risorse che contiene la rete virtuale.

Per aggiungere l'identità come collaboratore di rete, segui questa procedura:

  1. Per trovare l’ID dell'entità servizio o dell’identità gestita per il servizio Azure Kubernetes, utilizzare i seguenti comandi dell'interfaccia della riga di comando di Azure. Sostituire <aks-cluster-name> con il nome del cluster. Sostituire <resource-group-name> con il nome del gruppo di risorse che contiene il cluster del servizio Azure Kubernetes:

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

    Se questo comando restituisce un valore di msi, usa il comando seguente per identificare l'ID principale dell'identità gestita:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. Per trovare l'ID del gruppo di risorse che contiene la rete virtuale, usa il comando seguente. Sostituisci <resource-group-name> con il nome del gruppo di risorse che contiene la rete virtuale:

    az group show -n <resource-group-name> --query id
    
  3. Per aggiungere l'entità servizio o l'identità gestita come collaboratore di rete, usa il comando seguente. Sostituisci <SP-or-managed-identity> con l'ID restituito per l'entità servizio o l'identità gestita. Sostituire <resource-group-id> con l'ID restituito per il gruppo di risorse che contiene la rete virtuale:

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

Per altre informazioni sull'uso del servizio di bilanciamento del carico interno con il servizio Azure Kubernetes, vedere l'articolo Utilizzare il servizio di bilanciamento del carico interno con il servizio Azure Kubernetes.

Protezione del traffico della rete virtuale

Esistono due modi per isolare il traffico da e verso il cluster del servizio Azure Kubernetes e la rete virtuale:

  • Cluster del servizio Azure Kubernetes privato: questo approccio utilizza il collegamento privato di Azure per proteggere le comunicazioni con il cluster per le operazioni di distribuzione/gestione.
  • Servizio di bilanciamento del carico interno del servizio Azure Kubernetes: questo approccio configura l'endpoint per le distribuzioni nel servizio Azure Kubernetes per l'uso di un indirizzo IP privato all'interno della rete virtuale.

Cluster del servizio Azure Kubernetes privato

Per impostazione predefinita, i cluster del servizio Azure Kubernetes hanno un piano di controllo o un server API con indirizzi IP pubblici. È possibile configurare il servizio Azure Kubernetes per l'uso di un piano di controllo privato creando un cluster del servizio Azure Kubernetes privato. Per altre informazioni, vedere Creare un cluster privato per il servizio Azure Kubernetes.

Dopo aver creato il cluster del servizio Azure Kubernetes privato, collegare il cluster alla rete virtuale da utilizzare con Azure Machine Learning.

Servizio di bilanciamento del carico del servizio Azure Kubernetes interno

Per impostazione predefinita, le distribuzioni del servizio Azure Kubernetes usano un servizio di bilanciamento del carico pubblico. In questa sezione viene illustrato come configurare il servizio Azure Kubernetes per l'uso di un servizio di bilanciamento del carico interno. Un servizio di bilanciamento del carico interno (o privato) viene usato solo quando gli indirizzi IP privati sono ammessi come front-end. I servizi di bilanciamento del carico interni vengono usati per bilanciare il carico all'interno di una rete virtuale.

Un bilanciamento del carico privato viene abilitato configurando il servizio Azure Kubernetes per l'uso di un bilanciamento del carico interno.

Abilitazione del bilanciamento del carico privato

Importante

Non è possibile abilitare l'indirizzo IP privato durante la creazione del cluster del servizio Azure Kubernetes in Azure Machine Learning Studio. È possibile crearne uno con un servizio di bilanciamento del carico interno quando si utilizza Python SDK o l'estensione dell'interfaccia della riga di comando di Azure per Machine Learning.

Gli esempi seguenti dimostrano come creare un nuovo cluster del servizio Azure Kubernetes con un servizio di bilanciamento del carico interno/IP privato tramite l'SDK e l'interfaccia della riga di comando:

SI APPLICA A:Azure Machine Learning SDK v1 per Python

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)

Per collegare un cluster esistente all'area di lavoro, usare i parametriload_balancer_type e load_balancer_subnet di AksCompute.attach_configuration() per configurare il servizio di bilanciamento del carico.

Per informazioni sul collegamento di un cluster, vedere Collegare un cluster del servizio Azure Kubernetes esistente.

Limitare la connettività in uscita dalla rete virtuale

Se si vogliono utilizzare le regole in uscita predefinite e limitare l'accesso in uscita della rete virtuale, è necessario consentire l'accesso al Registro Azure Container. Ad esempio, assicurarsi che i gruppi di sicurezza di rete (NSG) contengano una regola che consenta l'accesso al tag del servizio AzureContainerRegistry.RegionName dove '{RegionName} è il nome di un'area di Azure.

Passaggi successivi

Il presente articolo fa parte di una serie di articoli sulla protezione del flusso di lavoro di Azure Machine Learning. Vedere gli altri articoli della serie: