Udostępnij za pośrednictwem


Używanie tożsamości zarządzanych z interfejsem wiersza polecenia usługi Azure Machine Learning w wersji 1

DOTYCZY: Zestaw SDK języka Python w wersji 1

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1

Tożsamości zarządzane umożliwiają skonfigurowanie obszaru roboczego z minimalnymi wymaganymi uprawnieniami dostępu do zasobów.

Podczas konfigurowania obszaru roboczego usługi Azure Machine Learning w wiarygodny sposób należy upewnić się, że różne usługi skojarzone z obszarem roboczym mają prawidłowy poziom dostępu. Na przykład podczas przepływu pracy uczenia maszynowego obszar roboczy musi mieć dostęp do usługi Azure Container Registry (ACR) dla obrazów platformy Docker i kont magazynu na potrzeby danych szkoleniowych.

Ponadto tożsamości zarządzane umożliwiają szczegółową kontrolę nad uprawnieniami, na przykład można udzielić lub odwołać dostęp z określonych zasobów obliczeniowych do określonego usługi ACR.

W tym artykule dowiesz się, jak używać tożsamości zarządzanych do:

  • Konfigurowanie i używanie usługi ACR dla obszaru roboczego usługi Azure Machine Learning bez konieczności włączania dostępu użytkowników administracyjnych do usługi ACR.
  • Uzyskaj dostęp do prywatnego usługi ACR spoza obszaru roboczego, aby ściągnąć obrazy podstawowe na potrzeby trenowania lub wnioskowania.
  • Utwórz obszar roboczy z tożsamością zarządzaną przypisaną przez użytkownika, aby uzyskać dostęp do skojarzonych zasobów.

Wymagania wstępne

Konfigurowanie tożsamości zarządzanych

W niektórych sytuacjach konieczne jest uniemożliwienie użytkownikowi administracyjnemu dostępu do usługi Azure Container Registry. Na przykład usługa ACR może być udostępniona i musisz uniemożliwić dostęp administratora przez innych użytkowników. Lub utworzenie usługi ACR z włączonym użytkownikiem administratora jest niedozwolone przez zasady na poziomie subskrypcji.

Ważne

W przypadku korzystania z usługi Azure Machine Learning na potrzeby wnioskowania w usłudze Azure Container Instance (ACI) wymagany jest dostęp administratora do usługi ACR. Nie należy go wyłączać, jeśli planuje się wdrażanie modeli w usłudze ACI w celu wnioskowania.

Podczas tworzenia usługi ACR bez włączania dostępu użytkowników administracyjnych tożsamości zarządzane są używane do uzyskiwania dostępu do usługi ACR w celu kompilowania i ściągania obrazów platformy Docker.

Możesz przenieść własny rekord ACR z wyłączonym użytkownikiem administracyjnym podczas tworzenia obszaru roboczego. Alternatywnie pozwól usłudze Azure Machine Learning utworzyć obszar roboczy usługi ACR i wyłączyć użytkownika administratora później.

Korzystanie z własnego usługi ACR

Jeśli administrator usługi ACR jest niedozwolony przez zasady subskrypcji, należy najpierw utworzyć usługę ACR bez użytkownika administratora, a następnie skojarzyć ją z obszarem roboczym. Ponadto jeśli masz już usługę ACR z wyłączonym administratorem, możesz dołączyć ją do obszaru roboczego.

Utwórz usługę ACR z poziomu interfejsu wiersza polecenia platformy Azure bez ustawiania --admin-enabled argumentu lub z witryny Azure Portal bez włączania użytkownika administratora. Następnie podczas tworzenia obszaru roboczego usługi Azure Machine Learning określ identyfikator zasobu platformy Azure usługi ACR. W poniższym przykładzie pokazano tworzenie nowego obszaru roboczego usługi Azure Machine Learning korzystającego z istniejącego usługi ACR:

Napiwek

Aby uzyskać wartość parametru --container-registry , użyj polecenia az acr show , aby wyświetlić informacje dla usługi ACR. Pole id zawiera identyfikator zasobu dla usługi ACR.

az ml workspace create -w <workspace name> \
-g <workspace resource group> \
-l <region> \
--container-registry /subscriptions/<subscription id>/resourceGroups/<acr resource group>/providers/Microsoft.ContainerRegistry/registries/<acr name>

Zezwalaj usłudze Azure Machine Learning Service na tworzenie obszaru roboczego usługi ACR

Jeśli nie korzystasz z własnego usługi ACR, usługa Azure Machine Learning service utworzy tę usługę podczas wykonywania operacji, która jej potrzebuje. Na przykład prześlij przebieg trenowania do usługi Machine Learning Compute, skompiluj środowisko lub wdróż punkt końcowy usługi internetowej. Usługa ACR utworzona przez obszar roboczy będzie mieć włączoną funkcję administratora i musisz ręcznie wyłączyć użytkownika administratora.

  1. Utwórz nowy obszar roboczy

    az ml workspace show -n <my workspace> -g <my resource group>
    
  2. Wykonaj akcję, która wymaga usługi ACR. Na przykład samouczek dotyczący trenowania modelu.

  3. Pobierz nazwę usługi ACR utworzoną przez klaster:

    az ml workspace show -w <my workspace> \
    -g <my resource group>
    --query containerRegistry
    

    To polecenie zwraca wartość podobną do poniższego tekstu. Potrzebujesz tylko ostatniej części tekstu, czyli nazwy wystąpienia usługi ACR:

    /subscriptions/<subscription id>/resourceGroups/<my resource group>/providers/MicrosoftContainerReggistry/registries/<ACR instance name>
    
  4. Zaktualizuj usługę ACR, aby wyłączyć użytkownika administratora:

    az acr update --name <ACR instance name> --admin-enabled false
    

Tworzenie zasobów obliczeniowych przy użyciu tożsamości zarządzanej w celu uzyskiwania dostępu do obrazów platformy Docker na potrzeby trenowania

Aby uzyskać dostęp do obszaru roboczego usługi ACR, utwórz klaster obliczeniowy uczenia maszynowego z włączoną tożsamością zarządzaną przypisaną przez system. Tożsamość można włączyć w witrynie Azure Portal lub programie Studio podczas tworzenia zasobów obliczeniowych lub z poziomu interfejsu wiersza polecenia platformy Azure, korzystając z poniższego polecenia. Aby uzyskać więcej informacji, zobacz używanie tożsamości zarządzanej z klastrami obliczeniowymi.

Podczas tworzenia klastra obliczeniowego za pomocą klasy AmlComputeProvisioningConfiguration użyj parametru identity_type , aby ustawić typ tożsamości zarządzanej.

Tożsamość zarządzana jest automatycznie udzielana roli ACRPull w obszarze roboczym usługi ACR w celu włączenia ściągania obrazów platformy Docker na potrzeby trenowania.

Uwaga

Jeśli najpierw tworzysz obliczenia, przed utworzeniem usługi ACR obszaru roboczego musisz ręcznie przypisać rolę ACRPull.

Uzyskiwanie dostępu do obrazów podstawowych z prywatnego usługi ACR

Domyślnie usługa Azure Machine Learning używa podstawowych obrazów platformy Docker pochodzących z repozytorium publicznego zarządzanego przez firmę Microsoft. Następnie tworzy środowisko trenowania lub wnioskowania na tych obrazach. Aby uzyskać więcej informacji, zobacz Co to są środowiska uczenia maszynowego?.

Aby użyć niestandardowego obrazu podstawowego w przedsiębiorstwie, możesz użyć tożsamości zarządzanych, aby uzyskać dostęp do prywatnego usługi ACR. Istnieją dwa przypadki użycia:

  • Użyj obrazu podstawowego do trenowania w następujący sposób.
  • Tworzenie obrazu zarządzanego usługi Azure Machine Learning przy użyciu obrazu niestandardowego jako podstawy.

Ściąganie obrazu podstawowego platformy Docker do klastra obliczeniowego uczenia maszynowego w celu trenowania

Utwórz klaster obliczeniowy uczenia maszynowego z włączoną tożsamością zarządzaną przypisaną przez system zgodnie z wcześniejszym opisem. Następnie określ identyfikator podmiotu zabezpieczeń tożsamości zarządzanej.

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1

az ml computetarget amlcompute identity show --name <cluster name> -w <workspace> -g <resource group>

Opcjonalnie możesz zaktualizować klaster obliczeniowy, aby przypisać tożsamość zarządzaną przypisaną przez użytkownika:

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1

az ml computetarget amlcompute identity assign --name <cluster name> \
-w $mlws -g $mlrg --identities <my-identity-id>

Aby zezwolić klastrowi obliczeniowemu na ściąganie obrazów podstawowych, przyznaj tożsamości usługi zarządzanej rolę ACRPull w prywatnej usłudze ACR

az role assignment create --assignee <principal ID> \
--role acrpull \
--scope "/subscriptions/<subscription ID>/resourceGroups/<private ACR resource group>/providers/Microsoft.ContainerRegistry/registries/<private ACR name>"

Na koniec podczas przesyłania przebiegu trenowania określ lokalizację obrazu podstawowego w definicji środowiska.

DOTYCZY: Zestaw SDK języka Python w wersji 1

from azureml.core import Environment
env = Environment(name="private-acr")
env.docker.base_image = "<ACR name>.azurecr.io/<base image repository>/<base image version>"
env.python.user_managed_dependencies = True

Ważne

Aby upewnić się, że obraz podstawowy jest ściągany bezpośrednio do zasobu obliczeniowego, ustaw user_managed_dependencies = True i nie określaj pliku Dockerfile. W przeciwnym razie usługa Azure Machine Learning podejmie próbę utworzenia nowego obrazu platformy Docker i zakończy się niepowodzeniem, ponieważ tylko klaster obliczeniowy ma dostęp do ściągania obrazu podstawowego z usługi ACR.

Tworzenie środowiska zarządzanego usługi Azure Machine Learning w obraz podstawowy z prywatnego usługi ACR na potrzeby trenowania lub wnioskowania

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1

W tym scenariuszu usługa Azure Machine Learning Service tworzy środowisko trenowania lub wnioskowania na podstawie obrazu podstawowego dostarczanego z prywatnego usługi ACR. Ponieważ zadanie kompilacji obrazu odbywa się w obszarze roboczym usługi ACR przy użyciu usługi ACR Tasks, należy wykonać więcej kroków, aby zezwolić na dostęp.

  1. Utwórz tożsamość zarządzaną przypisaną przez użytkownika i przyznaj tożsamości usłudze ACRPull dostęp do prywatnego usługi ACR.

  2. Udziel przypisanej przez system tożsamości zarządzanej obszaru roboczego rolę Operator tożsamości zarządzanej w tożsamości zarządzanej przypisanej przez użytkownika z poprzedniego kroku. Ta rola umożliwia obszarowi roboczemu przypisanie tożsamości zarządzanej przypisanej przez użytkownika do usługi ACR Task na potrzeby tworzenia środowiska zarządzanego.

    1. Uzyskaj identyfikator podmiotu zabezpieczeń przypisanej przez system tożsamości zarządzanej obszaru roboczego:

      az ml workspace show -w <workspace name> -g <resource group> --query identityPrincipalId
      
    2. Udziel roli Operator tożsamości zarządzanej:

      az role assignment create --assignee <principal ID> --role managedidentityoperator --scope <user-assigned managed identity resource ID>
      

      Identyfikator zasobu tożsamości zarządzanej przypisanej przez użytkownika to identyfikator zasobu platformy Azure tożsamości przypisanej przez użytkownika w formacie /subscriptions/<subscription ID>/resourceGroups/<resource group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned managed identity name>.

  3. Określ zewnętrzny identyfikator usługi ACR i identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika w połączeniach obszaru roboczego przy użyciu metody Workspace.set_connection:

    DOTYCZY: Zestaw SDK języka Python w wersji 1

    workspace.set_connection(
        name="privateAcr", 
        category="ACR", 
        target = "<acr url>", 
        authType = "RegistryConnection", 
        value={"ResourceId": "<user-assigned managed identity resource id>", "ClientId": "<user-assigned managed identity client ID>"})
    
  4. Po zakończeniu konfiguracji można użyć obrazów podstawowych z prywatnego usługi ACR podczas kompilowania środowisk do trenowania lub wnioskowania. Poniższy fragment kodu przedstawia sposób określania nazwy obrazu podstawowego ACR i obrazu w definicji środowiska:

    DOTYCZY: Zestaw SDK języka Python w wersji 1

    from azureml.core import Environment
    
    env = Environment(name="my-env")
    env.docker.base_image = "<acr url>/my-repo/my-image:latest"
    

    Opcjonalnie można określić adres URL zasobu tożsamości zarządzanej i identyfikator klienta w samej definicji środowiska przy użyciu właściwości RegistryIdentity. Jeśli jawnie używasz tożsamości rejestru, zastępuje wszystkie określone wcześniej połączenia obszaru roboczego:

    DOTYCZY: Zestaw SDK języka Python w wersji 1

    from azureml.core.container_registry import RegistryIdentity
    
    identity = RegistryIdentity()
    identity.resource_id= "<user-assigned managed identity resource ID>"
    identity.client_id="<user-assigned managed identity client ID>"
    env.docker.base_image_registry.registry_identity=identity
    env.docker.base_image = "my-acr.azurecr.io/my-repo/my-image:latest"
    

Używanie obrazów platformy Docker do wnioskowania

Po skonfigurowaniu usługi ACR bez użytkownika administratora zgodnie z wcześniejszym opisem możesz uzyskać dostęp do obrazów platformy Docker w celu wnioskowania bez kluczy administratora z usługi Azure Kubernetes Service (AKS). Podczas tworzenia lub dołączania usługi AKS do obszaru roboczego jednostka usługi klastra jest automatycznie przypisywana do usługi ACRPull dostępu do obszaru roboczego usługi ACR.

Uwaga

Jeśli korzystasz z własnego klastra usługi AKS, klaster musi mieć włączoną jednostkę usługi zamiast tożsamości zarządzanej.

Tworzenie obszaru roboczego z tożsamością zarządzaną przypisaną przez użytkownika

Podczas tworzenia obszaru roboczego możesz użyć własnej tożsamości zarządzanej przypisanej przez użytkownika, która będzie używana do uzyskiwania dostępu do skojarzonych zasobów: ACR, KeyVault, Storage i App Insights.

Ważne

Podczas tworzenia obszaru roboczego z tożsamością zarządzaną przypisaną przez użytkownika musisz samodzielnie utworzyć skojarzone zasoby i przyznać role tożsamości zarządzanej dla tych zasobów. Użyj szablonu arm przypisania roli, aby wykonać przypisania.

Użyj interfejsu wiersza polecenia platformy Azure lub zestawu SDK języka Python, aby utworzyć obszar roboczy. W przypadku korzystania z interfejsu wiersza polecenia określ identyfikator przy użyciu parametru --primary-user-assigned-identity . W przypadku korzystania z zestawu SDK użyj polecenia primary_user_assigned_identity. Poniżej przedstawiono przykłady użycia interfejsu wiersza polecenia platformy Azure i języka Python do utworzenia nowego obszaru roboczego przy użyciu następujących parametrów:

Interfejs wiersza polecenia platformy Azure

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 1

az ml workspace create -w <workspace name> -g <resource group> --primary-user-assigned-identity <managed identity ARM ID>

Python

DOTYCZY: Zestaw SDK języka Python w wersji 1

from azureml.core import Workspace

ws = Workspace.create(name="workspace name", 
    subscription_id="subscription id", 
    resource_group="resource group name",
    primary_user_assigned_identity="managed identity ARM ID")

Możesz również użyć szablonu usługi ARM do utworzenia obszaru roboczego z tożsamością zarządzaną przypisaną przez użytkownika.

W przypadku obszaru roboczego z kluczami zarządzanymi przez klienta na potrzeby szyfrowania można przekazać tożsamość zarządzaną przypisaną przez użytkownika do uwierzytelniania z magazynu do usługi Key Vault. Użyj argumentu user-assigned-identity-for-cmk-encryption (CLI) lub user_assigned_identity_for_cmk_encryption (SDK), aby przekazać tożsamość zarządzaną. Ta tożsamość zarządzana może być taka sama lub inna niż tożsamość zarządzana przypisana przez użytkownika podstawowego obszaru roboczego.

Następne kroki