Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Python SDK azure-ai-ml v2 (corrente)
Questo articolo illustra come usare l'isolamento di rete per migliorare la sicurezza di un endpoint online gestito di Azure Machine Learning. L'isolamento della rete consente di proteggere la comunicazione in ingresso e in uscita da e verso l'endpoint.
Per proteggere la comunicazione in ingresso, è possibile creare un endpoint online gestito che usa l'endpoint privato di un'area di lavoro di Azure Machine Learning. Per consentire solo la comunicazione in uscita approvata per le distribuzioni, è possibile configurare l'area di lavoro con una rete virtuale gestita. Questo articolo illustra come eseguire questi passaggi per migliorare la sicurezza degli endpoint. Illustra anche come creare una distribuzione che usa gli endpoint privati della rete virtuale gestita dell'area di lavoro per le comunicazioni in uscita.
Se si preferisce usare il metodo legacy per l'isolamento della rete, vedere gli esempi di file di distribuzione seguenti nel repository GitHub azureml-examples :
- Per una distribuzione che usa un modello generico: deploy-moe-vnet-legacy.sh
- Per una distribuzione che usa un modello MLflow: deploy-moe-vnet-mlflow-legacy.sh
Prerequisiti
Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
L'interfaccia della riga di comando di Azure e l'estensione dell'interfaccia della riga di comando di Azure
ml
, installata e configurata. Per altre informazioni, vedere Installare e configurare l'interfaccia della riga di comando (v2).Suggerimento
La funzionalità di rete virtuale gestita di Azure Machine Learning è stata introdotta il 23 maggio 2023. Se si dispone di una versione precedente dell'estensione
ml
, potrebbe essere necessario aggiornarla per il funzionamento degli esempi in questo articolo. Per aggiornare l'estensione, usare il comando seguente dell'interfaccia della riga di comando di Azure:az extension update -n ml
Una shell Bash o una shell compatibile, ad esempio una shell in un sistema Linux o un sottosistema Windows per Linux. Gli esempi dell'interfaccia della riga di comando di Azure in questo articolo presuppongono l'uso di questo tipo di shell.
Un gruppo di risorse di Azure in cui l'utente o l'entità di servizio utilizzata dispone dell'accesso come Collaboratore. Per istruzioni sulla creazione di un gruppo di risorse, vedere Configurare.
Un'identità gestita assegnata dall'utente con autorizzazioni appropriate, se si vuole usare un'identità gestita per creare e gestire endpoint online e distribuzioni online. Per informazioni dettagliate sulle autorizzazioni necessarie, vedere Configurare l'autenticazione tra Azure Machine Learning e altri servizi. Ad esempio, è necessario attribuire alla tua identità gestita permessi specifici di controllo degli accessi basato su ruoli di Azure (Azure RBAC) per Azure Key Vault.
Eseguire la migrazione dal metodo di isolamento della rete legacy a una rete virtuale gestita dell'area di lavoro
Se si usa il metodo legacy per l'isolamento di rete degli endpoint online gestiti e si vuole eseguire la migrazione a una rete virtuale gestita per proteggere gli endpoint, seguire questa procedura:
- Creare una nuova area di lavoro e abilitare una rete virtuale gestita. Per altre informazioni su come configurare una rete gestita per l'area di lavoro, vedere Isolamento della rete virtuale gestita dell'area di lavoro.
- (Facoltativo) Se le distribuzioni accedono a risorse private diverse da Archiviazione di Azure, Key Vault e Registro Azure Container, aggiungere regole in uscita alle impostazioni di rete dell'area di lavoro. In particolare, la rete è configurata con regole per l'archiviazione Azure, Key Vault e il registro di container per impostazione predefinita. Aggiungi regole con endpoint privati per tutte le altre risorse private che utilizzi.
- (Facoltativo) Se si intende usare un registro di Azure Machine Learning, configurare gli endpoint privati per la comunicazione in uscita con il registro, il relativo account di archiviazione e l'istanza di Registro Container.
- Creare endpoint e distribuzioni online nella nuova area di lavoro. Se si usano registri di Azure Machine Learning, è possibile distribuirli direttamente da essi. Per altre informazioni, vedere Distribuire il modello dal Registro di sistema all'endpoint online nell'area di lavoro.
- Aggiornare le applicazioni che richiamano gli endpoint in modo che le applicazioni usino gli URI di assegnazione dei punteggi dei nuovi endpoint online.
- Dopo aver convalidato i nuovi endpoint, eliminare gli endpoint online nell'area di lavoro precedente.
Se non è necessario evitare tempi di inattività durante la migrazione, è possibile adottare un approccio più semplice. Se non è necessario gestire istanze di calcolo, endpoint online e distribuzioni nell'area di lavoro precedente, è possibile eliminare le istanze di calcolo e quindi aggiornare l'area di lavoro per abilitare una rete virtuale gestita.
Limiti
Il
v1_legacy_mode
flag deve essere impostato sufalse
per disattivare la modalità legacy v1 nell'area di lavoro di Azure Machine Learning. Se questa impostazione è attivata, non è possibile creare un endpoint online gestito. Per altre informazioni, vedere Modifica dell'isolamento della rete con la nuova piattaforma API in Azure Resource Manager.Se l'area di lavoro di Azure Machine Learning ha un endpoint privato creato prima del 24 maggio 2022, è necessario ricreare l'endpoint privato prima di configurare gli endpoint online per l'uso degli endpoint privati. Per altre informazioni sulla creazione di un endpoint privato per l'area di lavoro, vedere Configurare un endpoint privato per un'area di lavoro di Azure Machine Learning.
Suggerimento
Per visualizzare la data di creazione di un'area di lavoro, è possibile controllare le proprietà dell'area di lavoro.
- In Azure Machine Learning Studio passare all'angolo superiore destro e selezionare il nome dell'area di lavoro.
- Nella finestra Directory + Sottoscrizione e area di lavoro selezionare Visualizza tutte le proprietà nel portale di Azure.
- Nella pagina Panoramica del portale di Azure passare all'angolo superiore destro e selezionare Visualizzazione JSON.
- Nella finestra Resource JSON, sotto API Versions, selezionare la versione più recente dell'API.
- Nella sezione
properties
del codice JSON, controllare il valorecreationTime
.
In alternativa, usare uno dei metodi seguenti:
-
Python SDK:
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>
Quando si usa l'isolamento di rete per proteggere gli endpoint online, è possibile usare le risorse associate all'area di lavoro da un gruppo di risorse diverso rispetto al gruppo di risorse dell'area di lavoro. Tuttavia, queste risorse devono appartenere alla stessa sottoscrizione e allo stesso tenant dell'area di lavoro. Le risorse associate a un'area di lavoro includono Registro Azure Container, Archiviazione di Azure, Azure Key Vault e Application Insights.
Nota
Questo articolo descrive l'isolamento di rete applicabile alle operazioni del piano dati. Queste operazioni derivano dall'assegnazione di punteggi alle richieste 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 variabili di ambiente eseguendo i comandi seguenti. Sostituire
<resource-group-name>
con il gruppo di risorse per l'area di lavoro. Sostituire<workspace-name>
con il nome dell'area di lavoro.export RESOURCEGROUP_NAME="<resource-group-name>" export WORKSPACE_NAME="<workspace-name>"
Crea la tua 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 su come creare una nuova area di lavoro o aggiornare l'area di lavoro esistente per l'uso di una rete virtuale gestita, vedere Configurare una rete virtuale gestita per consentire internet in uscita.
Configurare la rete virtuale gestita. Per istruzioni e altre informazioni, vedere Effettuare manualmente il provisioning di una rete virtuale gestita.
Importante
Quando si configura una rete virtuale gestita per un'area di lavoro per la prima volta, la rete non viene sottoposta a provisioning. Non è possibile creare distribuzioni online finché non si effettua il provisioning della rete gestita.
Configurare il registro contenitori associato all'area di lavoro per usare un piano tariffario Premium. Questa impostazione è necessaria per fornire l'accesso al Registro di sistema tramite un endpoint privato. Per altre informazioni, vedere Livelli di servizio di Registro Azure Container.
Configurare l'area di lavoro per usare un cluster di calcolo o un'istanza di calcolo per compilare immagini. A questo scopo, è possibile utilizzare la
image_build_compute
proprietà . Per altre informazioni e istruzioni, vedere Configurare le compilazioni di immagini.Configurare i valori predefiniti per l'interfaccia della riga di comando di Azure in modo da evitare di passare 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 dell'interfaccia della riga di comando del repository.
git clone --depth 1 https://github.com/Azure/azureml-examples cd azureml-examples/cli
I comandi in questo articolo si trovano nel file deploy-managed-online-endpoint-workspacevnet.sh nella directory CLI. 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. Impostare quindi il valore dell'endpoint public_network_access
su disabled
per controllare la comunicazione in ingresso.
Questa impostazione forza l'endpoint online a usare l'endpoint privato dell'area di lavoro per la comunicazione in ingresso. L'unico modo per richiamare l'endpoint online consiste nell'usare un endpoint privato che può accedere all'area di lavoro nella rete virtuale. Per altre informazioni, vedere Proteggere le richieste di assegnazione dei punteggi in ingresso e Configurare un endpoint privato per un'area di lavoro di Azure Machine Learning.
Poiché l'area di lavoro è configurata per avere una rete virtuale gestita, tutte le distribuzioni di endpoint usano gli endpoint privati della rete virtuale gestita per la comunicazione in uscita.
Impostare il nome dell'endpoint:
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Creare un endpoint con
public_network_access
impostato sudisabled
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
In alternativa, se si vuole 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
Testare l'endpoint
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
Se viene visualizzato un errore di autorizzazione, controllare la configurazione di rete per l'account di archiviazione dell'area di lavoro. Potrebbe essere necessario modificare le impostazioni di accesso alla rete pubblica per concedere all'area di lavoro l'accesso all'account di archiviazione.
Ottenere lo stato della distribuzione:
az ml online-endpoint show -n $ENDPOINT_NAME
Testare l'endpoint inviando una richiesta di assegnazione dei punteggi:
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
Pulire le risorse
Se l'endpoint non è più necessario, eseguire il comando seguente per eliminarlo.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Se l'area di lavoro non è più necessaria, le risorse associate e le altre risorse nel gruppo di risorse, eliminarle. Sostituire
<resource-group-name>
con il nome del gruppo di risorse che contiene l'area di lavoro.az group delete --resource-group <resource-group-name>
Risoluzione dei problemi
La creazione dell'endpoint online ha esito negativo e viene visualizzato un messaggio sulla modalità legacy v1
Gli endpoint online gestiti sono una funzionalità della piattaforma API di Azure Machine Learning v2. Se l'area di lavoro di Azure Machine Learning è configurata per la modalità legacy v1, gli endpoint online gestiti non funzionano. In particolare, se l'impostazione dell'area v1_legacy_mode
di lavoro è impostata su true
, la modalità legacy v1 è attivata e non è disponibile alcun supporto per le API v2.
Per informazioni su come disattivare la modalità legacy v1, vedere Modifica dell'isolamento della rete con la nuova piattaforma API in Azure Resource Manager.
Importante
Consultare il team di sicurezza di rete prima di impostare v1_legacy_mode
su false
, perché la modalità legacy v1 potrebbe essere attivata per un motivo.
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 <key-vault-name>
con il nome del Key Vault.
az keyvault network-rule list -n <key-vault-name>
La risposta di questo comando è simile al codice JSON seguente:
{
"bypass": "AzureServices",
"defaultAction": "Deny",
"ipRules": [],
"virtualNetworkRules": []
}
Se il valore di bypass
non è AzureServices
, utilizzare le indicazioni in Configurare le impostazioni di rete di Azure Key Vault per impostarlo su AzureServices
.
Le distribuzioni online hanno esito negativo con un errore di download dell'immagine
Nota
Questo problema si applica quando si usa il metodo di isolamento della rete legacy per gli endpoint online gestiti. In questo metodo Azure Machine Learning crea una rete virtuale gestita per ogni distribuzione in un endpoint.
Controllare se il flag
egress-public-network-access
ha un valore didisabled
per la distribuzione. Se questo flag è abilitato e la visibilità del registro contenitori è privata, questo errore è previsto.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'].{ID:id, status:privateLinkServiceConnectionState.status}"
Nel codice di risposta verificare che il campo
status
sia impostato suApproved
. Se il valore non èApproved
, usare il comando seguente per approvare la connessione. Sostituire<private-endpoint-connection-ID>
con l'ID restituito dal comando precedente.az network private-endpoint-connection approve --id <private-endpoint-connection-ID> --description "Approved"
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
nslookup
comando sul nome host dell'endpoint per recuperare le informazioni sull'indirizzo IP:nslookup <endpoint-name>.<endpoint-region>.inference.ml.azure.com
Ad esempio, il comando potrebbe essere simile al seguente:
nslookup endpointname.westcentralus.inference.ml.azure.com
La risposta contiene un indirizzo che deve trovarsi nell'intervallo fornito dalla rete virtuale.
Nota
- Per l'endpoint online Kubernetes, la denominazione host dell'endpoint deve essere il CName (nome di dominio) specificato nel cluster Kubernetes.
- Se l'endpoint usa HTTP, l'indirizzo IP è contenuto nell'URI dell'endpoint, che è possibile ottenere dall'interfaccia utente di Studio.
- Per altri modi per ottenere l'indirizzo IP dell'endpoint, vedere Aggiornare il DNS con un nome di dominio completo.
Se il
nslookup
comando non risolve il nome host, eseguire le azioni in una delle sezioni seguenti.
Endpoint online gestiti
Usare il comando seguente per verificare se esiste un record A nella zona DNS (Domain Name System) 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>
.Se non viene restituito alcun valore di inferenza, eliminare l'endpoint privato per l'area di lavoro e quindi ricrearlo. Per altre informazioni, vedere Come configurare un endpoint privato.
Se l'area di lavoro con un endpoint privato usa un server DNS personalizzato, eseguire il comando seguente per verificare che la risoluzione del server DNS personalizzato funzioni correttamente:
dig <endpoint-name>.<endpoint-region>.inference.ml.azure.com
Endpoint online Kubernetes
Controllare la configurazione DNS nel cluster Kubernetes.
Controllare se il router di inferenza di Azure Machine Learning,
azureml-fe
, funziona come previsto. Per eseguire questo controllo, seguire questa procedura:Eseguire il comando seguente nel
azureml-fe
pod:kubectl exec -it deploy/azureml-fe -- /bin/bash
Eseguire uno dei comandi riportati di seguito:
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"
Se il comando CURL HTTPS ha esito negativo o si verifica il timeout, ma il comando HTTP funziona, verificare se il certificato è valido.
Se il processo precedente non riesce a risolvere il record A, usare il comando seguente per verificare se la risoluzione funziona dall'indirizzo IP pubblico virtuale DNS di Azure, 168.63.129.16:
dig @168.63.129.16 <endpoint-name>.<endpoint-region>.inference.ml.azure.com
Se il comando precedente ha esito positivo, risolvere i problemi relativi al server d'inoltro condizionale per il collegamento privato di Azure in un DNS personalizzato.
Non è possibile assegnare punteggi alle distribuzioni online
Eseguire il comando seguente per visualizzare lo stato di una distribuzione a cui non è possibile assegnare un punteggio:
az ml online-deployment show -e <endpoint-name> -n <deployment-name> --query '{name:name,state:provisioning_state}'
Un valore di
Succeeded
per ilstate
campo indica una distribuzione riuscita.Per una distribuzione corretta, usare il comando seguente per verificare che il traffico sia assegnato alla distribuzione:
az ml online-endpoint show -n <endpoint-name> --query traffic
La risposta di questo comando deve elencare la percentuale di traffico assegnato a ogni distribuzione.
Suggerimento
Questo passaggio non è necessario se si usa l'intestazione
azureml-model-deployment
nella richiesta per specificare come destinazione questa distribuzione.Se le assegnazioni di traffico o l'intestazione di distribuzione sono impostate correttamente, usare il comando seguente per ottenere i log per l'endpoint:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name>
Esaminare i log per verificare se si è verificato un problema durante l'invio di una richiesta alla distribuzione.