Konfigurowanie uwierzytelniania dla zasobów i przepływów pracy usługi Azure Machine Learning

DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (current)Zestaw PYTHON SDK azure-ai-ml v2 (bieżąca)

Dowiedz się, jak skonfigurować uwierzytelnianie w obszarze roboczym usługi Azure Machine Learning z poziomu interfejsu wiersza polecenia platformy Azure lub zestawu SDK v2 usługi Azure Machine Learning. Uwierzytelnianie w obszarze roboczym usługi Azure Machine Edukacja jest oparte na identyfikatorze Entra firmy Microsoft dla większości rzeczy. Ogólnie rzecz biorąc, istnieją cztery przepływy pracy uwierzytelniania, których można użyć podczas nawiązywania połączenia z obszarem roboczym:

  • Interakcyjne: używasz swojego konta w identyfikatorze Entra firmy Microsoft do bezpośredniego uwierzytelniania lub do uzyskania tokenu używanego do uwierzytelniania. Uwierzytelnianie interakcyjne jest używane podczas eksperymentowania i programowania iteracyjnego. Uwierzytelnianie interakcyjne umożliwia kontrolowanie dostępu do zasobów (takich jak usługa internetowa) na podstawie poszczególnych użytkowników.

  • Jednostka usługi: utworzysz konto jednostki usługi w identyfikatorze Entra firmy Microsoft i użyjesz go do uwierzytelniania lub uzyskania tokenu. Jednostka usługi jest używana, gdy potrzebny jest zautomatyzowany proces uwierzytelniania w usłudze bez konieczności interakcji z użytkownikiem. Na przykład skrypt ciągłej integracji i wdrażania, który trenuje i testuje model za każdym razem, gdy zmienia się kod trenowania.

  • Sesja interfejsu wiersza polecenia platformy Azure: do uwierzytelniania jest używana aktywna sesja interfejsu wiersza polecenia platformy Azure. Rozszerzenie interfejsu wiersza polecenia platformy Azure dla usługi Machine Edukacja (mlrozszerzenie lub interfejs wiersza polecenia w wersji 2) to narzędzie wiersza polecenia do pracy z usługą Azure Machine Edukacja. Możesz zalogować się do platformy Azure za pośrednictwem interfejsu wiersza polecenia platformy Azure na lokalnej stacji roboczej bez przechowywania poświadczeń w kodzie języka Python lub monitowania użytkownika o uwierzytelnienie. Podobnie można ponownie użyć tych samych skryptów w ramach potoków ciągłej integracji i wdrażania, uwierzytelnianie interfejsu wiersza polecenia platformy Azure przy użyciu tożsamości jednostki usługi.

  • Tożsamość zarządzana: w przypadku korzystania z zestawu Azure Machine Edukacja SDK w wersji 2 w wystąpieniu obliczeniowym lub na maszynie wirtualnej platformy Azure można użyć tożsamości zarządzanej dla platformy Azure. Ten przepływ pracy umożliwia maszynie wirtualnej nawiązanie połączenia z obszarem roboczym przy użyciu tożsamości zarządzanej bez przechowywania poświadczeń w kodzie języka Python lub monitowania użytkownika o uwierzytelnienie. Klastry obliczeniowe usługi Azure Machine Edukacja można również skonfigurować tak, aby używać tożsamości zarządzanej do uzyskiwania dostępu do obszaru roboczego podczas trenowania modeli.

Niezależnie od używanego przepływu pracy uwierzytelniania kontrola dostępu oparta na rolach platformy Azure (RBAC) jest używana do określania zakresu poziomu dostępu (autoryzacji) dozwolonego dla zasobów. Na przykład administrator lub proces automatyzacji może mieć dostęp do tworzenia wystąpienia obliczeniowego, ale nie używać go, podczas gdy analityk danych może go użyć, ale nie może go usunąć ani utworzyć. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Edukacja.

Dostęp warunkowy firmy Microsoft Entra może służyć do dalszej kontroli lub ograniczenia dostępu do obszaru roboczego dla każdego przepływu pracy uwierzytelniania. Na przykład administrator może zezwolić na dostęp do obszaru roboczego tylko z urządzeń zarządzanych.

Wymagania wstępne

Identyfikator usługi Microsoft Entra

Wszystkie przepływy pracy uwierzytelniania dla obszaru roboczego korzystają z identyfikatora Entra firmy Microsoft. Jeśli chcesz, aby użytkownicy uwierzytelniali się przy użyciu poszczególnych kont, muszą mieć konta w identyfikatorze Microsoft Entra. Jeśli chcesz używać jednostek usługi, muszą istnieć w identyfikatorze Entra firmy Microsoft. Tożsamości zarządzane są również funkcją identyfikatora Entra firmy Microsoft.

Aby uzyskać więcej informacji na temat identyfikatora Entra firmy Microsoft, zobacz Co to jest uwierzytelnianie firmy Microsoft Entra.

Po utworzeniu kont microsoft Entra zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Edukacja, aby uzyskać informacje na temat udzielania im dostępu do obszaru roboczego i innych operacji w usłudze Azure Machine Edukacja.

Korzystanie z uwierzytelniania interakcyjnego

DOTYCZY: Zestaw PYTHON SDK azure-ai-ml w wersji 2 (bieżąca)

Uwierzytelnianie interakcyjne używa pakietu tożsamości platformy Azure dla języka Python. Większość przykładów służy DefaultAzureCredential do uzyskiwania dostępu do poświadczeń. Gdy token jest wymagany, żąda jednego przy użyciu wielu tożsamości (EnvironmentCredential, ManagedIdentityCredential, , SharedTokenCacheCredentialVisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential) z kolei, zatrzymując się, gdy jeden udostępnia token. Aby uzyskać więcej informacji, zobacz dokumentację klasy DefaultAzureCredential .

Poniżej przedstawiono przykład użycia DefaultAzureCredential do uwierzytelniania. Jeśli uwierzytelnianie nie DefaultAzureCredential powiedzie się, zamiast tego zostanie użyta rezerwa uwierzytelniania za pośrednictwem przeglądarki internetowej.

from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

try:
    credential = DefaultAzureCredential()
    # Check if given credential can get token successfully.
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    # Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
    # This will open a browser page for
    credential = InteractiveBrowserCredential()

Po utworzeniu obiektu poświadczeń klasa MLClient jest używana do nawiązywania połączenia z obszarem roboczym. Na przykład poniższy kod używa metody do ładowania informacji o połączeniu from_config() :

from azure.ai.ml import MLClient
try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Konfigurowanie nazwy głównej usługi

Aby użyć jednostki usługi (SP), należy najpierw utworzyć sp. Następnie przyznaj mu dostęp do obszaru roboczego. Jak wspomniano wcześniej, kontrola dostępu oparta na rolach platformy Azure (RBAC) jest używana do kontrolowania dostępu, dlatego należy również zdecydować, jaki dostęp ma udzielić dostawcy usług.

Ważne

W przypadku korzystania z jednostki usługi przyznaj mu minimalny dostęp wymagany dla zadania , dla którego jest używany. Na przykład nie można udzielić dostępu właściciela jednostki usługi lub współautora, jeśli wszystkie używane do tego celu odczytuje token dostępu dla wdrożenia internetowego.

Przyczyną udzielenia najmniejszego dostępu jest to, że jednostka usługi używa hasła do uwierzytelniania, a hasło może być przechowywane w ramach skryptu automatyzacji. Jeśli hasło zostanie ujawnione, minimalny dostęp wymagany do wykonania określonych zadań minimalizuje złośliwe użycie dostawcy usług.

Najprostszym sposobem utworzenia dostawcy usługi i udzielenia dostępu do obszaru roboczego jest użycie interfejsu wiersza polecenia platformy Azure. Aby utworzyć jednostkę usługi i udzielić jej dostępu do obszaru roboczego, wykonaj następujące kroki:

Uwaga

Aby wykonać wszystkie te kroki, musisz być administratorem subskrypcji.

  1. Uwierzytelnianie w subskrypcji platformy Azure:

    az login
    

    Jeśli interfejs wiersza polecenia może otworzyć Twoją domyślną przeglądarkę, zrobi to i załaduje stronę logowania. W przeciwnym razie musisz otworzyć przeglądarkę i postępować zgodnie z instrukcjami w wierszu polecenia. Instrukcje obejmują przechodzenie do https://aka.ms/devicelogin i wprowadzanie kodu autoryzacji.

    Jeśli masz wiele subskrypcji platformy Azure, możesz użyć az account set -s <subscription name or ID> polecenia , aby ustawić subskrypcję. Aby uzyskać więcej informacji, zobacz Używanie wielu subskrypcji platformy Azure.

    Aby uzyskać informacje na temat innych metod uwierzytelniania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.

  2. Utwórz jednostkę usługi. W poniższym przykładzie tworzony jest sp o nazwie ml-auth :

    az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
    

    Parametr --json-auth jest dostępny w wersjach >interfejsu wiersza polecenia platformy Azure = 2.51.0. Wersje przed tym użyciem .--sdk-auth

    Dane wyjściowe będą JSON podobne do poniższych. Zanotuj clientIdpola , clientSecreti tenantId , ponieważ będą one potrzebne do wykonania innych kroków w tym artykule.

    {
        "clientId": "your-client-id",
        "clientSecret": "your-client-secret",
        "subscriptionId": "your-sub-id",
        "tenantId": "your-tenant-id",
        "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
        "resourceManagerEndpointUrl": "https://management.azure.com",
        "activeDirectoryGraphResourceId": "https://graph.windows.net",
        "sqlManagementEndpointUrl": "https://management.core.windows.net:5555",
        "galleryEndpointUrl": "https://gallery.azure.com/",
        "managementEndpointUrl": "https://management.core.windows.net"
    }
    
  3. Pobierz szczegóły jednostki usługi przy użyciu clientId wartości zwróconej w poprzednim kroku:

    az ad sp show --id your-client-id
    

    Poniższy kod JSON jest uproszczonym przykładem danych wyjściowych polecenia . Zanotuj objectId pole, ponieważ będzie potrzebna jego wartość dla następnego kroku.

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. Aby udzielić dostępu do obszaru roboczego i innych zasobów używanych przez usługę Azure Machine Edukacja, skorzystaj z informacji w następujących artykułach:

    Ważne

    Dostęp właściciela umożliwia jednostce usługi wykonywanie praktycznie dowolnej operacji w obszarze roboczym. Jest on używany w tym dokumencie, aby zademonstrować sposób udzielania dostępu; w środowisku produkcyjnym firma Microsoft zaleca przyznanie jednostce usługi minimalnego dostępu wymaganego do wykonania roli, dla której zamierzasz. Aby uzyskać informacje na temat tworzenia roli niestandardowej z dostępem wymaganym dla danego scenariusza, zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Edukacja.

Konfigurowanie tożsamości zarządzanej

Ważne

Tożsamość zarządzana jest obsługiwana tylko w przypadku korzystania z zestawu AZURE Machine Edukacja SDK z maszyny wirtualnej platformy Azure, klastra obliczeniowego usługi Azure Machine Edukacja lub wystąpienia obliczeniowego.

Tożsamość zarządzana przy użyciu maszyny wirtualnej

  1. Włącz tożsamość zarządzaną przypisaną przez system dla zasobów platformy Azure na maszynie wirtualnej.

  2. W witrynie Azure Portal wybierz swój obszar roboczy, a następnie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).

  3. Wybierz pozycję Dodaj, Dodaj przypisanie roli, aby otworzyć stronę Dodawanie przypisania roli.

  4. Wybierz rolę, którą chcesz przypisać tożsamości zarządzanej. Na przykład Czytelnik. Aby uzyskać szczegółowe instrukcje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

Tożsamość zarządzana z klastrem obliczeniowym

Aby uzyskać więcej informacji, zobacz Konfigurowanie tożsamości zarządzanej dla klastra obliczeniowego.

Tożsamość zarządzana z wystąpieniem obliczeniowym

Aby uzyskać więcej informacji, zobacz Konfigurowanie tożsamości zarządzanej dla wystąpienia obliczeniowego.

Korzystanie z uwierzytelniania jednostki usługi

DOTYCZY: Zestaw PYTHON SDK azure-ai-ml w wersji 2 (bieżąca)

Uwierzytelnianie za pomocą jednostki usługi używa pakietu Azure Identity dla języka Python. Klasa DefaultAzureCredential wyszukuje następujące zmienne środowiskowe i używa wartości podczas uwierzytelniania jako jednostki usługi:

  • AZURE_CLIENT_ID — Identyfikator klienta zwrócony podczas tworzenia jednostki usługi.
  • AZURE_TENANT_ID — Identyfikator dzierżawy zwrócony podczas tworzenia jednostki usługi.
  • AZURE_CLIENT_SECRET — hasło/poświadczenia wygenerowane dla jednostki usługi.

Napiwek

Podczas programowania rozważ użycie pakietu python-dotenv , aby ustawić te zmienne środowiskowe. Rozszerzenie Python-dotenv ładuje zmienne środowiskowe z .env plików. Plik standardowy dla języka .gitignore Python automatycznie wyklucza .env pliki, więc nie należy ich ewidencjonować w żadnych repozytoriach GitHub podczas programowania.

W poniższym przykładzie pokazano, jak za pomocą polecenia python-dotenv załadować zmienne środowiskowe z .env pliku, a następnie użyć polecenia DefaultAzureCredential w celu utworzenia obiektu poświadczeń:

from dotenv import load_dotenv

if ( os.environ['ENVIRONMENT'] == 'development'):
    print("Loading environment variables from .env file")
    load_dotenv(".env")

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")

Po utworzeniu obiektu poświadczeń klasa MLClient jest używana do nawiązywania połączenia z obszarem roboczym. Na przykład poniższy kod używa metody do ładowania informacji o połączeniu from_config() :

try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Jednostka usługi może również służyć do uwierzytelniania w interfejsie API REST usługi Azure Machine Edukacja. Używasz przepływu udzielania poświadczeń klienta identyfikatora entra firmy Microsoft, który umożliwia wywołania typu service-to-service na potrzeby uwierzytelniania bezgłowego w zautomatyzowanych przepływach pracy.

Ważne

Jeśli obecnie używasz biblioteki Azure Active Directory Authentication Library (ADAL) w celu uzyskania poświadczeń, zalecamy przeprowadzenie migracji do biblioteki Microsoft Authentication Library (MSAL). Wsparcie biblioteki ADAL zakończyło się 30 czerwca 2022 r.

Aby uzyskać informacje i przykłady dotyczące uwierzytelniania za pomocą biblioteki MSAL, zobacz następujące artykuły:

Korzystanie z uwierzytelniania tożsamości zarządzanej

DOTYCZY: Zestaw PYTHON SDK azure-ai-ml w wersji 2 (bieżąca)

Uwierzytelnianie przy użyciu tożsamości zarządzanej używa pakietu Azure Identity dla języka Python. Aby uwierzytelnić się w obszarze roboczym z maszyny wirtualnej lub klastra obliczeniowego skonfigurowanego przy użyciu tożsamości zarządzanej, użyj DefaultAzureCredential klasy . Ta klasa automatycznie wykrywa, czy tożsamość zarządzana jest używana i używa tożsamości zarządzanej do uwierzytelniania w usługach platformy Azure.

W poniższym przykładzie pokazano użycie DefaultAzureCredential klasy do utworzenia obiektu poświadczeń, a następnie użycie MLClient klasy w celu nawiązania połączenia z obszarem roboczym:

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")

try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Korzystanie z dostępu warunkowego

Jako administrator możesz wymusić zasady dostępu warunkowego firmy Microsoft dla użytkowników logujący się do obszaru roboczego. Możesz na przykład wymagać uwierzytelniania dwuskładnikowego lub zezwolić na logowanie tylko z urządzeń zarządzanych. Aby użyć dostępu warunkowego dla obszarów roboczych usługi Azure Machine Edukacja, przypisz zasady dostępu warunkowego do aplikacji o nazwie Azure Machine Edukacja. Identyfikator aplikacji to 0736f41a-0425-bdb5-1563eff02385.

Następne kroki