Einrichten der Authentifizierung für Azure Machine Learning-Ressourcen und -Workflows
GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)
Erfahren Sie, wie Sie die Authentifizierung für Ihren Azure Machine Learning-Arbeitsbereich über die Azure CLI oder das Azure Machine Learning SDK v2 einrichten. Die Authentifizierung für Ihren Azure Machine Learning-Arbeitsbereich basiert größtenteils auf Microsoft Entra ID. Im Allgemeinen gibt es vier Authentifizierungsworkflows zum Herstellen einer Verbindung mit dem Arbeitsbereich:
Interaktiv: Sie verwenden Ihr Konto in Microsoft Entra ID, um sich entweder direkt zu authentifizieren oder ein Token zu erhalten, das für die Authentifizierung verwendet wird. Die interaktive Authentifizierung wird beim Experimentieren und bei der iterativen Entwicklung verwendet. Mit der interaktiven Authentifizierung können Sie den Zugriff auf Ressourcen (z. B. einen Webdienst) pro Benutzer steuern.
Dienstprinzipal: Sie erstellen ein Dienstprinzipalkonto in Microsoft Entra ID und verwenden es, um sich zu authentifizieren oder ein Token zu erhalten. Ein Dienstprinzipal wird für die Authentifizierung eines automatisierten Prozesses beim Dienst verwendet, ohne dass eine Benutzerinteraktion erforderlich ist. Ein Beispiel hierfür wäre ein Continuous-Integration- und Bereitstellungsskript, das ein Modell bei jeder Änderung des Trainingscodes trainiert und testet.
Azure CLI-Sitzung: Eine aktive Azure CLI-Sitzung zur Authentifizierung verwenden. Die Azure CLI-Erweiterung für Machine Learning (die
ml
Erweiterung oder CLI v2) ist ein Befehlszeilentool für die Arbeit mit Azure Machine Learning. Sie können sich über die Azure-Befehlszeilenschnittstelle auf Ihrer lokalen Arbeitsstation bei Azure anmelden, ohne Anmeldeinformationen in Python-Code zu speichern oder den Benutzer zur Authentifizierung aufzufordern. Auf ähnliche Weise können Sie die gleichen Skripts als Teil von Continuous Integration- und Continuous Deployment-Pipelines wiederverwenden, während Sie die Azure CLI mit einer Dienstprinzipalidentität authentifizieren.Verwaltete Identität: Wenn Sie das Azure Machine Learning SDK v2 auf einer Compute-Instanz oder einem virtuellen Azure-Computer nutzen, können Sie eine verwaltete Identität für Azure verwenden. Dieser Workflow ermöglicht es der VM, mithilfe der verwalteten Identität eine Verbindung mit dem Arbeitsbereich herzustellen, ohne Anmeldeinformationen im Python-Code zu speichern oder den Benutzer zur Authentifizierung aufzufordern. Azure Machine Learning-Computecluster können auch so konfiguriert werden, dass sie beim Trainieren von Modellen mithilfe einer verwalteten Identität auf den Arbeitsbereich zugreifen.
Unabhängig vom verwendeten Authentifizierungsworkflow wird die rollenbasierte Zugriffssteuerung von Azure (Role-Based Access Control, RBAC) verwendet, um die zulässige Zugriffsebene (Autorisierung) für die Ressourcen zu beschränken. Beispielsweise kann ein Administrator oder Automatisierungsprozess Zugriff auf die Erstellung einer Compute-Instanz haben, sie aber nicht verwenden. Während eine Wissenschaftliche Fachkraft für Daten sie verwenden, aber nicht löschen oder erstellen könnte. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf einen Azure Machine Learning-Arbeitsbereich.
Bedingter Microsoft Entra-Zugriff kann verwendet werden, um darüber hinaus den Zugriff auf den Arbeitsbereich für jeden Authentifizierungsworkflow zu steuern oder einzuschränken. Beispielsweise kann ein Administrator das Zugreifen auf den Arbeitsbereichs nur von verwalteten Geräten zulassen.
Voraussetzungen
Erstellen Sie einen Azure Machine Learning-Arbeitsbereich.
Konfigurieren Sie Ihre Entwicklungsumgebung, oder verwenden Sie eine Azure Machine Learning-Compute-Instanz, und installieren Sie das Azure Machine Learning SDK v2.
Installieren Sie die Azure CLI.
Microsoft Entra ID
Alle Authentifizierungsworkflows für Ihren Arbeitsbereich basieren auf Microsoft Entra ID. Wenn Sie möchten, dass Benutzer sich unter Verwendung individueller Konten authentifizieren, müssen sie über Konten in Ihrer Microsoft Entra ID-Instanz verfügen. Wenn Sie Dienstprinzipale verwenden möchten, müssen diese in Microsoft Entra ID vorhanden sein. Verwaltete Identitäten sind ebenfalls ein Feature von Microsoft Entra ID.
Weitere Informationen zu Microsoft Entra ID finden Sie unter Was ist die Microsoft Entra-Authentifizierung?.
Sobald Sie die Microsoft Entra-Konten erstellen, finden Sie unter Verwalten des Zugriffs auf einen Azure Machine Learning-Arbeitsbereich Informationen zum Erteilen des Zugriffs auf den Arbeitsbereich und andere Vorgänge in Azure Machine Learning.
Verwenden der interaktiven Authentifizierung
GILT FÜR: Python SDK azure-ai-ml v2 (aktuell)
Interaktive Authentifizierung verwendet das Azure Identity-Paket für Python. Die meisten Beispiele verwenden DefaultAzureCredential
für den Zugriff auf Ihre Anmeldeinformationen. Wenn ein Token benötigt wird, wird es mit abwechselnd mit mehreren Identitäten angefordert (EnvironmentCredential
, ManagedIdentityCredential
, SharedTokenCacheCredential
, VisualStudioCodeCredential
, AzureCliCredential
, AzurePowerShellCredential
), wenn ein Token bereitgestellt wird. Weitere Informationen hierzu finden Sie in der Klassenreferenz zu DefaultAzureCredential.
Der folgende Code ist ein Beispiel für die Verwendung von DefaultAzureCredential
zur Authentifizierung. Wenn die Authentifizierung mit DefaultAzureCredential
fehlschlägt, wird stattdessen auf die Authentifizierung über Ihren Webbrowser zurückgegriffen.
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()
Nachdem das Anmeldeinformationsobjekt erstellt ist, wird die Klasse MLClient verwendet, um eine Verbindung mit dem Arbeitsbereich herzustellen. Der folgende Code verwendet beispielsweise die from_config()
-Methode zum Laden von Verbindungsinformationen:
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)
Konfigurieren eines Dienstprinzipals
Um einen Dienstprinzipal (Service Principal, SP) zu verwenden, müssen Sie zunächst den SP erstellen. Gewähren Sie ihm dann Zugriff auf Ihren Arbeitsbereich. Wie bereits erwähnt, wird die rollenbasierte Zugriffssteuerung von Azure (Azure RBAC) verwendet, um den Zugriff zu steuern. Sie müssen daher auch entscheiden, welcher Zugriff dem Dienstprinzipal erteilt werden soll.
Wichtig
Wenn Sie einen Dienstprinzipal verwenden, erteilen Sie ihm den Mindestzugriff, der für den Task erforderlich ist, für den er verwendet wird. Beispielsweise wird einem Dienstprinzipal kein Besitzer- oder Mitwirkendenzugriff erteilt, wenn er lediglich für das Lesen des Zugriffstokens für eine Webbereitstellung verwendet wird.
Der Grund für das Erteilen der geringstmöglichen Zugriffsberechtigungen ist, dass ein Dienstprinzipal ein Kennwort für die Authentifizierung verwendet und dieses möglicherweise als Teil eines Automatisierungsskripts gespeichert wird. Wenn das Kennwort offengelegt wird, wird durch die Beschränkung auf den für einen bestimmten Task erforderlichen Mindestzugriff die mögliche böswillige Verwendung des Dienstprinzipals auf ein Minimum beschränkt.
Die einfachste Art der Erstellung eines Dienstprinzipals und Gewährung von Zugriff auf Ihren Arbeitsbereich ist die Verwendung der Azure CLI. Führen Sie die folgenden Schritte aus, um einen Dienstprinzipal zu erstellen und ihm Zugriff auf Ihren Arbeitsbereich zu gewähren:
Hinweis
Sie müssen ein Administrator für das Abonnement sein, um alle Schritte ausführen zu können.
Authentifizieren Sie sich bei Ihrem Azure-Abonnement:
az login
Wenn die CLI Ihren Standardbrowser öffnen kann, wird sie dies tun und eine Anmeldeseite laden. Andernfalls müssen Sie einen Browser öffnen und die Anweisungen in der Befehlszeile befolgen. Die Anweisungen umfassen das Navigieren zu https://aka.ms/devicelogin und Eingeben eines Autorisierungscodes.
Wenn Sie über mehrere Azure-Abonnements verfügen, können Sie den Befehl
az account set -s <subscription name or ID>
verwenden, um das Abonnement festzulegen. Weitere Informationen finden Sie unter Verwenden mehrerer Azure-Abonnements.Andere Methoden zur Authentifizierung finden Sie unter Anmelden mit der Azure CLI.
Erstellen Sie den Dienstprinzipal. Im folgenden Beispiel wird ein Dienstprinzipal mit dem Namen ml-auth erstellt:
az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
Der Parameter
--json-auth
ist in Azure CLI-Versionen >= 2.51.0 verfügbar. Frühere Versionen verwenden--sdk-auth
.Die Ausgabe ist ein JSON-Dokument ähnlich dem Folgenden. Notieren Sie sich die Werte in den Feldern
clientId
,clientSecret
undtenantId
, da Sie diese für andere Schritte in diesem Artikel benötigen.{ "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" }
Rufen Sie mithilfe des Werts für
clientId
, der im vorherigen Schritt zurückgegeben wurde, die Details für den Dienstprinzipal ab:az ad sp show --id your-client-id
Der folgende JSON-Code ist ein vereinfachtes Beispiel für die Ausgabe des Befehls. Beachten Sie das Feld
objectId
, da Sie seinen Wert im nächsten Schritt benötigen werden.{ "accountEnabled": "True", "addIns": [], "appDisplayName": "ml-auth", ... ... ... "objectId": "your-sp-object-id", "objectType": "ServicePrincipal" }
Verwenden Sie die Informationen in den folgenden Artikeln, um Zugriff auf den Arbeitsbereich und andere von Azure Machine Learning verwendete Ressourcen zu gewähren:
- Verwalten des Zugriffs auf einen Azure Machine Learning-Arbeitsbereich
- Zuweisen von Rollen in der CLI
Wichtig
Der Besitzerzugriff ermöglicht es dem Dienstprinzipal, so gut wie jeden Vorgang in Ihrem Arbeitsbereich durchzuführen. Er wird in diesem Dokument verwendet, um zu veranschaulichen, wie Zugriff gewährt wird. In einer Produktionsumgebung empfiehlt Microsoft, dem Dienstprinzipal nur den für die von Ihnen vorgesehene Rolle erforderlichen Mindestzugriff zu erteilen. Informationen zum Erstellen einer benutzerdefinierten Rolle mit dem für Ihr Szenario erforderlichen Zugriff finden Sie unter Verwalten des Zugriffs auf einen Azure Machine Learning-Arbeitsbereich.
Konfigurieren einer verwalteten Identität
Wichtig
Die verwaltete Identität wird nur unterstützt, wenn das Azure Machine Learning SDK auf einem virtuellen Azure-Computer, mit einem Azure Machine Learning-Computecluster bzw. einer Azure Machine Learning-Compute-Instanz verwendet wird.
Verwaltete Identität mit einem virtuellen Computer
Aktivieren Sie eine vom System zugewiesene verwaltete Identität für Azure-Ressourcen auf dem virtuellen Computer.
Wählen Sie im Azure-Portal Ihren Arbeitsbereich und dann Zugriffssteuerung (IAM) aus.
Wählen Sie Hinzufügen und dann Rollenzuweisung hinzufügen aus, um die Seite Rollenzuweisung hinzufügen zu öffnen.
Wählen Sie die Rolle aus, die Sie der verwalteten Identität zuweisen möchten. Beispiel: Leser. Ausführliche Informationen finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.
Verwaltete Identität mit Computecluster
Weitere Informationen finden Sie unter Einrichten der verwalteten Identität für Computecluster.
Verwaltete Identität mit Compute-Instanz
Weitere Informationen finden Sie unter Einrichten der verwalteten Identität für Compute-Instanz.
Verwenden der Dienstprinzipalauthentifizierung
GILT FÜR: Python SDK azure-ai-ml v2 (aktuell)
Die Authentifizierung mit einem Dienstprinzipal verwendet das Azure Identity-Paket für Python. Die DefaultAzureCredential
-Klasse sucht nach den folgenden Umgebungsvariablen und verwendet die Werte beim Authentifizieren als Dienstprinzipal:
AZURE_CLIENT_ID
- Die Client-ID, die beim Erstellen des Dienstprinzipals zurückgegeben wurde.AZURE_TENANT_ID
- Die Tenant-ID, die beim Erstellen des Dienstprinzipals zurückgegeben wurde.AZURE_CLIENT_SECRET
- Passwort/Anmeldeinfos, die für den Dienstprinzipal erstellt wurden.
Tipp
Während der Entwicklung sollten Sie das Paket Python-dotenv verwenden, um diese Umgebungsvariablen festzulegen. Python-dotenv lädt Umgebungsvariablen aus .env
-Dateien. Die Standarddatei .gitignore
für Python schließt Dateien automatisch .env
aus, daher sollten sie während der Entwicklung nicht in GitHub-Repositorys eingecheckt werden.
Im folgenden Beispiel wird die Verwendung von Python-dotenv veranschaulicht, um die Umgebungsvariablen aus einer .env
-Datei zu laden und dann DefaultAzureCredential
zum Erstellen des Anmeldeinformationenobjekts zu verwenden:
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")
Nachdem das Anmeldeinformationsobjekt erstellt ist, wird die Klasse MLClient verwendet, um eine Verbindung mit dem Arbeitsbereich herzustellen. Der folgende Code verwendet beispielsweise die from_config()
-Methode zum Laden von Verbindungsinformationen:
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)
Der Dienstprinzipal kann auch zum Authentifizieren bei der Azure Machine Learning-REST-API verwendet werden. Sie verwenden den Fluss zum Gewähren von Clientanmeldeinformationen von Microsoft Entra ID, der dienstübergreifende Aufrufe für die monitorlose Authentifizierung in automatisierten Workflows ermöglicht.
Wichtig
Wenn Sie derzeit Azure Active Directory Authentication Library (ADAL) verwenden, um Anmeldeinformationen abzurufen, empfehlen wir Ihnen, zu Microsoft Authentication Library (MSAL) zu migrieren. ADAL-Support endete am 30. Juni 2022.
Informationen und Beispiele zur Authentifizierung mit MSAL finden Sie in den folgenden Artikeln:
- JavaScript – Migrieren einer JavaScript-App von ADAL.js zu MSAL.js.
- Node.js – So migrieren Sie eine Node.js-App von der Microsoft-Authentifizierungsbibliothek zu MSAL.
- Python – Leitfaden zur Migration von Microsoft Authentifizierung Library zu MSAL für Python.
Verwenden von Authentifizierung der verwalteten Identität
GILT FÜR: Python SDK azure-ai-ml v2 (aktuell)
Die Authentifizierung mit einem Dienstprinzipal verwendet das Azure Identity-Paket für Python. Zur Authentifizierung beim Arbeitsbereich von einer VM oder einem Computecluster, die bzw. der mit einer verwalteten Identität konfiguriert ist, verwenden Sie die Klasse DefaultAzureCredential
. Diese Klasse erkennt automatisch, ob eine verwaltete Identität verwendet wird, und verwendet die verwaltete Identität, um sich bei Azure-Diensten zu authentifizieren.
Im folgenden Beispiel wird die Verwendung der DefaultAzureCredential
-Klasse veranschaulicht, um das Anmeldeinformationenobjekt zu erstellen, und es wird dann die MLClient
-Klasse verwendet, um eine Verbindung mit dem Arbeitsbereich herzustellen:
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)
Verwenden von bedingtem Zugriff
Administratoren können Richtlinien für bedingten Microsoft Entra-Zugriff für Benutzer durchsetzen, die sich beim Arbeitsbereich anmelden. Benutzer können beispielsweise zur zweistufigen Authentifizierung verpflichtet werden oder sich nur von verwalteten Geräten anmelden dürfen. Im Folgenden sind die App-IDs aufgeführt, die für bedingten Zugriff verwendet werden sollen:
Anwendungs-ID | Name | Hinweis |
---|---|---|
d7304df8-741f-47d3-9bc2-df0e24e2071f | Azure Machine Learning Workbench-Webanwendung | Azure Machine Learning Studio |
cb2ff863-7f30-4ced-ab89-a00194bcf6d9 | Azure KI Studio-App | Azure KI Studio |
Auf Dienstprinzipal überprüfen
Bestätigen Sie vor dem Hinzufügen der Richtlinie für bedingten Zugriff, dass die Anwendungs-ID im Abschnitt Unternehmensanwendungen des Azure-Portals aufgeführt ist:
Wichtig
Um die Schritte in diesem Abschnitt auszuführen, müssen Sie über Microsoft Entra ID P2 verfügen. Weitere Informationen finden Sie unter Microsoft Entra-Lizenzierung.
Suchen Sie im Suchfeld oben im Portal nach Unternehmensanwendungen, und wählen Sie den Eintrag „Unternehmensanwendung“ aus.
Verwenden Sie in Unternehmensanwendungen das Feld Suche nach Anwendungsname oder Objekt-ID, um nach dem Eintrag zu suchen, den Sie mit bedingtem Zugriff verwenden möchten. Wenn ein Eintrag angezeigt wird, ist ein Dienstprinzipal für die Anwendungs-ID bereits vorhanden. Überspringen Sie die restlichen Schritte in diesem Abschnitt, und wechseln Sie zum Abschnitt Bedingten Zugriff hinzufügen.
Wichtig
Der einzige Filter sollte Anwendungs-ID beginnt mit sein. Entfernen Sie alle anderen Filter, die vorhanden sein könnten.
Wenn kein Eintrag angezeigt wird, verwenden Sie das folgende Azure PowerShell-Cmdlet, um einen Dienstprinzipal für die Anwendungs-ID zu erstellen:
New-AzAdServicePrincipal -ApplicationId "application-ID"
Beispiel:
New-AzADServicePrincipal -ApplicationId "d7304df8-741f-47d3-9bc2-df0e24e2071f"
.Nachdem Sie den Dienstprinzipal erstellt haben, kehren Sie zu Unternehmensanwendungen zurück, und bestätigen Sie, dass Sie jetzt die Anwendungs-ID finden können. Die Liste der IDs finden Sie im Abschnitt Bedingter Zugriff verwenden.
Hinzufügen des bedingten Zugriffs
Um bedingten Zugriff zu verwenden, weisen Sie der Anwendungs-ID die Richtlinie für den bedingten Zugriff zu. Wenn die Anwendung unter „Bedingter Zugriff“ nicht angezeigt wird, führen Sie die Schritte im Abschnitt Auf Dienstprinzipal überprüfen aus.