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 skonfigurowanoml
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:
- 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).
- (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).
- (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.
- 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.
- Zaktualizuj aplikacje wywołujące punkty końcowe, aby używać identyfikatorów URI oceniania nowych punktów końcowych online.
- 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 zmy_ml_client.workspace.get("my-workspace-name")
zestawem SDK lubcurl
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
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>"
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.
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
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.
Ustaw nazwę punktu końcowego.
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
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
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
Uzyskaj stan wdrożenia.
az ml online-endpoint show -n $ENDPOINT_NAME
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
Pobieranie dzienników wdrażania.
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Usuń punkt końcowy, jeśli nie jest już potrzebny.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
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_mode
programu , 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_mode
usługę , zobacz Izolacja sieciowa w wersji 2.
Ważne
Zanim wyłączysz v1_legacy_mode
usł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 AzureServices
jest 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
Uwaga
Ten problem dotyczy użycia starszej metody izolacji sieci dla zarządzanych punktów końcowych online, w których usługa Azure Machine Learning tworzy zarządzaną sieć wirtualną dla każdego wdrożenia w punkcie końcowym.
Sprawdź, czy flaga
egress-public-network-access
dotyczydisabled
wdrożenia. Jeśli ta flaga jest włączona, a widoczność rejestru kontenerów jest prywatna, ten błąd jest oczekiwany.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 naApproved
. 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
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.
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).
nslookup
Jeśli polecenie nie rozpozna nazwy hosta, wykonaj następujące czynności:
Zarządzane punkty końcowe online
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>
.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.
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
Sprawdź konfigurację DNS w klastrze Kubernetes.
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"
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.
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
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
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
toSucceeded
.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.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
- Izolacja sieci dzięki zarządzanym punktom końcowym online
- Zarządzana izolacja sieci obszaru roboczego
- Samouczek: jak utworzyć bezpieczny obszar roboczy
- Bezpieczne wdrażanie punktów końcowych online
- Uzyskiwanie dostępu do zasobów platformy Azure przy użyciu punktu końcowego online i tożsamości zarządzanej
- Rozwiązywanie problemów z wdrażaniem punktów końcowych online