Schützen Ihrer verwalteten Onlineendpunkte mit Netzwerkisolation

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

In diesem Artikel verwenden Sie die Netzwerkisolation, um einen verwalteten Onlineendpunkt zu schützen. Sie erstellen einen verwalteten Onlineendpunkt, der den privaten Endpunkt eines Azure Machine Learning-Arbeitsbereichs für sichere eingehende Kommunikation verwendet. Außerdem konfigurieren Sie den Arbeitsbereich mit einem verwalteten virtuellen Netzwerk, das nur genehmigte ausgehende Kommunikation für Bereitstellungen zulässt. Zu Schluss erstellen Sie eine Bereitstellung, die die privaten Endpunkte des verwalteten virtuellen Netzwerks des Arbeitsbereichs für die ausgehende Kommunikation verwendet.

Beispiele, die die Legacymethode für die Netzwerkisolation verwenden, finden Sie in den Bereitstellungsdateien deploy-moe-vnet-legacy.sh (für die Bereitstellung mit einem generischen Modell) und deploy-moe-vnet-mlflow-legacy.sh (für die Bereitstellung mit einem MLflow-Modell) im GitHub-Repository azureml-examples.

Voraussetzungen

  • Für die Verwendung von Azure Machine Learning ist ein Azure-Abonnement erforderlich. Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie noch heute die kostenlose oder kostenpflichtige Version von Azure Machine Learning aus.

  • Installieren und konfigurieren Sie die Azure CLI und die ml-Erweiterung für die Azure CLI. Weitere Informationen finden Sie unter Installieren, Einrichten und Verwenden der CLI (v2).

    Tipp

    Das verwaltete virtuelle Azure Machine Learning-Netzwerk wurde am 23. Mai 2023 eingeführt. Wenn Sie über eine ältere Version der ML-Erweiterung verfügen, muss sie für die Beispiele in diesem Artikel möglicherweise aktualisiert werden. Verwenden Sie zum Aktualisieren der Erweiterung den folgenden Azure CLI-Befehl:

    az extension update -n ml
    
  • In den CLI-Beispielen in diesem Artikel wird davon ausgegangen, dass Sie die Bash-Shell (oder eine kompatible Shell) verwenden, beispielsweise über ein Linux-System oder ein Windows-Subsystem für Linux.

  • Sie müssen über eine Azure-Ressourcengruppe verfügen, für die Ihnen (oder dem von Ihnen genutzten Dienstprinzipal) die Zugriffsberechtigung Contributor (Mitwirkender) zugeordnet ist. Sie verfügen über eine solche Ressourcengruppe, wenn Sie Ihre ml-Erweiterung konfiguriert haben.

  • Wenn Sie eine benutzerseitig zugewiesene verwaltete Identität zum Erstellen und Verwalten von Onlineendpunkten und Onlinebereitstellungen verwenden möchten, sollte die Identität über die entsprechenden Berechtigungen verfügen. Ausführliche Informationen zu den erforderlichen Berechtigungen finden Sie unter Einrichten der Dienstauthentifizierung. Beispielsweise müssen Sie der Identität die richtige RBAC-Berechtigung für Azure Key Vault zuweisen.

Migrieren von der Legacy-Netzwerkisolationsmethode zu einem verwaltetem virtuellen Netzwerk

Wenn Sie zuvor die Legacymethode für die Netzwerkisolation von verwalteten Onlineendpunkten verwendet haben und Sie zu einem vom Arbeitsbereich verwalteten virtuellen Netzwerk migrieren möchten, um Ihre Endpunkte zu schützen, führen Sie die folgenden Schritte aus:

  1. Löschen Sie alle Computeressourcen in Ihrem Arbeitsbereich.
  2. Aktivieren Sie ein verwaltetes virtuelles Netzwerk für Ihren Arbeitsbereich. Weitere Informationen zum Konfigurieren eines verwalteten Netzwerks für Ihren Arbeitsbereich finden Sie unter Isolation verwalteter virtueller Netzwerke auf Arbeitsbereichsebene.
  3. Konfigurieren Sie private Endpunkte für ausgehende Kommunikation mit privaten Ressourcen, auf die Ihre verwalteten Onlineendpunkte zugreifen müssen. Zu diesen privaten Ressourcen zählen ein Speicherkonto, Azure Key Vault und Azure Container Registry (ACR).
  4. (Optional) Wenn Sie eine Integration in eine Benutzerregistrierung durchführen, konfigurieren Sie private Endpunkte für ausgehende Kommunikation mit Ihrer Registrierung, dem Speicherkonto und ACR.

Einschränkungen

  • Das Flag v1_legacy_mode muss für Ihren Azure Machine Learning-Arbeitsbereich deaktiviert (false) sein. Wenn dieses Flag aktiviert ist, können Sie keinen verwalteten Onlineendpunkt erstellen. Weitere Informationen finden Sie unter Netzwerkisolation mit v2-API.

  • Wenn Ihr Azure Machine Learning-Arbeitsbereich einen privaten Endpunkt umfasst, der vor dem 24. Mai 2022 erstellt wurde, müssen Sie den privaten Endpunkt des Arbeitsbereichs neu erstellen, bevor Sie Ihre Onlineendpunkte für die Verwendung eines privaten Endpunkts konfigurieren. Weitere Informationen zum Erstellen eines privaten Endpunkts für Ihren Arbeitsbereich finden Sie unter Konfigurieren eines privaten Endpunkts für einen Azure Machine Learning-Arbeitsbereich.

    Tipp

    Um zu bestätigen, wann ein Arbeitsbereich erstellt wurde, können Sie die Eigenschaften des Arbeitsbereichs überprüfen.

    Wechseln Sie im Studio zum Abschnitt Directory + Subscription + Workspace (oben rechts im Studio), und wählen Sie View all properties in Azure Portal aus. Wählen Sie zunächst rechts oben auf der Seite „Übersicht“ die JSON-Ansicht und dann die neueste API-Version aus. Auf dieser Seite können Sie den Wert von properties.creationTime überprüfen.

    Alternativ können Sie az ml workspace show mit der CLI, my_ml_client.workspace.get("my-workspace-name") mit dem SDK oder curl in einem Arbeitsbereich mit der REST-API verwenden.

  • Wenn Sie die Netzwerkisolation mit Onlineendpunkten verwenden, können Sie mit dem Arbeitsbereich verbundene Ressourcen (Azure Container Registry (ACR), Speicherkonto, Key Vault und Application Insights) aus einer anderen Ressourcengruppe als der Ihres Arbeitsbereichs verwenden. Diese Ressourcen müssen jedoch demselben Abonnement und Mandanten wie Ihr Arbeitsbereich angehören.

Hinweis

Die in diesem Artikel beschriebene Netzwerkisolation gilt für Vorgänge auf Datenebene, d. h. Vorgänge, die sich aus Bewertungsanforderungen (oder Modellbereitstellung) ergeben. Operationen auf Steuerungsebene (wie Anforderungen zum Erstellen, Aktualisieren, Löschen oder Abrufen von Authentifizierungsschlüsseln) werden über das öffentliche Netzwerk an den Azure Resource Manager gesendet.

Vorbereiten Ihres Systems

  1. Führen Sie die folgenden Befehle aus, um die in diesem Beispiel verwendeten Umgebungsvariablen zu erstellen. Ersetzen Sie durch <YOUR_WORKSPACE_NAME> den Namen, der für Ihren Arbeitsbereich verwendet werden soll. Ersetzen Sie <YOUR_RESOURCEGROUP_NAME> durch die Ressourcengruppe, die Ihren Arbeitsbereich enthält.

    Tipp

    Bevor Sie einen neuen Arbeitsbereich erstellen, müssen Sie eine Azure-Ressourcengruppe für ihn erstellen. Weitere Informationen finden Sie unter Beispiel: Erstellen einer Ressourcengruppe mithilfe der Azure-Bibliotheken.

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Erstellen Sie Ihren Arbeitsbereich. Der Parameter -m allow_only_approved_outbound konfiguriert ein verwaltetes virtuelles Netzwerk für den Arbeitsbereich und blockiert ausgehenden Datenverkehr außer an genehmigte Zielen.

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

    Wenn Sie alternativ zulassen möchten, dass die Bereitstellung ausgehenden Datenverkehr an das Internet sendet, heben Sie die Auskommentierung des folgenden Codes auf und führen ihn stattdessen aus.

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

    Weitere Informationen zum Erstellen eines neuen Arbeitsbereichs oder zum Aktualisieren Ihres vorhandenen Arbeitsbereichs zur Verwendung eines verwalteten virtuellen Netzwerks finden Sie unter Konfigurieren eines verwalteten virtuellen Netzwerks zum Zulassen von ausgehendem Internetdatenverkehr.

    Wenn der Arbeitsbereich mit einem privaten Endpunkt konfiguriert ist, muss die Azure Container Registry-Instanz für den Arbeitsbereich für den Premium-Tarif konfiguriert sein, um den Zugriff über den privaten Endpunkt zuzulassen. Weitere Informationen finden Sie unter Azure Container Registry-Tarife. Außerdem sollte der Arbeitsbereich mit der image_build_compute-Eigenschaft festgelegt werden, da die Erstellung der Bereitstellung das Erstellen von Images umfasst. Weitere Informationen finden Sie unter Konfigurieren von Imagebuilds.

  3. Konfigurieren Sie die Standardwerte für die Befehlszeilenschnittstelle, um zu vermeiden, dass die Werte für Ihren Arbeitsbereich und ihre Ressourcengruppe mehrmals übergeben werden.

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Klonen Sie das Beispielrepository, um die Beispieldateien für den Endpunkt und die Bereitstellung abzurufen, und wechseln Sie dann zum Verzeichnis /cli des Repositorys.

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

Die in diesem Tutorial verwendeten Befehle befinden sich in der Datei deploy-managed-online-endpoint-workspacevnet.sh im Verzeichnis cli, und die YAML-Konfigurationsdateien finden Sie im Unterverzeichnis endpoints/online/managed/sample/.

Erstellen eines geschützten verwalteten Onlineendpunkts

Um einen sicheren verwalteten Onlineendpunkt zu erstellen, erstellen Sie den Endpunkt in Ihrem Arbeitsbereich und legen dann public_network_access auf fest disabled, um die eingehende Kommunikation zu steuern. Der Endpunkt muss dann den privaten Endpunkt des Arbeitsbereichs für die eingehende Kommunikation verwenden.

Da der Arbeitsbereich so konfiguriert ist, dass er mit einem verwalteten virtuellen Netzwerk arbeitet, verwenden alle Bereitstellungen des Endpunkts die privaten Endpunkte des verwalteten virtuellen Netzwerks für die ausgehende Kommunikation.

  1. Legen Sie den Namen des Endpunkts fest.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Erstellen Sie einen Endpunkt, bei dem public_network_access deaktiviert ist, um eingehenden Datenverkehr zu blockieren.

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

    Wenn Sie den öffentlichen Netzwerkzugriff für den Endpunkt deaktivieren, kann der Endpunkt nur mithilfe eines privaten Endpunkts, der auf den Arbeitsbereich zugreifen kann, in Ihrem virtuellen Netzwerk aufgerufen werden. Weitere Informationen finden Sie unter Sichere eingehende Bewertungsanforderungen und Konfigurieren eines privaten Endpunkts für Azure Machine Learning-Arbeitsbereich.

    Wenn Sie alternativ dem Endpunkt gestatten möchten, Bewertungsanforderungen aus dem Internet zu empfangen, heben Sie die Auskommentierung des folgenden Codes auf und führen ihn stattdessen aus.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Erstellen Sie eine Bereitstellung im verwalteten virtuellen Netzwerk des Arbeitsbereichs.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Rufen Sie den Status der Bereitstellung ab.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. Verwenden Sie die Befehlszeilenschnittstelle, um den Endpunkt mit einer Bewertungsanforderung zu testen.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Rufen Sie die Bereitstellungsprotokolle ab.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Löschen Sie den Endpunkt, wenn Sie ihn nicht mehr benötigen.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Löschen Sie alle in diesem Artikel erstellten Ressourcen. Ersetzen Sie <resource-group-name> durch den Namen der in diesem Beispiel verwendeten Ressourcengruppe:

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

Problembehandlung

Fehler bei der Erstellung des Onlineendpunkts mit der Meldung „V1LegacyMode == true“

Der Azure Machine Learning-Arbeitsbereich kann für v1_legacy_mode konfiguriert werden, wodurch v2-APIs deaktiviert werden. Verwaltete Onlineendpunkte sind ein Feature der v2-API-Plattform und funktionieren nicht, wenn v1_legacy_mode für den Arbeitsbereich aktiviert ist.

Wichtig

Sprechen Sie sich mit Ihrem Netzwerksicherheitsteam ab, ehe Sie v1_legacy_mode deaktivieren. Möglicherweise wurde die Einstellung aus einem bestimmten Grund von Ihrem Netzwerksicherheitsteam aktiviert.

Informationen zum Deaktivieren von v1_legacy_modefinden Sie unter Netzwerkisolation mit v2-API.

Fehler beim Erstellen eines Onlineendpunkts mit schlüsselbasierter Authentifizierung

Verwenden Sie den folgenden Befehl, um die Azure Key Vault-Netzwerkregeln für Ihren Arbeitsbereich aufzulisten. Ersetzen Sie <keyvault-name> durch den Namen Ihres Schlüsseltresors:

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

Die Antwort dieses Befehls ähnelt dem folgenden JSON-Dokument:

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

Wenn der Wert von bypass nicht AzureServices lautet, folgen Sie der Anleitung unter Konfigurieren von Netzwerkeinstellungen für den Schlüsseltresor, um ihn auf AzureServices festzulegen.

Fehler zum Imagedownload bei Onlinebereitstellungen

Hinweis

Dieses Problem tritt auf, wenn Sie die Legacy-Netzwerkisolationsmethode für verwaltete Onlineendpunkte verwenden, bei der Azure Machine Learning ein verwaltetes, virtuelles Netzwerk für jede Bereitstellung unter einem Endpunkt erstellt.

  1. Überprüfen Sie, ob das Flag egress-public-network-access für die Bereitstellung deaktiviert wurde. Wenn dieses Flag aktiviert ist und die Sichtbarkeit der Containerregistrierung auf „privat“ festgelegt ist, dann ist dieser Fehler zu erwarten.

  2. Verwenden Sie den folgenden Befehl, um den Status der privaten Endpunktverbindung zu überprüfen. Ersetzen Sie <registry-name> durch den Namen der Azure Container Registry-Instanz für Ihren Arbeitsbereich:

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

    Überprüfen Sie im Antwortdokument, ob das Feld status auf Approved festgelegt ist. Falls der Status nicht „Approved“ lautet, verwenden Sie den folgenden Befehl, um die Verbindung zu genehmigen. Ersetzen Sie <private-endpoint-name> durch den vom vorherigen Befehl zurückgegebenen Namen:

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

Bewertungsendpunkt kann nicht aufgelöst werden

  1. Stellen Sie sicher, dass der Client, der die Bewertungsanforderung sendet, ein virtuelles Netzwerk ist, das auf den Azure Machine Learning-Arbeitsbereich zugreifen kann.

  2. Verwenden Sie den Befehl nslookup für den Endpunkthostnamen, um Informationen zur IP-Adresse abzurufen:

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

    Die Antwort enthält eine Adresse. Diese Adresse sollte in dem vom virtuellen Netzwerk bereitgestellten Bereich liegen.

    Hinweis

    Für den Kubernetes-Onlineendpunkt sollte der Hostname des Endpunkts der CName (Domänenname) sein, der in Ihrem Kubernetes-Cluster angegeben wurde. Wenn es sich um einen HTTP-Endpunkt handelt, ist die IP-Adresse im Endpunkt-URI enthalten, den Sie direkt auf der Studio-Benutzeroberfläche abrufen können. Weitere Möglichkeiten zum Abrufen der IP-Adresse des Endpunkts finden Sie unter Schützen eines Kubernetes-Onlineendpunkts.

  3. Wenn der Hostname durch den Befehl nslookup nicht aufgelöst wird:

    Für einen verwalteten Onlineendpunkt:

    1. Überprüfen Sie, ob in der privaten DNS-Zone für das virtuelle Netzwerk ein A-Eintrag vorhanden ist.

      Verwenden Sie zum Überprüfen der Einträge den folgenden Befehl:

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

      Die Ergebnisse sollten einen Eintrag ähnlich wie *.<GUID>.inference.<region> enthalten.

    2. Wenn kein Rückschlusswert zurückgegeben wird, löschen Sie den privaten Endpunkt für den Arbeitsbereich, und erstellen Sie ihn anschließend neu. Weitere Informationen finden Sie unter Konfigurieren eines privaten Endpunkts.

    3. Wenn der Arbeitsbereich mit einem privaten Endpunkt mit einem benutzerdefinierten DNS eingerichtet wird Verwenden Ihres Arbeitsbereichs mit einem benutzerdefinierten DNS-Server, verwenden Sie den folgenden Befehl, um zu überprüfen, ob die Auflösung über benutzerdefiniertes DNS ordnungsgemäß funktioniert.

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

    Für einen Kubernetes-Onlineendpunkt:

    1. Überprüfen Sie die DNS-Konfiguration im Kubernetes-Cluster.

    2. Darüber hinaus können Sie überprüfen, ob azureml-fe wie erwartet funktioniert. Verwenden Sie hierzu den folgenden Befehl:

      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"
      

      Verwenden Sie für HTTP

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

    Wenn curl HTTPS fehlschlägt (z. B. Timeout), aber HTTP funktioniert, überprüfen Sie, ob das Zertifikat gültig ist.

    Wenn die Auflösung nicht in einen Datensatz ausgeführt werden kann, überprüfen Sie, ob die Auflösung über Azure DNS (168.63.129.16) funktioniert.

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

    Wenn dies erfolgreich ist, können Sie die Probleme mit der bedingten Weiterleitung für die private Verbindung im benutzerdefinierten DNS beheben.

Onlinebereitstellungen können nicht bewertet werden

  1. Überprüfen Sie mit dem folgenden Befehl, ob die Bereitstellung erfolgreich durchgeführt wurde:

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

    Wenn die Bereitstellung erfolgreich abgeschlossen wurde, weist state den Wert Succeeded auf.

  2. Überprüfen Sie bei einer erfolgreichen Bereitstellung mit dem folgenden Befehl, ob der Datenverkehr der Bereitstellung zugewiesen ist. Ersetzen Sie <endpointname> durch den Namen Ihres Endpunkts.

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

    Tipp

    Dieser Schritt ist nicht erforderlich, wenn Sie in Ihrer Anforderung den azureml-model-deployment-Header in Ihrer Anforderung verwenden, um diese Bereitstellung als Ziel zu definieren.

    Die Antwort dieses Befehls sollte den Prozentsatz des Datenverkehrs auflisten, der den Bereitstellungen zugeordnet ist.

  3. Wenn die Datenverkehrszuweisungen (oder der Bereitstellungsheader) ordnungsgemäß festgelegt wurden, verwenden Sie den folgenden Befehl, um die Protokolle für den Endpunkt abzurufen. Ersetzen Sie <endpointname> durch den Namen des Endpunkts und <deploymentname> durch die Bereitstellung:

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

    Überprüfen Sie in den Protokollen, ob ein Problem bei der Ausführung des Bewertungscodes aufgetreten ist, wenn Sie eine Anforderung an die Bereitstellung übermitteln.

Nächste Schritte