Udostępnij za pośrednictwem


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 Learning 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 Learning, 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 Learning już dziś.

  • 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

    Zarządzana sieć wirtualna usługi Azure Machine Learning 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 obszaru roboczego

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. Utwórz nowy obszar roboczy i włącz zarządzaną sieć wirtualną. 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).
  2. (Opcjonalnie) W ustawieniu sieci obszaru roboczego dodaj reguły ruchu wychodzącego z typem prywatnych punktów końcowych, jeśli wdrożenia muszą uzyskiwać dostęp do dodatkowych zasobów prywatnych, innych niż konto usługi Storage, usługa Azure Key Vault i usługa Azure Container Registry (ACR) skojarzone z obszarem roboczym (które są domyślnie dodawane).
  3. (Opcjonalnie) Jeśli zamierzasz używać rejestrów usługi Azure Machine Learning, skonfiguruj prywatne punkty końcowe na potrzeby komunikacji wychodzącej z rejestrem, jego konta magazynu i usługi Azure Container Registry.
  4. Utwórz punkty końcowe online/wdrożenia w nowym obszarze roboczym. Rejestry usługi Azure Machine Learning mogą być używane do bezpośredniego wdrażania z nich. Aby uzyskać więcej informacji, zobacz Wdrażanie z rejestru.
  5. Zaktualizuj aplikacje wywołujące punkty końcowe, aby używać identyfikatorów URI oceniania nowych punktów końcowych online.
  6. Po walidacji usuń punkty końcowe online ze starego obszaru roboczego.

Jeśli nie musisz utrzymywać zasobów obliczeniowych ani utrzymywać punktów końcowych i wdrożeń online w starym obszarze roboczym, aby obsługiwać bez przestojów, możesz po prostu usunąć wszystkie obliczenia w istniejącym obszarze roboczym i zaktualizować obszar roboczy, aby włączyć zarządzaną sieć wirtualną obszaru roboczego.

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 Learning ma prywatny punkt końcowy, który został utworzony przed 24 maja 2022 r., musisz 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 usługi Application Insights 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 .

    Ważne

    Gdy zarządzana sieć wirtualna obszaru roboczego jest skonfigurowana dla obszaru roboczego po raz pierwszy, sieć nie jest jeszcze aprowizowana. Przed przejściem do tworzenia wdrożeń online aprowizuj sieć, postępując zgodnie z wytycznymi Ręczne aprowizuj sieć zarządzaną. Tworzenie wdrożeń online zostanie odrzucone do momentu aprowizacji sieci zarządzanej.

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

    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 Learning można skonfigurować dla v1_legacy_modeprogramu , który wyłącza interfejsy API w wersji 2. Zarządzane punkty końcowe online to funkcja platformy interfejsu API w wersji 2 i nie działają, jeśli v1_legacy_mode jest włączona dla obszaru roboczego.

Aby wyłączyć v1_legacy_modeusługę , zobacz Izolacja sieciowa w wersji 2.

Ważne

Zanim wyłączysz v1_legacy_modeusługę , sprawdź, czy zespół ds. zabezpieczeń sieci został włączony z jakiegoś powodu.

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ł sieciowych magazynu kluczy platformy Azure 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 kodu 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 dotyczy disabled 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ą rejestru kontenerów platformy Azure 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 kodzie odpowiedzi sprawdź, czy status pole jest ustawione na Approved. Jeśli nie, 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 Learning.

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

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

    Odpowiedź zawiera adres, który 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 (nazwą domeny) określoną w klastrze Kubernetes.
    • Jeśli punkt końcowy to HTTP, adres IP znajduje się w identyfikatorze URI punktu końcowego, który można uzyskać z interfejsu użytkownika programu Studio.
    • Więcej sposobów uzyskania 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. nslookup Jeśli polecenie nie rozpozna nazwy hosta, wykonaj następujące czynności:

Zarządzane punkty końcowe online

  1. Użyj następującego polecenia, aby sprawdzić, czy rekord A istnieje w strefie prywatnej serwera nazw domen (DNS) dla sieci wirtualnej.

    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 używa niestandardowego serwera DNS, uruchom następujące polecenie, aby sprawdzić, czy rozpoznawanie z niestandardowego serwera DNS działa poprawnie.

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

Punkty końcowe online platformy Kubernetes

  1. Sprawdź konfigurację DNS w klastrze Kubernetes.

  2. Sprawdź również, czy azureml-fe działa zgodnie z oczekiwaniami, używając 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 następującego polecenia:

     curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    
  3. Jeśli protokoły HTTP curl kończą się niepowodzeniem lub upłynął limit czasu, ale protokół HTTP działa, sprawdź, czy certyfikat jest prawidłowy.

  4. Jeśli poprzedni proces nie może 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
    
  5. Jeśli powyższe polecenie powiedzie się, rozwiąż problemy z warunkowym usługą przesyłania dalej dla łącza prywatnego w niestandardowym systemie DNS.

Nie można ocenić wdrożeń online

  1. Uruchom następujące polecenie, aby sprawdzić, czy wdrożenie zakończyło się pomyślnie:

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

    Jeśli wdrożenie zakończyło się pomyślnie, wartość parametru state to 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
    

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

    Napiwek

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

  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> 
    
  4. Przejrzyj dzienniki, aby sprawdzić, czy wystąpił problem z uruchomieniem kodu oceniania podczas przesyłania żądania do wdrożenia.

Następne kroki