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 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
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:
- Usuń wszystkie obliczenia w obszarze roboczym.
- 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).
- 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).
- (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 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 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
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 .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 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
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 Edukacja można skonfigurować dla v1_legacy_mode
programu , 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_mode
programu 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_mode
programu , 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 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 sieciowej dla zarządzanych punktów końcowych online, w których usługa Azure Machine Edukacja tworzy zarządzaną sieć wirtualną dla każdego wdrożenia w punkcie końcowym.
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.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 naApproved
. 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
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.
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).
Jeśli nazwa hosta nie jest rozpoznawana przez
nslookup
polecenie :W przypadku zarządzanego punktu końcowego online,
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>
.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 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,
Sprawdź konfigurację DNS w klastrze Kubernetes.
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
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
.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ń.
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 z zarządzanymi punktami końcowymi online
- Zarządzana izolacja sieci obszaru roboczego
- Samouczek: jak utworzyć bezpieczny obszar roboczy
- Sejf 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