Zabezpieczanie zarządzanych punktów końcowych online przy użyciu izolacji sieciowej

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

W tym artykule użyjesz izolacji sieciowej w celu zabezpieczenia zarządzanego punktu końcowego online. Utworzysz zarządzany punkt końcowy online, który używa prywatnego punktu końcowego obszaru roboczego usługi Azure Machine Edukacja do bezpiecznej komunikacji przychodzącej. Skonfigurujesz również obszar roboczy z zarządzaną siecią wirtualną, która zezwala na tylko zatwierdzoną komunikację wychodzącą dla wdrożeń. Na koniec utworzysz wdrożenie, które używa prywatnych punktów końcowych zarządzanej sieci wirtualnej obszaru roboczego do komunikacji wychodzącej.

Przykłady korzystające ze starszej metody izolacji sieciowej można znaleźć w plikach wdrażania deploy-moe-vnet-legacy.sh (na potrzeby wdrażania przy użyciu modelu ogólnego) i deploy-moe-vnet-mlflow-legacy.sh (na potrzeby wdrażania przy użyciu modelu MLflow) w repozytorium GitHub azureml-examples.

Wymagania wstępne

  • Aby korzystać z usługi Azure Machine Edukacja, musisz mieć subskrypcję platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto. Wypróbuj bezpłatną lub płatną wersję usługi Azure Machine Edukacja dzisiaj.

  • Zainstaluj i skonfiguruj interfejs wiersza polecenia platformy Azure oraz ml rozszerzenie do interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji, zobacz Instalowanie, konfigurowanie i używanie interfejsu wiersza polecenia (wersja 2).

    Napiwek

    Usługa Azure Machine Edukacja zarządzana sieć wirtualna została wprowadzona 23 maja 2023 r. Jeśli masz starszą wersję rozszerzenia ml, może być konieczne zaktualizowanie go, aby przykłady w tym artykule działały. Aby zaktualizować rozszerzenie, użyj następującego polecenia interfejsu wiersza polecenia platformy Azure:

    az extension update -n ml
    
  • W przykładach interfejsu wiersza polecenia w tym artykule założono, że używasz powłoki Bash (lub zgodnej). Na przykład z systemu Linux lub Podsystem Windows dla systemu Linux.

  • Musisz mieć grupę zasobów platformy Azure, w której (lub używana jednostka usługi) musi mieć Contributor dostęp. Jeśli skonfigurowano ml rozszerzenie, będziesz mieć taką grupę zasobów.

  • Jeśli chcesz użyć tożsamości zarządzanej przypisanej przez użytkownika do tworzenia punktów końcowych online i wdrożeń online oraz zarządzania nimi, tożsamość powinna mieć odpowiednie uprawnienia. Aby uzyskać szczegółowe informacje o wymaganych uprawnieniach, zobacz Konfigurowanie uwierzytelniania usługi. Na przykład musisz przypisać odpowiednie uprawnienie RBAC dla usługi Azure Key Vault w tożsamości.

Migrowanie ze starszej metody izolacji sieciowej do zarządzanej sieci wirtualnej

Jeśli wcześniej użyto starszej metody do izolacji sieci zarządzanych punktów końcowych online i chcesz przeprowadzić migrację do sieci zarządzanej przez obszar roboczy sieci wirtualnej w celu zabezpieczenia punktów końcowych, wykonaj następujące kroki:

  1. Usuń wszystkie obliczenia w obszarze roboczym.
  2. Włącz zarządzaną sieć wirtualną dla obszaru roboczego. Aby uzyskać więcej informacji na temat konfigurowania sieci zarządzanej dla obszaru roboczego, zobacz Temat Workspace Managed Virtual Network Isolation (Izolacja sieci wirtualnej zarządzanej przez obszar roboczy).
  3. Skonfiguruj prywatne punkty końcowe na potrzeby komunikacji wychodzącej z zasobami prywatnymi, do których muszą uzyskiwać dostęp zarządzane punkty końcowe online. Te zasoby prywatne obejmują konto magazynu, usługę Azure Key Vault i usługę Azure Container Registry (ACR).
  4. (Opcjonalnie) Jeśli integrujesz się z rejestrem użytkowników, skonfiguruj prywatne punkty końcowe na potrzeby komunikacji wychodzącej z rejestrem, jego konta magazynu i usługi ACR.

Ograniczenia

  • Flaga v1_legacy_mode musi być wyłączona (false) w obszarze roboczym usługi Azure Machine Learning. Jeśli ta flaga jest włączona, nie będzie można utworzyć zarządzanego punktu końcowego online. Aby uzyskać więcej informacji, zobacz Izolacja sieci za pomocą interfejsu API w wersji 2.

  • Jeśli obszar roboczy usługi Azure Machine Edukacja ma prywatny punkt końcowy utworzony przed 24 maja 2022 r., należy ponownie utworzyć prywatny punkt końcowy obszaru roboczego przed skonfigurowaniem punktów końcowych online w celu korzystania z prywatnego punktu końcowego. Aby uzyskać więcej informacji na temat tworzenia prywatnego punktu końcowego dla obszaru roboczego, zobacz Jak skonfigurować prywatny punkt końcowy dla obszaru roboczego usługi Azure Machine Learning.

    Napiwek

    Aby potwierdzić, kiedy obszar roboczy został utworzony, możesz sprawdzić właściwości obszaru roboczego.

    W programie Studio przejdź do Directory + Subscription + Workspace sekcji (w prawym górnym rogu programu Studio) i wybierz pozycję View all properties in Azure Portal. Wybierz widok JSON w prawym górnym rogu strony "Przegląd", a następnie wybierz najnowszą wersję interfejsu API. Na tej stronie możesz sprawdzić wartość .properties.creationTime

    Możesz też użyć interfejsu az ml workspace show wiersza polecenia z my_ml_client.workspace.get("my-workspace-name") zestawem SDK lub curl obszaru roboczego z interfejsem API REST.

  • W przypadku korzystania z izolacji sieciowej z punktami końcowymi online można użyć zasobów skojarzonych z obszarem roboczym (Azure Container Registry (ACR), konta magazynu, usługi Key Vault i Szczegółowe informacje aplikacji) z innej grupy zasobów niż obszar roboczy. Jednak te zasoby muszą należeć do tej samej subskrypcji i dzierżawy co obszar roboczy.

Uwaga

Izolacja sieci opisana w tym artykule dotyczy operacji płaszczyzny danych, czyli operacji, które wynikają z żądań oceniania (lub obsługi modelu). Operacje płaszczyzny sterowania (takie jak żądania tworzenia, aktualizowania, usuwania lub pobierania kluczy uwierzytelniania) są wysyłane do usługi Azure Resource Manager za pośrednictwem sieci publicznej.

Przygotowywanie systemu

  1. Utwórz zmienne środowiskowe używane w tym przykładzie, uruchamiając następujące polecenia. Zastąp <YOUR_WORKSPACE_NAME> ciąg nazwą, która ma być używana dla obszaru roboczego. Zastąp element <YOUR_RESOURCEGROUP_NAME> grupą zasobów, która będzie zawierać obszar roboczy.

    Napiwek

    przed utworzeniem nowego obszaru roboczego należy utworzyć grupę zasobów platformy Azure, aby ją zawierała. Aby uzyskać więcej informacji, zobacz Zarządzanie grupami zasobów platformy Azure.

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Utwórz obszar roboczy. Parametr -m allow_only_approved_outbound konfiguruje zarządzaną sieć wirtualną dla obszaru roboczego i blokuje ruch wychodzący z wyjątkiem zatwierdzonych miejsc docelowych.

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

    Alternatywnie, jeśli chcesz zezwolić wdrożeniu na wysyłanie ruchu wychodzącego do Internetu, usuń komentarz z następującego kodu i uruchom go zamiast tego.

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

    Aby uzyskać więcej informacji na temat tworzenia nowego obszaru roboczego lub uaktualniania istniejącego obszaru roboczego do korzystania z zarządzanej sieci wirtualnej, zobacz Konfigurowanie zarządzanej sieci wirtualnej w celu zezwalania na ruch wychodzący z Internetu.

    Po skonfigurowaniu obszaru roboczego z prywatnym punktem końcowym usługa Azure Container Registry dla obszaru roboczego musi być skonfigurowana pod kątem warstwy Premium , aby zezwolić na dostęp za pośrednictwem prywatnego punktu końcowego. Aby uzyskać więcej informacji, zobacz Warstwy usługi Azure Container Registry. Ponadto należy ustawić obszar roboczy z właściwością image_build_compute , ponieważ tworzenie wdrożenia obejmuje tworzenie obrazów. Aby uzyskać więcej informacji, zobacz Konfigurowanie kompilacji obrazów .

  3. Skonfiguruj wartości domyślne dla interfejsu wiersza polecenia, aby uniknąć wielokrotnego przekazywania wartości dla obszaru roboczego i grupy zasobów.

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Sklonuj repozytorium przykładów, aby pobrać przykładowe pliki dla punktu końcowego i wdrożenia, a następnie przejdź do katalogu repozytorium /cli .

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

Polecenia w tym samouczku znajdują się w pliku deploy-managed-online-endpoint-workspacevnet.sh w cli katalogu, a pliki konfiguracji YAML znajdują się w podkatalogu endpoints/online/managed/sample/ .

Tworzenie zabezpieczonego zarządzanego punktu końcowego online

Aby utworzyć zabezpieczony zarządzany punkt końcowy online, utwórz punkt końcowy w obszarze roboczym i ustaw punkt końcowy public_network_access tak, aby sterował disabled komunikacją przychodzącą. Następnie punkt końcowy będzie musiał używać prywatnego punktu końcowego obszaru roboczego do komunikacji przychodzącej.

Ponieważ obszar roboczy ma zarządzaną sieć wirtualną, wszystkie wdrożenia punktu końcowego będą używać prywatnych punktów końcowych zarządzanej sieci wirtualnej do komunikacji wychodzącej.

  1. Ustaw nazwę punktu końcowego.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Utwórz punkt końcowy z wyłączonym public_network_access , aby zablokować ruch przychodzący.

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

    Jeśli wyłączysz dostęp do sieci publicznej dla punktu końcowego, jedynym sposobem wywoływania punktu końcowego jest użycie prywatnego punktu końcowego, który może uzyskać dostęp do obszaru roboczego w sieci wirtualnej. Aby uzyskać więcej informacji, zobacz bezpieczne żądania oceniania ruchu przychodzącego i skonfiguruj prywatny punkt końcowy dla obszaru roboczego usługi Azure Machine Edukacja.

    Alternatywnie, jeśli chcesz zezwolić punktowi końcowemu na odbieranie żądań oceniania z Internetu, usuń komentarz z następującego kodu i uruchom go zamiast tego.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Utwórz wdrożenie w zarządzanej sieci wirtualnej obszaru roboczego.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Uzyskaj stan wdrożenia.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. Przetestuj punkt końcowy przy użyciu żądania oceniania przy użyciu interfejsu wiersza polecenia.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Pobieranie dzienników wdrażania.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Usuń punkt końcowy, jeśli nie jest już potrzebny.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Usuń wszystkie zasoby utworzone w tym artykule. Zastąp <resource-group-name> ciąg nazwą grupy zasobów użytej w tym przykładzie:

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

Rozwiązywanie problemów

Tworzenie punktu końcowego online kończy się niepowodzeniem z komunikatem V1LegacyMode == true

Obszar roboczy usługi Azure Machine Edukacja można skonfigurować dla v1_legacy_modeprogramu , co wyłącza interfejsy API w wersji 2. Zarządzane punkty końcowe online to funkcja platformy interfejsu API w wersji 2 i nie będzie działać, jeśli v1_legacy_mode jest włączona dla obszaru roboczego.

Ważne

Przed wyłączeniem v1_legacy_modeprogramu sprawdź zespół ds. zabezpieczeń sieci. Być może został on włączony przez zespół ds. zabezpieczeń sieci z jakiegoś powodu.

Aby uzyskać informacje na temat wyłączania v1_legacy_modeprogramu , zobacz Izolacja sieciowa w wersji 2.

Tworzenie punktu końcowego online z uwierzytelnianiem opartym na kluczach kończy się niepowodzeniem

Użyj następującego polecenia, aby wyświetlić listę reguł sieci usługi Azure Key Vault dla obszaru roboczego. Zastąp <keyvault-name> ciąg nazwą magazynu kluczy:

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

Odpowiedź dla tego polecenia jest podobna do następującego dokumentu JSON:

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

Jeśli wartość bypass nie AzureServicesjest równa , skorzystaj ze wskazówek w temacie Konfigurowanie ustawień sieci magazynu kluczy, aby ustawić ją na AzureServices.

Wdrożenia online kończą się niepowodzeniem z powodu błędu pobierania obrazu

  1. Sprawdź, czy flaga egress-public-network-access jest wyłączona dla wdrożenia. Jeśli ta flaga jest włączona, a widoczność rejestru kontenerów jest prywatna, ten błąd jest oczekiwany.

  2. Użyj następującego polecenia, aby sprawdzić stan połączenia prywatnego punktu końcowego. Zastąp <registry-name> ciąg nazwą usługi Azure Container Registry dla obszaru roboczego:

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

    W dokumencie odpowiedzi sprawdź, czy status pole jest ustawione na Approved. Jeśli nie zostanie zatwierdzona, użyj następującego polecenia, aby go zatwierdzić. Zastąp <private-endpoint-name> ciąg nazwą zwróconą z poprzedniego polecenia:

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

Nie można rozpoznać punktu końcowego oceniania

  1. Sprawdź, czy klient wystawiający żądanie oceniania jest siecią wirtualną, która może uzyskać dostęp do obszaru roboczego usługi Azure Machine Edukacja.

  2. nslookup Użyj polecenia w nazwie hosta punktu końcowego, aby pobrać informacje o adresie IP:

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

    Odpowiedź zawiera adres. Ten adres powinien znajdować się w zakresie dostarczonym przez sieć wirtualną

    Uwaga

    W przypadku punktu końcowego online platformy Kubernetes nazwa hosta punktu końcowego powinna być nazwą CName (nazwa domeny), która została określona w klastrze Kubernetes. Jeśli jest to punkt końcowy HTTP, adres IP będzie zawarty w identyfikatorze URI punktu końcowego, który można uzyskać bezpośrednio w interfejsie użytkownika programu Studio. Więcej sposobów uzyskiwania adresu IP punktu końcowego można znaleźć w artykule Secure Kubernetes online endpoint (Zabezpieczanie punktu końcowego usługi Kubernetes w trybie online).

  3. Jeśli nazwa hosta nie jest rozpoznawana przez nslookup polecenie :

    W przypadku zarządzanego punktu końcowego online,

    1. Sprawdź, czy rekord A istnieje w prywatnej strefie DNS dla sieci wirtualnej.

      Aby sprawdzić rekordy, użyj następującego polecenia:

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

      Wyniki powinny zawierać wpis podobny do *.<GUID>.inference.<region>.

    2. Jeśli nie zostanie zwrócona żadna wartość wnioskowania, usuń prywatny punkt końcowy dla obszaru roboczego, a następnie utwórz go ponownie. Aby uzyskać więcej informacji, zobacz Jak skonfigurować prywatny punkt końcowy.

    3. Jeśli obszar roboczy z prywatnym punktem końcowym jest skonfigurowany przy użyciu niestandardowego serwera DNS Jak używać obszaru roboczego z niestandardowym serwerem DNS, użyj następującego polecenia, aby sprawdzić, czy rozpoznawanie działa poprawnie z niestandardowego systemu DNS.

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

    W przypadku punktu końcowego online platformy Kubernetes,

    1. Sprawdź konfigurację DNS w klastrze Kubernetes.

    2. Ponadto możesz sprawdzić, czy plik azureml-fe działa zgodnie z oczekiwaniami, użyj następującego polecenia:

      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"
      

      W przypadku protokołu HTTP użyj polecenia

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

    Jeśli protokoły HTTP curl kończą się niepowodzeniem (np. przekroczeniem limitu czasu), ale protokół HTTP działa, sprawdź, czy certyfikat jest prawidłowy.

    Jeśli nie można rozpoznać rekordu A, sprawdź, czy rozpoznawanie działa z usługi Azure DNS(168.63.129.16).

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

    Jeśli to się powiedzie, możesz rozwiązać problemy z usługą przesyłania dalej warunkowego dla łącza prywatnego w niestandardowym systemie DNS.

Nie można ocenić wdrożeń online

  1. Użyj następującego polecenia, aby sprawdzić, czy wdrożenie zostało pomyślnie wdrożone:

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

    Jeśli wdrożenie zakończy się pomyślnie, wartość parametru state będzie wynosić Succeeded.

  2. Jeśli wdrożenie zakończyło się pomyślnie, użyj następującego polecenia, aby sprawdzić, czy ruch jest przypisany do wdrożenia. Zastąp <endpointname> ciąg nazwą punktu końcowego:

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

    Napiwek

    Ten krok nie jest wymagany, jeśli używasz nagłówka azureml-model-deployment w żądaniu do kierowania tego wdrożenia.

    Odpowiedź z tego polecenia powinna zawierać wartość procentową ruchu przypisanego do wdrożeń.

  3. Jeśli przypisania ruchu (lub nagłówek wdrożenia) są ustawione poprawnie, użyj następującego polecenia, aby pobrać dzienniki dla punktu końcowego. Zastąp <endpointname> ciąg nazwą punktu końcowego i <deploymentname> wdrożeniem:

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

    Przejrzyj dzienniki, aby sprawdzić, czy wystąpił problem z uruchomieniem kodu oceniania podczas przesyłania żądania do wdrożenia.

Następne kroki