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 verwendet, wenn ein automatisierter Prozess sich beim Dienst authentifizieren soll, 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 könnte ein Administrator oder ein Automatisierungsprozess Zugriff haben, um eine Compute-Instanz zu erstellen, 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

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?.

Nachdem Sie die Microsoft Entra-Konten erstellt haben, 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.

Im Folgenden sehen Sie 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 wurde, 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.

  1. Authentifizieren Sie sich bei Ihrem Azure-Abonnement:

    az login
    

    Die CLI öffnet Ihren Standardbrowser, sofern sie dazu in der Lage ist, und lädt eine Anmeldeseite. 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.

  2. 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. Frühere Versionen nutzen --sdk-auth.

    Die Ausgabe ist eine JSON-Datei wie etwa die folgende. Notieren Sie sich die Werte in den Feldern clientId, clientSecretund tenantId, 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"
    }
    
  3. 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"
    }
    
  4. Verwenden Sie die Informationen in den folgenden Artikeln, um Zugriff auf den Arbeitsbereich und andere von Azure Machine Learning verwendete Ressourcen zu gewähren:

    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

  1. Aktivieren Sie eine vom System zugewiesene verwaltete Identität für Azure-Ressourcen auf dem virtuellen Computer.

  2. Wählen Sie im Azure-Portal Ihren Arbeitsbereich und dann Zugriffssteuerung (IAM) aus.

  3. Wählen Sie Hinzufügen und dann Rollenzuweisung hinzufügen aus, um die Seite Rollenzuweisung hinzufügen zu öffnen.

  4. 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 wurde, 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:

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. Um den bedingten Zugriff speziell für Azure Machine Learning-Arbeitsbereiche zu verwenden, weisen Sie die Richtlinie für bedingten Zugriff der App Azure Machine Learning zu. Die App-ID lautet 0736f41a-0425-bdb5-1563eff02385.

Nächste Schritte