Condividi tramite


Proteggere gli endpoint online gestiti con isolamento rete

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)

Nel presente articolo si descrive come utilizzare l'isolamento di rete per proteggere un endpoint online gestito. Verrà creato un endpoint online gestito che si avvale di un endpoint privato di un'area di lavoro di Azure Machine Learning per comunicazioni sicure in ingresso. Inoltre, verrà configurata l'area di lavoro con una rete virtuale gestita che consente solo comunicazioni in uscita approvate per le distribuzioni. Infine, verrà creata una distribuzione che utilizza gli endpoint privati della rete virtuale gestita dell'area di lavoro per le comunicazioni in uscita.

Per esempi che usano il metodo legacy per l'isolamento della rete, vedere i file di distribuzione deploy-moe-vnet-legacy.sh (per la distribuzione con un modello generico) e deploy-moe-vnet-mlflow-legacy.sh (per la distribuzione con un modello MLflow) nel repository GitHub azureml-examples.

Prerequisiti

  • Per usare Azure Machine Learning, è necessario avere una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.

  • Installare e configurare la Interfaccia della riga di comando di Azure e l'estensione ml dell'interfaccia della riga di comando di Azure. Per altre informazioni, vedere Installare, configurare e usare l'interfaccia della riga di comando (v2).

    Suggerimento

    La rete virtuale gestita di Azure Machine Learning è stata introdotta il 23 maggio 2023. Se si ha una versione precedente dell'estensione ml, potrebbe essere necessario aggiornarla affinché gli esempi riportati in questo articolo funzionino. Per aggiornare l'estensione, usare il comando seguente dell'interfaccia della riga di comando di Azure:

    az extension update -n ml
    
  • Gli esempi dell'interfaccia della riga di comando in questo articolo presuppongono che si usi la shell Bash (o compatibile). Ad esempio, di un sistema Linux o sottosistema Windows per Linux.

  • Si deve avere un gruppo di risorse di Azure, al quale l'utente (o l'entità servizio) deve avere l'accesso Contributor. Se l'estensione ml è stata configurata, sarà possibile avere tale gruppo di risorse.

  • Se si desidera usare un'identità gestita assegnata dall'utente per creare e gestire gli endpoint online e le distribuzioni online, l'identità deve disporre delle autorizzazioni appropriate. Per informazioni dettagliate sulle autorizzazioni necessarie, vedere Configurare l'autenticazione del servizio. Ad esempio, è necessario assegnare all'identità l'autorizzazione appropriata di controllo degli accessi in base al ruolo per Azure Key Vault.

Eseguire la migrazione dal metodo di isolamento della rete legacy alla rete virtuale gestita dell'area di lavoro

Se in precedenza è stato usato il metodo legacy per l'isolamento di rete degli endpoint online gestiti e si desidera eseguire la migrazione all'uso di una rete virtuale gestita dell'area di lavoro per proteggere gli endpoint, è possibile seguire questa procedura:

  1. Creare una nuova area di lavoro e abilitare la rete virtuale gestita. Per altre informazioni su come configurare una rete virtuale gestita per l'area di lavoro, vedere Isolamento della rete virtuale gestita dell'area di lavoro.
  2. (Facoltativo) Nell'impostazione di rete dell'area di lavoro aggiungere regole in uscita con il tipo di endpoint privati se le distribuzioni devono accedere a risorse private aggiuntive, ad eccezione dell'account di archiviazione, dell'insieme di credenziali delle chiavi di Azure e del Registro Azure Container (ACR) associate all'area di lavoro (che vengono aggiunte per impostazione predefinita).
  3. (Facoltativo) Se si intende usare i registri di Azure Machine Learning, configurare gli endpoint privati per la comunicazione in uscita con il registro, il relativo account di archiviazione e il relativo Registro Azure Container.
  4. Creare endpoint/distribuzioni online nella nuova area di lavoro. È possibile sfruttare i registri di Azure Machine Learning per distribuirli direttamente. Per altre informazioni, vedere Distribuire dal registro.
  5. Aggiornare le applicazioni richiamando gli endpoint per usare gli URI di assegnazione dei punteggi dei nuovi endpoint online.
  6. Eliminare gli endpoint online dall'area di lavoro precedente dopo la convalida.

Se non è necessario gestire i calcoli o mantenere gli endpoint e le distribuzioni online nell'area di lavoro precedente da gestire senza tempi di inattività, è sufficiente eliminare tutti i calcoli nell'area di lavoro esistente e aggiornare l'area di lavoro per abilitare la rete virtuale gestita dell'area di lavoro.

Limiti

  • Il flag v1_legacy_mode deve essere disabilitato (false) nell'area di lavoro di Azure Machine Learning. Se è abilitato, non sarà possibile creare un endpoint online gestito. Per altre informazioni, vedere Isolamento di rete con l'API v2.

  • Se l'area di lavoro di Azure Machine Learning ha un endpoint privato creato prima del 24 maggio 2022, è necessario ricreare l'endpoint privato dell'area di lavoro, prima di configurare gli endpoint online per utilizzare un endpoint privato. Per altre informazioni sulla creazione di un endpoint privato per l'area di lavoro, vedere Come configurare un endpoint privato per l'area di lavoro di Azure Machine Learning.

    Suggerimento

    Per verificare la data di creazione di un'area di lavoro, è possibile controllare le proprietà dell'area di lavoro.

    In Studio passare alla sezione Directory + Subscription + Workspace (in alto a destra in Studio), quindi selezionare View all properties in Azure Portal. Selezionare la vista JSON in alto a destra nella pagina "Panoramica", quindi scegliere la versione API più recente. Da questa pagina è possibile controllare il valore di properties.creationTime.

    In alternativa, usare az ml workspace show con CLI, my_ml_client.workspace.get("my-workspace-name") con SDK, o curl in un'area di lavoro con API REST.

  • Quando si usa l'isolamento di rete con gli endpoint online, è possibile usare le risorse associate all'area di lavoro (Registro Azure Container (ACR), l'account di archiviazione, Key Vault e Application Insights) da un gruppo di risorse diverso da quello dell'area di lavoro. Tuttavia, queste risorse devono appartenere alla stessa sottoscrizione e allo stesso tenant dell'area di lavoro.

Nota

L'isolamento di rete descritto in questo articolo si applica alle operazioni del piano dati, ovvero alle operazioni che derivano dalle richieste di punteggio (o dalla gestione del modello). Le operazioni del piano di controllo (ad esempio le richieste di creazione, aggiornamento, eliminazione o recupero delle chiavi di autenticazione) vengono inviate ad Azure Resource Manager tramite la rete pubblica.

Preparare il sistema

  1. Creare le variabili di ambiente usate in questo esempio, eseguendo i comandi seguenti. Sostituire <YOUR_WORKSPACE_NAME> con il nome che si desidera usare per l'area di lavoro. Sostituire <YOUR_RESOURCEGROUP_NAME> con il gruppo di risorse che contiene l'area di lavoro.

    Suggerimento

    Prima di creare una nuova area di lavoro, è necessario creare un gruppo di risorse di Azure che la contenga. Per altre informazioni, vedere Gestire i gruppi di risorse di Azure.

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Creare l'area di lavoro. Il parametro -m allow_only_approved_outbound configura una rete virtuale gestita per l'area di lavoro e blocca il traffico in uscita, escluse le destinazioni approvate.

    az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_only_approved_outbound
    

    In alternativa, se si vuole consentire alla distribuzione di inviare il traffico in uscita a Internet, rimuovere il commento dal codice seguente ed eseguirlo.

    # az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_internet_outbound
    

    Per altre informazioni sulla creazione di una nuova area di lavoro o per aggiornare l'area di lavoro esistente per utilizzare una rete virtuale gestita, vedere Configurare una rete virtuale gestita per consentire Internet in uscita.

    Quando l'area di lavoro viene configurata con un endpoint privato, è necessario configurare Registro Azure Container per l'area di lavoro per il livello Premium al fine di consentire l'accesso tramite l'endpoint privato. Per altre informazioni, vedere Livelli di servizio di Registro Azure Container. Inoltre, l'area di lavoro deve essere impostata con la proprietà image_build_compute, perché la creazione della distribuzione comporta la compilazione di immagini. Per altre informazioni, vedere Configurare compilazioni di immagini.

    Importante

    Quando la rete virtuale gestita dell'area di lavoro è configurata per la prima volta per un'area di lavoro, la rete non viene ancora sottoposta a provisioning. Prima di procedere alla creazione di distribuzioni online, effettuare il provisioning della rete seguendo le linee guida Effettuare manualmente il provisioning di una rete gestita. La creazione di distribuzioni online verrà rifiutata fino a quando non viene effettuato il provisioning della rete gestita.

  3. Configurare le impostazioni predefinite per l'interfaccia della riga di comando per evitare di trasmettere più volte i valori per l'area di lavoro e il gruppo di risorse.

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Clonare il repository di esempi per ottenere i file di esempio per l'endpoint e la distribuzione, quindi passare alla directory /cli del repository.

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd /cli
    

I comandi di questa esercitazione si trovano nel file deploy-managed-online-endpoint-workspacevnet.sh, nella directory cli, mentre i file di configurazione YAML si trovano nella sottodirectory endpoints/online/managed/sample/.

Creare un endpoint online gestito protetto

Per creare un endpoint online gestito protetto, creare l'endpoint nell'area di lavoro e impostare l'endpoint public_network_access su disabled per controllare le comunicazioni in ingresso. Pertanto, l'endpoint dovrà usare l'endpoint privato dell'area di lavoro per le comunicazioni in ingresso.

Poiché l'area di lavoro è stata configurata per avere una rete virtuale gestita, tutte le distribuzioni dell'endpoint useranno gli endpoint privati della rete virtuale gestita per le comunicazioni in uscita.

  1. Impostare il nome dell'endpoint.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Creare un endpoint disabilitando public_network_access per bloccare il traffico in ingresso.

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml --set public_network_access=disabled
    

    Se si disabilita l'accesso alla rete pubblica per l'endpoint, l'unico modo per richiamare l'endpoint consiste nell'uso di un endpoint privato, che possa accedere all'area di lavoro nella rete virtuale. Per altre informazioni, vedere Richieste di assegnazione dei punteggi in ingresso e configurare un endpoint privato per un'area di lavoro di Azure Machine Learning.

    In alternativa, se si desidera consentire all'endpoint di ricevere richieste di assegnazione dei punteggi da Internet, rimuovere il commento dal codice seguente ed eseguirlo.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Creare una distribuzione nella rete virtuale gestita dell'area di lavoro.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Ottenere lo stato della distribuzione.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. Testare l'endpoint con una richiesta di assegnazione dei punteggi tramite l'interfaccia della riga di comando.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Ottenere i log di distribuzione.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Se non è più necessario, eliminare l'endpoint.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Eliminare tutte le risorse create in base a questo articolo. Sostituire <resource-group-name> con il nome del gruppo di risorse usato in questo esempio:

    az group delete --resource-group <resource-group-name>
    

Risoluzione dei problemi

La creazione dell'endpoint online ha esito negativo con un messaggio V1LegacyMode == true

È possibile configurare l'area di lavoro di Azure Machine Learning per v1_legacy_mode, che disabilita le API v2. Gli endpoint online gestiti sono una funzionalità della piattaforma API v2 e non funzionano se v1_legacy_mode è abilitato per l'area di lavoro.

Per disabilitare v1_legacy_mode, vedere Isolamento rete con v2.

Importante

Rivolgersi al team di sicurezza di rete prima di disabilitare v1_legacy_mode, perché è possibile che sia stata abilitata per un motivo specifico.

La creazione dell'endpoint online con l'autenticazione basata su chiavi ha esito negativo

Usare il comando seguente per elencare le regole di rete di Azure Key Vault per l'area di lavoro. Sostituire <keyvault-name> con il nome dell'insieme di credenziali delle chiavi:

az keyvault network-rule list -n <keyvault-name>

La risposta di questo comando è simile al codice JSON seguente:

{
    "bypass": "AzureServices",
    "defaultAction": "Deny",
    "ipRules": [],
    "virtualNetworkRules": []
}

Se il valore di bypass non è AzureServices, seguire le istruzioni riportate in Configurare le impostazioni di rete dell'insieme di credenziali delle chiavi per impostarlo su AzureServices.

Le distribuzioni online hanno esito negativo con un errore di download dell'immagine

Nota

Questo problema si verifica quando si usa il metodo di isolamento rete legacy per gli endpoint online gestiti, in cui Azure Machine Learning crea una rete virtuale gestita per ciascuna distribuzione in un endpoint.

  1. Controllare se il flag egress-public-network-access è disabled per la distribuzione. Se questo flag è abilitato e la visibilità del registro contenitori è privata, questo errore è previsto.

  2. Usare il comando seguente per controllare lo stato della connessione all'endpoint privato. Sostituire <registry-name> con il nome del Registro Azure Container per la propria area di lavoro:

    az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
    

    Nel codice di risposta verificare che il campo status sia impostato su Approved. In caso contrario, usare il comando seguente per approvarlo. Sostituire <private-endpoint-name> con il nome restituito dal comando precedente.

    az network private-endpoint-connection approve -n <private-endpoint-name>
    

L'endpoint di assegnazione dei punteggi non può essere risolto

  1. Verificare che il client che emette la richiesta di punteggio sia una rete virtuale in grado di accedere all'area di lavoro di Azure Machine Learning.

  2. Usare il comando nslookup nel nome host dell'endpoint per recuperare le informazioni sull'indirizzo IP, ad esempio:

    nslookup endpointname.westcentralus.inference.ml.azure.com
    

    La risposta contiene un indirizzo che deve trovarsi nell'intervallo fornito dalla rete virtuale.

    Nota

    • Per un endpoint online Kubernetes, il nome host dell'endpoint deve essere il CName (nome di dominio) specificato nel cluster Kubernetes.
    • Se l'endpoint è HTTP, l'indirizzo IP è contenuto nell'URI dell'endpoint, che è possibile ottenere dall'interfaccia utente di Studio.
    • Per informazioni su altri modi per ottenere l'indirizzo IP dell'endpoint, vedere Endpoint online Kubernetes sicuro.
  3. Se il comando nslookup non risolve il nome host, eseguire le azioni seguenti:

Endpoint online gestiti

  1. Usare il comando seguente per verificare se esiste un record A nella zona DNS (Domain Name Server) privata per la rete virtuale.

    az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
    

    I risultati devono contenere una voce simile a *.<GUID>.inference.<region>.

  2. Se non viene restituito alcun valore di inferenza, eliminare l'endpoint privato per l'area di lavoro, quindi ricrearlo. Per altre informazioni, vedere Come configurare un endpoint privato.

  3. Se l'area di lavoro con un endpoint privato usa un server DNS personalizzato, eseguire il comando seguente per verificare che la risoluzione dal DNS personalizzato funzioni correttamente.

dig endpointname.westcentralus.inference.ml.azure.com

Endpoint online Kubernetes

  1. Controllare la configurazione DNS nel cluster Kubernetes.

  2. Controllare anche se azureml-fe funziona come previsto usando il comando seguente:

    kubectl exec -it deploy/azureml-fe -- /bin/bash
    (Run in azureml-fe pod)
    
    curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    

    Per HTTP, usare il comando seguente:

     curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    
  3. Se curl HTTPs ha esito negativo o si verifica il timeout, ma HTTP funziona, verificare se il certificato è valido.

  4. Se il processo precedente non viene risolto nel record A, verificare se la risoluzione funziona da DNS di Azure (168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    
  5. Se il comando precedente ha esito positivo, risolvere i problemi relativi al server d'inoltro condizionale per il collegamento privato nel DNS personalizzato.

Non è possibile assegnare punteggi alle distribuzioni online

  1. Eseguire il comando seguente per verificare se la distribuzione ha avuto esito positivo:

    az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}' 
    

    Se la distribuzione è stata completata correttamente, il valore di state è Succeeded.

  2. Se la distribuzione ha avuto esito positivo, usare il comando seguente per verificare che il traffico venga assegnato alla distribuzione. Sostituire <endpointname> con il nome dell'endpoint.

    az ml online-endpoint show -n <endpointname>  --query traffic
    

    La risposta di questo comando deve riportare la percentuale di traffico assegnato alle distribuzioni.

    Suggerimento

    Questo passaggio non è necessario se si usa l'intestazione azureml-model-deployment nella richiesta per specificare come destinazione questa distribuzione.

  3. Se le assegnazioni di traffico o l'intestazione della distribuzione sono impostate correttamente, usare il comando seguente per ottenere i log per l'endpoint. Sostituire <endpointname> con il nome dell'endpoint e <deploymentname> con la distribuzione.

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    
  4. Quando si invia una richiesta alla distribuzione, esaminare i log per controllare se si è verificato un problema durante l'esecuzione del codice di assegnazione dei punteggi.

Passaggi successivi