Skydda dina hanterade onlineslutpunkter med nätverksisolering
GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)
I den här artikeln använder du nätverksisolering för att skydda en hanterad onlineslutpunkt. Du skapar en hanterad onlineslutpunkt som använder en privat slutpunkt för en Azure Machine Learning-arbetsyta för säker inkommande kommunikation. Du konfigurerar också arbetsytan med ett hanterat virtuellt nätverk som endast tillåter godkänd utgående kommunikation för distributioner. Slutligen skapar du en distribution som använder de privata slutpunkterna i arbetsytans hanterade virtuella nätverk för utgående kommunikation.
Exempel som använder den äldre metoden för nätverksisolering finns i distributionsfilerna deploy-moe-vnet-legacy.sh (för distribution med hjälp av en allmän modell) och deploy-moe-vnet-mlflow-legacy.sh (för distribution med en MLflow-modell) på GitHub-lagringsplatsen azureml-examples.
Förutsättningar
Om du vill använda Azure Machine Learning måste du ha en Azure-prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning idag.
Installera och konfigurera Azure CLI och
ml
tillägget till Azure CLI. Mer information finns i Installera, konfigurera och använda CLI (v2).Dricks
Azure Machine Learning managed virtual network introducerades den 23 maj 2023. Om du har en äldre version av ml-tillägget kan du behöva uppdatera den för att exemplen i den här artikeln ska fungera. Om du vill uppdatera tillägget använder du följande Azure CLI-kommando:
az extension update -n ml
CLI-exemplen i den här artikeln förutsätter att du använder Bash-gränssnittet (eller det kompatibla). Till exempel från ett Linux-system eller Windows-undersystem för Linux.
Du måste ha en Azure-resursgrupp där du (eller tjänstens huvudnamn du använder) måste ha
Contributor
åtkomst. Du har en sådan resursgrupp om du har konfigurerat tilläggetml
.Om du vill använda en användartilldelad hanterad identitet för att skapa och hantera onlineslutpunkter och onlinedistributioner bör identiteten ha rätt behörigheter. Mer information om de behörigheter som krävs finns i Konfigurera tjänstautentisering. Du måste till exempel tilldela rätt RBAC-behörighet för Azure Key Vault på identiteten.
Migrera från äldre nätverksisoleringsmetod till arbetsytehanterat virtuellt nätverk
Om du tidigare har använt den äldre metoden för nätverksisolering av hanterade onlineslutpunkter och vill migrera till att använda ett hanterat virtuellt nätverk på arbetsytan för att skydda dina slutpunkter kan du följa dessa steg:
- Skapa en ny arbetsyta och aktivera hanterat virtuellt nätverk. Mer information om hur du konfigurerar ett hanterat nätverk för din arbetsyta finns i Arbetsytans hanterade virtuella nätverksisolering.
- (Valfritt) I nätverksinställningen för arbetsytan lägger du till regler för utgående trafik med typen av privata slutpunkter om dina distributioner behöver komma åt ytterligare privata resurser, förutom Lagringskonto, Azure Key Vault och Azure Container Registry (ACR) som är associerade med arbetsytan (som läggs till som standard).
- (Valfritt) Om du tänker använda Azure Machine Learning-register konfigurerar du privata slutpunkter för utgående kommunikation till ditt register, dess lagringskonto och dess Azure Container Registry.
- Skapa onlineslutpunkter/distributioner på den nya arbetsytan. Du kan använda Azure Machine Learning-register för att distribuera direkt från dem. Mer information finns i Distribuera från registret.
- Uppdatera program som anropar slutpunkter för att använda bedömnings-URI:er för de nya onlineslutpunkterna.
- Ta bort onlineslutpunkter från den gamla arbetsytan efter valideringen.
Om du inte behöver underhålla beräkningar eller behålla onlineslutpunkter och distributioner på den gamla arbetsytan för att fungera utan driftstopp kan du helt enkelt ta bort alla beräkningar i den befintliga arbetsytan och uppdatera arbetsytan för att aktivera arbetsytans hanterade virtuella nätverk.
Begränsningar
Flaggan
v1_legacy_mode
måste vara inaktiverad (falskt) på din Azure Machine Learning-arbetsyta. Om flaggan är aktiverad kan du inte skapa någon hanterad onlineslutpunkt. Mer information finns i Nätverksisolering med v2 API.Om din Azure Machine Learning-arbetsyta har en privat slutpunkt som skapades före den 24 maj 2022 måste du återskapa arbetsytans privata slutpunkt innan du konfigurerar dina onlineslutpunkter för att använda en privat slutpunkt. Mer information om hur du skapar en privat slutpunkt för din arbetsyta finns i Konfigurera en privat slutpunkt för Azure Machine Learning-arbetsytan.
Dricks
Om du vill bekräfta när en arbetsyta skapades kan du kontrollera egenskaperna för arbetsytan.
I Studio går du till avsnittet
Directory + Subscription + Workspace
(längst upp till höger i Studio) och väljerView all properties in Azure Portal
. Välj JSON-vyn längst upp till höger på sidan Översikt och välj sedan den senaste API-versionen. På den här sidan kan du kontrollera värdetproperties.creationTime
för .Du kan också använda
az ml workspace show
med CLI,my_ml_client.workspace.get("my-workspace-name")
med SDK ellercurl
på en arbetsyta med REST API.När du använder nätverksisolering med onlineslutpunkter kan du använda arbetsyterelaterade resurser (Azure Container Registry (ACR), Lagringskonto, Key Vault och Application Insights) från en annan resursgrupp än din arbetsyta. Dessa resurser måste dock tillhöra samma prenumeration och klientorganisation som din arbetsyta.
Kommentar
Nätverksisolering som beskrivs i den här artikeln gäller för dataplansåtgärder, d.v.s. åtgärder som beror på bedömningsbegäranden (eller modellhantering). Kontrollplansåtgärder (till exempel begäranden om att skapa, uppdatera, ta bort eller hämta autentiseringsnycklar) skickas till Azure Resource Manager via det offentliga nätverket.
Förbereda systemet
Skapa de miljövariabler som används i det här exemplet genom att köra följande kommandon. Ersätt
<YOUR_WORKSPACE_NAME>
med namnet som ska användas för din arbetsyta. Ersätt<YOUR_RESOURCEGROUP_NAME>
med den resursgrupp som ska innehålla din arbetsyta.Dricks
Innan du skapar en ny arbetsyta måste du skapa en Azure-resursgrupp som ska innehålla den. Mer information finns i Hantera Azure-resursgrupper.
export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>" export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
Skapa din arbetsyta. Parametern
-m allow_only_approved_outbound
konfigurerar ett hanterat virtuellt nätverk för arbetsytan och blockerar utgående trafik förutom till godkända mål.az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_only_approved_outbound
Om du vill tillåta distributionen att skicka utgående trafik till Internet kan du också avkommenteras följande kod och köra den i stället.
# az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_internet_outbound
Mer information om hur du skapar en ny arbetsyta eller uppgraderar din befintliga arbetsyta för att använda ett hanterat virtuellt nätverk finns i Konfigurera ett hanterat virtuellt nätverk för att tillåta utgående Internet.
När arbetsytan har konfigurerats med en privat slutpunkt måste Azure Container Registry för arbetsytan konfigureras för Premium-nivån för att tillåta åtkomst via den privata slutpunkten. Mer information finns i Azure Container Registry-tjänstnivåer (ACR). Arbetsytan bör också anges med
image_build_compute
egenskapen eftersom distributionsskapande innebär att avbildningar skapas. Mer information finns i Konfigurera avbildningsversioner .Viktigt!
När arbetsytans hanterade virtuella nätverk konfigureras för en arbetsyta för första gången etableras inte nätverket ännu. Innan du fortsätter att skapa onlinedistributioner etablerar du nätverket genom att följa riktlinjen Manuellt etablera ett hanterat nätverk. Skapandet av onlinedistributioner avvisas tills det hanterade nätverket har etablerats.
Konfigurera standardvärdena för CLI så att du kan undvika att skicka in värdena för din arbetsyta och resursgrupp flera gånger.
az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
Klona exempellagringsplatsen för att hämta exempelfilerna för slutpunkten och distributionen och gå sedan till lagringsplatsens
/cli
katalog.git clone --depth 1 https://github.com/Azure/azureml-examples cd /cli
Kommandona i den här självstudien finns i filen deploy-managed-online-endpoint-workspacevnet.sh
i cli
katalogen och YAML-konfigurationsfilerna finns i underkatalogen endpoints/online/managed/sample/
.
Skapa en skyddad hanterad onlineslutpunkt
Skapa en skyddad hanterad onlineslutpunkt genom att skapa slutpunkten på din arbetsyta och ange slutpunktens public_network_access
till disabled
för att styra inkommande kommunikation. Slutpunkten måste sedan använda arbetsytans privata slutpunkt för inkommande kommunikation.
Eftersom arbetsytan är konfigurerad för att ha ett hanterat virtuellt nätverk använder alla distributioner av slutpunkten de privata slutpunkterna i det hanterade virtuella nätverket för utgående kommunikation.
Ange slutpunktens namn.
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Skapa en slutpunkt med
public_network_access
inaktiverad för att blockera inkommande trafik.az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml --set public_network_access=disabled
Om du inaktiverar åtkomst till offentligt nätverk för slutpunkten är det enda sättet att anropa slutpunkten att använda en privat slutpunkt, som kan komma åt arbetsytan, i ditt virtuella nätverk. Mer information finns i skydda inkommande bedömningsbegäranden och konfigurera en privat slutpunkt för en Azure Machine Learning-arbetsyta.
Om du vill tillåta att slutpunkten tar emot bedömningsbegäranden från Internet kan du också avkommentara följande kod och köra den i stället.
# az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Skapa en distribution i arbetsytans hanterade virtuella nätverk.
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
Hämta status för distributionen.
az ml online-endpoint show -n $ENDPOINT_NAME
Testa slutpunkten med en bedömningsbegäran med hjälp av CLI.
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Hämta distributionsloggar.
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Ta bort slutpunkten om du inte längre behöver den.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Ta bort alla resurser som skapats i den här artikeln. Ersätt
<resource-group-name>
med namnet på resursgruppen som används i det här exemplet:az group delete --resource-group <resource-group-name>
Felsökning
Det går inte att skapa en onlineslutpunkt med ett V1LegacyMode == sant meddelande
Du kan konfigurera Azure Machine Learning-arbetsytan för v1_legacy_mode
, som inaktiverar v2-API:er. Hanterade onlineslutpunkter är en funktion i v2 API-plattformen och fungerar inte om v1_legacy_mode
är aktiverat för arbetsytan.
Om du vill inaktivera läser v1_legacy_mode
du Nätverksisolering med v2.
Viktigt!
Kontakta nätverkssäkerhetsteamet innan du inaktiverar v1_legacy_mode
, eftersom de kan ha aktiverat det av en anledning.
Det går inte att skapa en onlineslutpunkt med nyckelbaserad autentisering
Använd följande kommando för att visa nätverksreglerna för Azure-nyckelvalvet för din arbetsyta. Ersätt <keyvault-name>
med namnet på ditt nyckelvalv:
az keyvault network-rule list -n <keyvault-name>
Svaret för det här kommandot liknar följande JSON-kod:
{
"bypass": "AzureServices",
"defaultAction": "Deny",
"ipRules": [],
"virtualNetworkRules": []
}
Om värdet för inte AzureServices
är använder du vägledningen i Konfigurera nätverksinställningar för nyckelvalvet för att ange det till AzureServices
.bypass
Onlinedistributioner misslyckas med ett nedladdningsfel för avbildningen
Kommentar
Det här problemet gäller när du använder den äldre metoden för nätverksisolering för hanterade onlineslutpunkter, där Azure Machine Learning skapar ett hanterat virtuellt nätverk för varje distribution under en slutpunkt.
Kontrollera om
egress-public-network-access
flaggan ärdisabled
för distributionen. Om den här flaggan är aktiverad och synligheten för containerregistret är privat förväntas det här felet.Använd följande kommando för att kontrollera statusen för den privata slutpunktsanslutningen. Ersätt
<registry-name>
med namnet på Azure-containerregistret för din arbetsyta:az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
I svarskoden kontrollerar du att fältet är inställt på
status
Approved
. Annars använder du följande kommando för att godkänna det. Ersätt<private-endpoint-name>
med namnet som returnerades från föregående kommando.az network private-endpoint-connection approve -n <private-endpoint-name>
Det går inte att matcha poängslutpunkten
Kontrollera att klienten som utfärdar bedömningsbegäran är ett virtuellt nätverk som har åtkomst till Azure Machine Learning-arbetsytan.
nslookup
Använd kommandot på slutpunktens värdnamn för att hämta IP-adressinformationen, till exempel:nslookup endpointname.westcentralus.inference.ml.azure.com
Svaret innehåller en adress som ska finnas i intervallet som tillhandahålls av det virtuella nätverket.
Kommentar
- För Kubernetes onlineslutpunkt ska slutpunktens värdnamn vara det CName (domännamn) som anges i kubernetes-klustret.
- Om slutpunkten är HTTP finns IP-adressen i slutpunkts-URI:n, som du kan hämta från studiogränssnittet.
- Du hittar fler sätt att hämta IP-adressen för slutpunkten i Säker Kubernetes onlineslutpunkt.
nslookup
Om kommandot inte löser värdnamnet vidtar du följande åtgärder:
Hanterade onlineslutpunkter
Använd följande kommando för att kontrollera om det finns en A-post i den privata DNS-zonen (Domain Name Server) för det virtuella nätverket.
az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
Resultatet ska innehålla en post som liknar
*.<GUID>.inference.<region>
.Om inget slutsatsvärde returneras tar du bort den privata slutpunkten för arbetsytan och återskapar den. Mer information finns i Konfigurera en privat slutpunkt.
Om arbetsytan med en privat slutpunkt använder en anpassad DNS-server kör du följande kommando för att kontrollera att matchningen från anpassad DNS fungerar korrekt.
dig endpointname.westcentralus.inference.ml.azure.com
Kubernetes-onlineslutpunkter
Kontrollera DNS-konfigurationen i Kubernetes-klustret.
Kontrollera också om azureml-fe fungerar som förväntat med hjälp av följande kommando:
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"
Använd följande kommando för HTTP:
curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
Om curl HTTPs misslyckas eller överskrider tidsgränsen men HTTP fungerar kontrollerar du om certifikatet är giltigt.
Om föregående process inte matchar A-posten kontrollerar du om lösningen fungerar från Azure DNS (168.63.129.16).
dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
Om föregående kommando lyckas felsöker du den villkorsstyrda vidarebefordraren för privat länk i anpassad DNS.
Det går inte att poängsätta onlinedistributioner
Kör följande kommando för att se om distributionen lyckades:
az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}'
Om distributionen har slutförts är
Succeeded
värdetstate
för .Om distributionen lyckades använder du följande kommando för att kontrollera att trafiken har tilldelats till distributionen. Ersätt
<endpointname>
med namnet på slutpunkten.az ml online-endpoint show -n <endpointname> --query traffic
Svaret från det här kommandot bör visa procentandelen trafik som tilldelats distributioner.
Dricks
Det här steget är inte nödvändigt om du använder
azureml-model-deployment
huvudet i din begäran för att rikta in dig på den här distributionen.Om trafiktilldelningarna eller distributionshuvudet har angetts korrekt använder du följande kommando för att hämta loggarna för slutpunkten. Ersätt
<endpointname>
med namnet på slutpunkten och<deploymentname>
med distributionen.az ml online-deployment get-logs -e <endpointname> -n <deploymentname>
Granska loggarna för att se om det är problem med att köra poängkoden när du skickar en begäran till distributionen.