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 iniziare, è necessario avere una sottoscrizione di Azure, un'interfaccia della riga di comando o un SDK, per interagire con l'area di lavoro di Azure Machine Learning e le entità correlate, oltre che l'autorizzazione appropriata.
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 l'uso della 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'estensioneml
è 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.
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 selezionareView 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 diproperties.creationTime
.In alternativa, usare
az ml workspace show
con CLI,my_ml_client.workspace.get("my-workspace-name")
con SDK, ocurl
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
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>"
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.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
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.
Impostare il nome dell'endpoint.
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
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
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
Ottenere lo stato della distribuzione.
az ml online-endpoint show -n $ENDPOINT_NAME
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
Ottenere i log di distribuzione.
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Se non è più necessario, eliminare l'endpoint.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
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
L'area di lavoro di Azure Machine Learning può essere configurata per v1_legacy_mode
, questo 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.
Importante
Rivolgersi al team della sicurezza di rete prima di disabilitare v1_legacy_mode
. Potrebbe essere stato abilitato dal team della sicurezza di rete per un motivo preciso.
Per informazioni su come disabilitare v1_legacy_mode
, vedere Isolamento rete con v2.
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 documento 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.
Controllare se il flag
egress-public-network-access
è disabilitato per la distribuzione. Se questo flag è abilitato e la visibilità del registro contenitori è privata, è previsto questo errore.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 documento di risposta verificare che il campo
status
sia impostato suApproved
. Se non è approvato, 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
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.
Usare il comando
nslookup
nel nome host dell'endpoint per recuperare le informazioni sull'indirizzo IP:nslookup endpointname.westcentralus.inference.ml.azure.com
La risposta contiene un indirizzo. Questo indirizzo deve trovarsi nell'intervallo specificato 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 si tratta di un endpoint HTTP, l'indirizzo IP sarà contenuto nell'URI dell'endpoint che si può ottenere direttamente nell'interfaccia utente di Studio. Altri modi per ottenere l'indirizzo IP dell'endpoint sono disponibili in Endpoint online Kubernetes sicuro.
Se il nome host non viene risolto dal comando
nslookup
:Per l'endpoint online gestito,
Controllare se esiste un record A nella zona DNS privata per la rete virtuale.
Per controllare i record, usare il comando seguente:
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>
.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.
Se l'area di lavoro con un endpoint privato viene configurata usando un DNS personalizzato (Come usare l'area di lavoro con un server DNS personalizzato), usare il comando seguente per verificare se la risoluzione funziona correttamente dal DNS personalizzato.
dig endpointname.westcentralus.inference.ml.azure.com
Per l'endpoint online Kubernetes,
Controllare la configurazione DNS nel cluster Kubernetes.
Inoltre, per verificare se azureml-fe funziona come previsto, usare 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
curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
Se curl HTTP ha esito negativo (ad esempio, timeout) ma HTTP funziona, controllare la validità del certificato.
Se il problema non viene risolto per il record A, verificare se la risoluzione funziona dal DNS di Azure(168.63.129.16).
dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
Se l'operazione ha esito positivo, è possibile risolvere i problemi relativi al server d'inoltro condizionale per il collegamento privato nel DNS personalizzato.
Non è possibile assegnare punteggi alle distribuzioni online
Usare il comando seguente per verificare se la distribuzione è stata eseguita correttamente:
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
saràSucceeded
.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
Suggerimento
Questo passaggio non è necessario se si usa l'intestazione
azureml-model-deployment
nella richiesta per specificare come destinazione questa distribuzione.La risposta di questo comando deve riportare la percentuale di traffico assegnato alle distribuzioni.
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>
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
- Isolamento rete con endpoint online gestiti
- Isolamento rete gestito dall'area di lavoro
- Esercitazione: Come creare un'area di lavoro sicura
- Implementazione sicura per gli endpoint online
- Accedere alle risorse di Azure con un endpoint online e un'identità gestita
- Risolvere i problemi di distribuzione degli endpoint online gestiti