Konfigurowanie uwierzytelniania dla zasobów i przepływów pracy usługi Azure Machine Learning
DOTYCZY:Rozszerzenie uczenia maszynowego platformy Azure w wersji 2 (bieżąca)
Zestaw SDK języka Python azure-ai-ml w wersji 2 (bieżąca)
Dowiedz się, jak skonfigurować uwierzytelnianie w obszarze roboczym usługi Azure Machine Learning z poziomu interfejsu wiersza polecenia platformy Azure lub zestawu Azure Machine Learning SDK w wersji 2. Uwierzytelnianie w obszarze roboczym usługi Azure Machine Learning jest oparte na usłudze Azure Active Directory (Azure AD) 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: konto w usłudze Azure Active Directory służy do bezpośredniego uwierzytelniania lub uzyskiwania 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: Tworzysz konto jednostki usługi w usłudze Azure Active Directory i używasz go do uwierzytelniania lub uzyskiwania 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 uwierzytelnienia jest używana aktywna sesja interfejsu wiersza polecenia platformy Azure. Rozszerzenie interfejsu wiersza polecenia platformy Azure dla usługi Machine Learning (
ml
rozszerzenie lub interfejs wiersza polecenia w wersji 2) to narzędzie wiersza polecenia do pracy z usługą Azure Machine Learning. 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 Learning 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 Learning można również skonfigurować pod kątem używania tożsamości zarządzanej w celu uzyskania dostępu do obszaru roboczego podczas trenowania modeli.
Niezależnie od używanego przepływu pracy uwierzytelniania kontrola dostępu oparta na rolach (RBAC) platformy Azure służy 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żywać, ale nie usuwać ani tworzyć. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Learning.
Azure AD dostęp warunkowy 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 zarządzanych urządzeń.
Wymagania wstępne
Skonfiguruj środowisko deweloperskie lub użyj wystąpienia obliczeniowego usługi Azure Machine Learning i zainstaluj zestaw Azure Machine Learning SDK w wersji 2.
Zainstaluj interfejs wiersza polecenia platformy Azure.
Azure Active Directory
Wszystkie przepływy pracy uwierzytelniania dla obszaru roboczego polegają na usłudze Azure Active Directory. Jeśli chcesz, aby użytkownicy uwierzytelniali się przy użyciu poszczególnych kont, muszą mieć konta w Azure AD. Jeśli chcesz używać jednostek usługi, muszą istnieć w Azure AD. Tożsamości zarządzane są również funkcją Azure AD.
Aby uzyskać więcej informacji na temat Azure AD, zobacz Co to jest uwierzytelnianie usługi Azure Active Directory.
Po utworzeniu kont Azure AD zobacz Zarządzanie dostępem do obszaru roboczego usługi Azure Machine Learning, aby uzyskać informacje na temat udzielania im dostępu do obszaru roboczego i innych operacji w usłudze Azure Machine Learning.
Korzystanie z uwierzytelniania interakcyjnego
DOTYCZY: Zestaw SDK języka Python azure-ai-ml w wersji 2 (bieżący)
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 potrzebny, żąda jednego przy użyciu wielu tożsamości (EnvironmentCredential
, ManagedIdentityCredential
, SharedTokenCacheCredential
, VisualStudioCodeCredential
, AzureCliCredential
, AzurePowerShellCredential
) z kolei, zatrzymując się, gdy jeden zapewnia token. Aby uzyskać więcej informacji, zobacz dokumentację klasy DefaultAzureCredential .
Poniżej przedstawiono przykład użycia DefaultAzureCredential
do uwierzytelniania. Jeśli uwierzytelnianie przy użyciu DefaultAzureCredential
nie powiedzie się, 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 from_config()
metody do ładowania informacji o połączeniu:
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) platformy Azure jest używana do kontrolowania dostępu, dlatego należy również zdecydować, jaki dostęp ma przyznać sp.
Ważne
W przypadku korzystania z jednostki usługi przyznaj mu minimalny wymagany dostęp do zadania, dla którego jest używany. Na przykład nie można udzielić dostępu właściciela lub współautora jednostki usługi, jeśli jest on używany do odczytywania tokenu dostępu dla wdrożenia internetowego.
Powodem 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.
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ą przeglądanie i https://aka.ms/devicelogin 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 Korzystanie z wielu subskrypcji platformy Azure.Aby uzyskać informacje na temat innych metod uwierzytelniania, zobacz Logowanie za pomocą interfejsu wiersza polecenia platformy Azure.
Utwórz jednostkę usługi. W poniższym przykładzie tworzona jest usługa SP o nazwie ml-auth :
az ad sp create-for-rbac --sdk-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
Dane wyjściowe będą JSON podobne do poniższych. Zanotuj
clientId
pola ,clientSecret
itenantId
, 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" }
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" }
Aby udzielić dostępu do obszaru roboczego i innych zasobów używanych przez usługę Azure Machine Learning, skorzystaj z informacji w następujących artykułach:
- Jak przypisywać role i akcje w usłudze Azure Machine Learning
- Jak przypisywać role w interfejsie wiersza polecenia
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 w celu zademonstrowania sposobu 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 Learning.
Konfigurowanie tożsamości zarządzanej
Ważne
Tożsamość zarządzana jest obsługiwana tylko w przypadku korzystania z zestawu AZURE Machine Learning SDK z maszyny wirtualnej platformy Azure, klastra obliczeniowego usługi Azure Machine Learning lub wystąpienia obliczeniowego.
Tożsamość zarządzana z maszyną wirtualną
Włącz tożsamość zarządzaną przypisaną przez system dla zasobów platformy Azure na maszynie wirtualnej.
W Azure Portal wybierz swój obszar roboczy, a następnie wybierz pozycję Access Control (IAM).
Wybierz pozycję Dodaj, Dodaj przypisanie roli , aby otworzyć stronę Dodawanie przypisania roli.
Wybierz rolę, którą chcesz przypisać tożsamość zarządzaną. 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.
Porada
Podczas programowania rozważ użycie pakietu python-dotenv w celu ustawienia tych zmiennych środowiskowych. Rozszerzenie Python-dotenv ładuje zmienne środowiskowe z .env
plików. Standardowy .gitignore
plik dla języka Python automatycznie wyklucza .env
pliki, więc nie należy ich ewidencjonować w żadnych repozytoriach GitHub podczas opracowywania.
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 być również używana do uwierzytelniania w interfejsie API REST usługi Azure Machine Learning. Przepływ udzielania poświadczeń klienta usługi Azure Active Directory umożliwia wywołania typu "usługa do usługi" 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:
- JavaScript — jak przeprowadzić migrację aplikacji JavaScript z ADAL.js do MSAL.js.
- Node.js — jak przeprowadzić migrację aplikacji Node.js z biblioteki Microsoft Authentication Library do biblioteki MSAL.
- Python — przewodnik migracji biblioteki Microsoft Authentication Library do biblioteki MSAL dla języka Python.
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 tożsamości platformy Azure dla języka Python. Aby uwierzytelnić się w obszarze roboczym z poziomu maszyny wirtualnej lub klastra obliczeniowego skonfigurowanego przy użyciu tożsamości zarządzanej DefaultAzureCredential
, użyj 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ć Azure AD zasad dostępu warunkowego dla użytkowników logujących 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 Learning, przypisz zasady dostępu warunkowego do aplikacji o nazwie Azure Machine Learning. Identyfikator aplikacji to 0736f41a-0425-bdb5-1563eff02385.