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ägget ml .

  • 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 hanterat 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 följer du dessa steg:

  1. Ta bort alla beräkningar på din arbetsyta.
  2. Aktivera hanterat virtuellt nätverk för din arbetsyta. Mer information om hur du konfigurerar ett hanterat nätverk för din arbetsyta finns i Arbetsytans hanterade virtuella nätverksisolering.
  3. Konfigurera privata slutpunkter för utgående kommunikation till privata resurser som dina hanterade onlineslutpunkter behöver åtkomst till. Dessa privata resurser omfattar ett lagringskonto, Azure Key Vault och Azure Container Registry (ACR).
  4. (Valfritt) Om du integrerar med ett användarregister konfigurerar du privata slutpunkter för utgående kommunikation till ditt register, dess lagringskonto och dess ACR.

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äljer View 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ärdet properties.creationTimeför .

    Du kan också använda az ml workspace show med CLI, my_ml_client.workspace.get("my-workspace-name") med SDK eller curl 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

  1. 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>"
    
  2. 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 .

  3. 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
    
  4. 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.

  1. Ange slutpunktens namn.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. 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
    
  3. 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
    
  4. Hämta status för distributionen.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. 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
    
  6. Hämta distributionsloggar.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Ta bort slutpunkten om du inte längre behöver den.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. 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

Azure Machine Learning-arbetsytan kan konfigureras för v1_legacy_mode, vilket 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.

Viktigt!

Kontakta nätverkssäkerhetsteamet innan du inaktiverar v1_legacy_mode. Det kan ha aktiverats av nätverkssäkerhetsteamet av en anledning.

Information om hur du inaktiverar finns v1_legacy_modei Nätverksisolering med v2.

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 Key Vault 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-dokument:

{
    "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.

  1. Kontrollera om egress-public-network-access flaggan är inaktiverad för distributionen. Om den här flaggan är aktiverad och synligheten för containerregistret är privat förväntas det här felet.

  2. Använd följande kommando för att kontrollera statusen för den privata slutpunktsanslutningen. Ersätt <registry-name> med namnet på Azure Container Registry 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 svarsdokumentet kontrollerar du att fältet är inställt på statusApproved. Om den inte är godkänd 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

  1. Kontrollera att klienten som utfärdar bedömningsbegäran är ett virtuellt nätverk som har åtkomst till Azure Machine Learning-arbetsytan.

  2. nslookup Använd kommandot på slutpunktens värdnamn för att hämta IP-adressinformationen:

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

    Svaret innehåller en adress. Den här adressen ska ligga 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 har angetts i kubernetes-klustret. Om det är en HTTP-slutpunkt finns IP-adressen i slutpunkts-URI:n som du kan hämta direkt i Studio-användargränssnittet. Fler sätt att hämta IP-adressen för slutpunkten finns i Säker Kubernetes onlineslutpunkt.

  3. Om värdnamnet inte matchas av nslookup kommandot:

    För Hanterad onlineslutpunkt,

    1. Kontrollera om det finns en A-post i den privata DNS-zonen för det virtuella nätverket.

      Om du vill kontrollera posterna använder du följande kommando:

      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>.

    2. 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.

    3. Om arbetsytan med en privat slutpunkt konfigureras med en anpassad DNS Så här använder du din arbetsyta med en anpassad DNS-server, använd följande kommando för att kontrollera om matchningen fungerar korrekt från anpassad DNS.

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

    För Kubernetes onlineslutpunkt,

    1. Kontrollera DNS-konfigurationen i Kubernetes-klustret.

    2. Dessutom kan du kontrollera om azureml-fe fungerar som förväntat med 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"
      

      För HTTP använder du

      curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

    Om curl HTTPs misslyckas (t.ex. tidsgräns) men HTTP fungerar kontrollerar du att certifikatet är giltigt.

    Om det inte går att matcha 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 detta lyckas kan du felsöka villkorsstyrd vidarebefordrare för privat länk i anpassad DNS.

Det går inte att poängsätta onlinedistributioner

  1. Använd följande kommando för att se om distributionen har distribuerats:

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

    Om distributionen har slutförts blir Succeededvärdet state för .

  2. 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
    

    Dricks

    Det här steget behövs inte om du använder azureml-model-deployment huvudet i din begäran för att rikta in dig på den här distributionen.

    Svaret från det här kommandot bör visa en lista över procentandelen trafik som tilldelats distributioner.

  3. 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> 
    

    Titta igenom loggarna för att se om det är problem med att köra poängkoden när du skickar en begäran till distributionen.

Nästa steg