Zabezpečení spravovaných online koncových bodů pomocí izolace sítě

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)

V tomto článku použijete izolaci sítě k zabezpečení spravovaného online koncového bodu. Vytvoříte spravovaný online koncový bod, který pro zabezpečenou příchozí komunikaci používá privátní koncový bod pracovního prostoru služby Azure Machine Učení. Pracovní prostor nakonfigurujete také se spravovanou virtuální sítí , která umožňuje pouze schválenou odchozí komunikaci pro nasazení. Nakonec vytvoříte nasazení, které pro odchozí komunikaci používá privátní koncové body spravované virtuální sítě pracovního prostoru.

Příklady, které používají starší metodu izolace sítě, najdete v souborech nasazení deploy-moe-vnet-legacy.sh (pro nasazení pomocí obecného modelu) a deploy-moe-vnet-mlflow-legacy.sh (pro nasazení pomocí modelu MLflow) v úložišti Azureml-examples Na GitHubu.

Požadavky

  • Pokud chcete používat Učení Azure Machine, musíte mít předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet. Vyzkoušejte si bezplatnou nebo placenou verzi služby Azure Machine Učení ještě dnes.

  • Nainstalujte a nakonfigurujte Azure CLI a ml rozšíření azure CLI. Další informace najdete v tématu Instalace, nastavení a použití rozhraní příkazového řádku (v2).

    Tip

    Virtuální síť spravovaná službou Azure Machine Učení byla představena 23. května 2023. Pokud máte starší verzi rozšíření ml, možná ho budete muset aktualizovat, aby příklady v tomto článku fungovaly. Pokud chcete rozšíření aktualizovat, použijte následující příkaz Azure CLI:

    az extension update -n ml
    
  • Příklady rozhraní příkazového řádku v tomto článku předpokládají, že používáte prostředí Bash (nebo kompatibilní). Například ze systému Linux nebo Subsystém Windows pro Linux.

  • Musíte mít skupinu prostředků Azure, ve které potřebujete Contributor přístup vy (nebo instanční objekt, který používáte). Pokud jste nakonfigurovali ml rozšíření, budete mít takovou skupinu prostředků.

  • Pokud chcete použít spravovanou identitu přiřazenou uživatelem k vytváření a správě online koncových bodů a online nasazení, měla by mít identita správná oprávnění. Podrobnosti o požadovaných oprávněních najdete v tématu Nastavení ověřování služby. Musíte například přiřadit správné oprávnění RBAC pro Azure Key Vault pro identitu.

Migrace ze starší verze metody izolace sítě do spravované virtuální sítě

Pokud jste dříve použili starší metodu pro izolaci sítě spravovaných online koncových bodů a chcete migrovat na použití spravované virtuální sítě pracovního prostoru k zabezpečení koncových bodů, postupujte takto:

  1. Odstraňte všechny výpočetní prostředky v pracovním prostoru.
  2. Povolte spravovanou virtuální síť pro váš pracovní prostor. Další informace o tom, jak nakonfigurovat spravovanou síť pro váš pracovní prostor, najdete v tématu Izolace spravované virtuální sítě pracovního prostoru.
  3. Nakonfigurujte privátní koncové body pro odchozí komunikaci s privátními prostředky, ke kterým potřebují přístup vaše spravované online koncové body. Mezi tyto privátní prostředky patří účet úložiště, Azure Key Vault a Azure Container Registry (ACR).
  4. (Volitelné) Pokud integrujete s registrem uživatelů, nakonfigurujte privátní koncové body pro odchozí komunikaci s vaším registrem, jeho účtem úložiště a jeho ACR.

Omezení

  • Příznak v1_legacy_mode musí být u vašeho pracovního prostoru Azure Machine Learning zakázaný (false). Pokud je tento příznak povolený, nebudete moct vytvořit spravovaný online koncový bod. Další informace najdete v článku o izolaci sítě pomocí rozhraní API v2.

  • Pokud má váš pracovní prostor Azure Machine Učení privátní koncový bod vytvořený před 24. květnem 2022, musíte privátní koncový bod pracovního prostoru vytvořit znovu předtím, než nakonfigurujete online koncové body tak, aby používaly privátní koncový bod. Další informace o vytvoření privátního koncového bodu pro pracovní prostor najdete v článku o konfiguraci privátního koncového bodu pro pracovní prostor Azure Machine Learning.

    Tip

    Pokud chcete ověřit, kdy byl pracovní prostor vytvořen, můžete zkontrolovat vlastnosti pracovního prostoru.

    V sadě Studio přejděte do Directory + Subscription + Workspace části (vpravo nahoře v sadě Studio) a vyberte View all properties in Azure Portal. V pravém horním rohu stránky Přehled vyberte zobrazení JSON a pak zvolte nejnovější verzi rozhraní API. Na této stránce můžete zkontrolovat hodnotu properties.creationTime.

    Alternativně můžete použít az ml workspace show s rozhraním příkazového řádku, my_ml_client.workspace.get("my-workspace-name") se sadou SDK nebo curl v pracovním prostoru s rozhraním REST API.

  • Pokud používáte izolaci sítě s online koncovými body, můžete použít prostředky přidružené k pracovnímu prostoru (Azure Container Registry (ACR), účet úložiště, službu Key Vault a Přehledy aplikace) z jiné skupiny prostředků než pracovní prostor. Tyto prostředky ale musí patřit do stejného předplatného a tenanta jako váš pracovní prostor.

Poznámka:

Izolace sítě popsaná v tomto článku se týká operací roviny dat, to znamená operací, které jsou výsledkem bodovacích požadavků (nebo obsluhy modelu). Operace řídicí roviny (například žádosti o vytvoření, aktualizaci, odstranění nebo načtení ověřovacích klíčů) se posílají do Azure Resource Manageru přes veřejnou síť.

Příprava systému

  1. Vytvořte proměnné prostředí používané v tomto příkladu spuštěním následujících příkazů. Nahraďte <YOUR_WORKSPACE_NAME> názvem, který se má použít pro váš pracovní prostor. Nahraďte <YOUR_RESOURCEGROUP_NAME> skupinou prostředků, která bude obsahovat váš pracovní prostor.

    Tip

    Před vytvořením nového pracovního prostoru musíte vytvořit skupinu prostředků Azure, která ji bude obsahovat. Další informace najdete v tématu Správa skupin prostředků Azure.

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Vytvořte pracovní prostor. Parametr -m allow_only_approved_outbound nakonfiguruje spravovanou virtuální síť pro pracovní prostor a blokuje odchozí provoz s výjimkou schválených cílů.

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

    Pokud chcete nasazení povolit odesílání odchozích přenosů na internet, odkomentujte následující kód a spusťte ho.

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

    Další informace o tom, jak vytvořit nový pracovní prostor nebo upgradovat stávající pracovní prostor tak, aby používal mangovanou virtuální síť, najdete v tématu Konfigurace spravované virtuální sítě pro povolení odchozího internetu.

    Pokud je pracovní prostor nakonfigurovaný s privátním koncovým bodem, musí být služba Azure Container Registry pro tento pracovní prostor nakonfigurovaná tak, aby umožňovala přístup přes privátní koncový bod. Další informace najdete v článku Úrovně služby Azure Container Registry. Pracovní prostor by měl být také nastaven s image_build_compute vlastností, protože vytváření nasazení zahrnuje vytváření imagí. Další informace najdete v tématu Konfigurace sestavení imagí .

  3. Nakonfigurujte výchozí hodnoty pro rozhraní příkazového řádku, abyste se vyhnuli předávání hodnot pro pracovní prostor a skupinu prostředků několikrát.

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Naklonujte úložiště příkladů, abyste získali ukázkové soubory pro koncový bod a nasazení, a pak přejděte do adresáře úložiště /cli .

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

Příkazy v tomto kurzu jsou v souboru deploy-managed-online-endpoint-workspacevnet.sh v cli adresáři a konfigurační soubory YAML jsou v endpoints/online/managed/sample/ podadresáři.

Vytvoření zabezpečeného spravovaného online koncového bodu

Pokud chcete vytvořit zabezpečený spravovaný online koncový bod, vytvořte koncový bod v pracovním prostoru a nastavte koncový bod public_network_access tak, aby disabled kontroluje příchozí komunikaci. Koncový bod pak bude muset pro příchozí komunikaci použít privátní koncový bod pracovního prostoru.

Vzhledem k tomu, že je pracovní prostor nakonfigurovaný tak, aby měl spravovanou virtuální síť, budou všechna nasazení koncového bodu používat privátní koncové body spravované virtuální sítě pro odchozí komunikaci.

  1. Nastavte název koncového bodu.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Vytvořte koncový bod se zakázaným public_network_access blokováním příchozího provozu.

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

    Pokud zakážete přístup k veřejné síti pro koncový bod, jediným způsobem, jak koncový bod vyvolat, je použití privátního koncového bodu, který má přístup k pracovnímu prostoru ve vaší virtuální síti. Další informace najdete v tématu Zabezpečené příchozí žádosti o bodování a konfigurace privátního koncového bodu pro pracovní prostor azure machine Učení.

    Případně pokud chcete koncovému bodu povolit příjem žádostí o bodování z internetu, odkomentujte následující kód a spusťte ho.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Vytvořte nasazení ve spravované virtuální síti pracovního prostoru.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Získejte stav nasazení.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. Otestujte koncový bod pomocí žádosti o bodování pomocí rozhraní příkazového řádku.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Získejte protokoly nasazení.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Pokud už koncový bod nepotřebujete, odstraňte ho.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Odstraňte všechny prostředky vytvořené v tomto článku. Nahraďte <resource-group-name> názvem skupiny prostředků použitou v tomto příkladu:

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

Řešení problému

Online koncový bod se nepovede vytvořit se zprávou V1LegacyMode == true

Pracovní prostor Azure Machine Učení je možné nakonfigurovat pro v1_legacy_mode, což zakáže rozhraní API v2. Spravované online koncové body jsou funkcí platformy rozhraní API v2 a nebudou fungovat, pokud v1_legacy_mode je pro pracovní prostor povolený.

Důležité

Před zakázáním v1_legacy_modese obraťte na tým zabezpečení sítě. Je možné, že ho váš tým zabezpečení sítě z nějakého důvodu povolil.

Informace o zakázání v1_legacy_modenaleznete v tématu Izolace sítě s v2.

Vytvoření online koncového bodu s ověřováním na základě klíčů selže

Pomocí následujícího příkazu vypíšete pravidla sítě služby Azure Key Vault pro váš pracovní prostor. Nahraďte <keyvault-name> názvem trezoru klíčů:

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

Odpověď pro tento příkaz je podobná následujícímu dokumentu JSON:

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

Pokud hodnota bypass není AzureServices, použijte pokyny v nastavení konfigurace sítě trezoru klíčů a nastavte ho na AzureServices.

Selhání online nasazení s chybou při stahování image

Poznámka:

Tento problém se týká použití starší verze metody izolace sítě pro spravované online koncové body, ve kterých azure Machine Učení vytvoří spravovanou virtuální síť pro každé nasazení v rámci koncového bodu.

  1. Zkontrolujte, jestli egress-public-network-access je příznak pro nasazení zakázaný . Pokud je tento příznak povolený a viditelnost registru kontejneru je soukromá, očekává se toto selhání.

  2. Pomocí následujícího příkazu zkontrolujte stav připojení privátního koncového bodu. Nahraďte <registry-name> názvem služby Azure Container Registry pro váš pracovní prostor:

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

    V dokumentu odpovědi ověřte, zda status je pole nastaveno na Approvedhodnotu . Pokud není schválená, pomocí následujícího příkazu ho schvalte. Nahraďte <private-endpoint-name> názvem vráceným z předchozího příkazu:

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

Bodovací koncový bod nejde přeložit

  1. Ověřte, že klient, který vydává žádost o hodnocení, je virtuální síť, která má přístup k pracovnímu prostoru Azure Machine Učení.

  2. nslookup Pomocí příkazu na názvu hostitele koncového bodu načtěte informace o IP adrese:

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

    Odpověď obsahuje adresu. Tato adresa by měla být v rozsahu poskytovaném virtuální sítí.

    Poznámka:

    V případě online koncového bodu Kubernetes by měl být název hostitele koncového bodu CName (název domény), který byl zadán v clusteru Kubernetes. Pokud se jedná o koncový bod HTTP, IP adresa bude obsažena v identifikátoru URI koncového bodu, který můžete získat přímo v uživatelském rozhraní sady Studio. Další způsoby, jak získat IP adresu koncového bodu, najdete v online koncovém bodu Secure Kubernetes.

  3. Pokud se název hostitele nepřeloží příkazem nslookup :

    Pro spravovaný online koncový bod:

    1. Zkontrolujte, jestli záznam A existuje v privátní zóně DNS pro virtuální síť.

      Pokud chcete zkontrolovat záznamy, použijte následující příkaz:

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

      Výsledky by měly obsahovat položku, která je podobná *.<GUID>.inference.<region>.

    2. Pokud se nevrátí žádná hodnota odvozování, odstraňte privátní koncový bod pracovního prostoru a vytvořte ji znovu. Další informace najdete v tématu Konfigurace privátního koncového bodu.

    3. Pokud je pracovní prostor s privátním koncovým bodem nastavený pomocí vlastního serveru DNS, použijte následující příkaz k ověření, jestli překlad funguje správně z vlastního DNS.

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

    Pro online koncový bod Kubernetes

    1. Zkontrolujte konfiguraci DNS v clusteru Kubernetes.

    2. Kromě toho můžete zkontrolovat, jestli azureml-fe funguje podle očekávání, použijte následující příkaz:

      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"
      

      Pro HTTP použijte

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

    Pokud protokolY HTTPS curl selže (např. vypršení časového limitu), ale http funguje, zkontrolujte, jestli je certifikát platný.

    Pokud se to nepodaří přeložit na záznam A, ověřte, jestli překlad funguje z Azure DNS (168.63.129.16).

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

    Pokud to bude úspěšné, můžete vyřešit potíže s podmíněným předáváním privátního propojení ve vlastním DNS.

U online nasazení nejde určit skóre

  1. Pomocí následujícího příkazu zkontrolujte, jestli se nasazení úspěšně nasadilo:

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

    Pokud se nasazení úspěšně dokončilo, bude Succeededhodnota state .

  2. Pokud nasazení proběhlo úspěšně, pomocí následujícího příkazu zkontrolujte, jestli je k nasazení přiřazený provoz. Nahraďte <endpointname> názvem koncového bodu:

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

    Tip

    Tento krok není potřeba, pokud k cílení na toto nasazení používáte hlavičku azureml-model-deployment v požadavku.

    Odpověď z tohoto příkazu by měla obsahovat procento provozu přiřazeného k nasazením.

  3. Pokud jsou přiřazení provozu (nebo hlavička nasazení) správně nastavená, pomocí následujícího příkazu získejte protokoly pro koncový bod. Nahraďte <endpointname> názvem koncového bodu a <deploymentname> nasazením:

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    

    Projděte si protokoly a zjistěte, jestli při odeslání požadavku do nasazení došlo k potížím se spuštěním kódu bodování.

Další kroky