Konfigurera autentisering för Azure Machine Learning-resurser och -arbetsflöden

GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)

Lär dig konfigurera autentisering till din Azure Machine Learning-arbetsyta från Azure CLI eller Azure Machine Learning SDK v2. Autentisering till din Azure Machine Learning-arbetsyta baseras på Microsoft Entra-ID för det mesta. I allmänhet finns det fyra autentiseringsarbetsflöden som du kan använda när du ansluter till arbetsytan:

  • Interaktiv: Du använder ditt konto i Microsoft Entra-ID för att antingen autentisera direkt eller för att hämta en token som används för autentisering. Interaktiv autentisering används under experimentering och iterativ utveckling. Med interaktiv autentisering kan du styra åtkomsten till resurser (till exempel en webbtjänst) per användare.

  • Tjänstens huvudnamn: Du skapar ett konto för tjänstens huvudnamn i Microsoft Entra-ID och använder det för att autentisera eller hämta en token. Ett huvudnamn för tjänsten används när du behöver en automatiserad process för att autentisera till tjänsten utan att användaren behöver interagera. Till exempel ett skript för kontinuerlig integrering och distribution som tränar och testar en modell varje gång träningskoden ändras.

  • Azure CLI-session: Du använder en aktiv Azure CLI-session för att autentisera. Azure CLI-tillägget för Machine Learning ( ml tillägget eller CLI v2) är ett kommandoradsverktyg för att arbeta med Azure Machine Learning. Du kan logga in på Azure via Azure CLI på din lokala arbetsstation, utan att lagra autentiseringsuppgifter i Python-kod eller uppmana användaren att autentisera. På samma sätt kan du återanvända samma skript som en del av pipelines för kontinuerlig integrering och distribution, samtidigt som du autentiserar Azure CLI med en identitet för tjänstens huvudnamn.

  • Hanterad identitet: När du använder Azure Machine Learning SDK v2 på en beräkningsinstans eller på en virtuell Azure-dator kan du använda en hanterad identitet för Azure. Det här arbetsflödet gör att den virtuella datorn kan ansluta till arbetsytan med hjälp av den hanterade identiteten, utan att lagra autentiseringsuppgifter i Python-kod eller uppmana användaren att autentisera. Azure Machine Learning-beräkningskluster kan också konfigureras för att använda en hanterad identitet för att komma åt arbetsytan när du tränar modeller.

Oavsett vilket autentiseringsarbetsflöde som används används rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att begränsa den åtkomstnivå (auktorisering) som tillåts till resurserna. En administratörs- eller automatiseringsprocess kan till exempel ha åtkomst till att skapa en beräkningsinstans, men inte använda den, medan en dataexpert kan använda den, men inte ta bort eller skapa den. Mer information finns i Hantera åtkomst till Azure Machine Learning-arbetsyta.

Villkorsstyrd åtkomst i Microsoft Entra kan användas för att ytterligare kontrollera eller begränsa åtkomsten till arbetsytan för varje autentiseringsarbetsflöde. En administratör kan till exempel endast tillåta åtkomst till arbetsytor från hanterade enheter.

Förutsättningar

Microsoft Entra-ID

Alla autentiseringsarbetsflöden för din arbetsyta förlitar sig på Microsoft Entra-ID. Om du vill att användarna ska autentisera med enskilda konton måste de ha konton i ditt Microsoft Entra-ID. Om du vill använda tjänstens huvudnamn måste de finnas i ditt Microsoft Entra-ID. Hanterade identiteter är också en funktion i Microsoft Entra-ID.

Mer information om Microsoft Entra-ID finns i Vad är Microsoft Entra-autentisering.

När du har skapat Microsoft Entra-kontona kan du läsa Hantera åtkomst till Azure Machine Learning-arbetsytan för information om hur du ger dem åtkomst till arbetsytan och andra åtgärder i Azure Machine Learning.

Använda interaktiv autentisering

GÄLLER FÖR: Python SDK azure-ai-ml v2 (aktuell)

Interaktiv autentisering använder Azure Identity-paketet för Python. De flesta exempel används DefaultAzureCredential för att komma åt dina autentiseringsuppgifter. När en token behövs begär den en med flera identiteter (EnvironmentCredential, , ManagedIdentityCredential, SharedTokenCacheCredentialVisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential) i sin tur och stoppar när en ger en token. Mer information finns i klassreferensen DefaultAzureCredential .

Följande är ett exempel på hur du använder DefaultAzureCredential för att autentisera. Om autentiseringen misslyckas DefaultAzureCredential används i stället en återställning av autentisering via webbläsaren.

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()

När autentiseringsobjektet har skapats används klassen MLClient för att ansluta till arbetsytan. Följande kod använder from_config() till exempel metoden för att läsa in anslutningsinformation:

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)

Konfigurera ett huvudnamn för tjänsten

Om du vill använda tjänstens huvudnamn (SP) måste du först skapa SP. Ge den sedan åtkomst till din arbetsyta. Som tidigare nämnts används rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att styra åtkomsten, så du måste också bestämma vilken åtkomst som ska beviljas SP.

Viktigt!

När du använder ett huvudnamn för tjänsten beviljar du den lägsta åtkomst som krävs för den uppgift som den används för. Du skulle till exempel inte bevilja en ägare eller deltagare åtkomst till tjänstens huvudnamn om allt det används för är att läsa åtkomsttoken för en webbdistribution.

Anledningen till att bevilja minst åtkomst är att tjänstens huvudnamn använder ett lösenord för att autentisera och att lösenordet kan lagras som en del av ett automationsskript. Om lösenordet läcker minimeras den skadliga användningen av SP om du har den minsta åtkomst som krävs för en viss uppgift.

Det enklaste sättet att skapa ett SP och bevilja åtkomst till din arbetsyta är att använda Azure CLI. Använd följande steg för att skapa ett huvudnamn för tjänsten och ge den åtkomst till din arbetsyta:

Kommentar

Du måste vara administratör för prenumerationen för att kunna utföra alla dessa steg.

  1. Autentisera till din Azure-prenumeration:

    az login
    

    Om CLI kan öppna din standardwebbläsare så sker det och en inloggningssida läses in. Annars måste du öppna en webbläsare och följa anvisningarna på kommandoraden. Anvisningarna omfattar att bläddra till https://aka.ms/devicelogin och ange en auktoriseringskod.

    Om du har flera Azure-prenumerationer kan du använda az account set -s <subscription name or ID> kommandot för att ange prenumerationen. Mer information finns i Använda flera Azure-prenumerationer.

    Andra metoder för autentisering finns i Logga in med Azure CLI.

  2. Skapa tjänstens huvudnamn. I följande exempel skapas en SP med namnet ml-auth :

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

    Parametern --json-auth är tillgänglig i Azure CLI-versioner >= 2.51.0. Versioner före den här användningen --sdk-auth.

    Utdata kommer att vara en JSON som liknar följande. Anteckna fälten clientId, clientSecretoch tenantId eftersom du behöver dem för andra steg i den här artikeln.

    {
        "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. Hämta information om tjänstens huvudnamn med hjälp av värdet clientId som returnerades i föregående steg:

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

    Följande JSON är ett förenklat exempel på utdata från kommandot. Anteckna fältet objectId eftersom du behöver dess värde för nästa steg.

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. Om du vill bevilja åtkomst till arbetsytan och andra resurser som används av Azure Machine Learning använder du informationen i följande artiklar:

    Viktigt!

    Med ägaråtkomst kan tjänstens huvudnamn utföra praktiskt taget alla åtgärder på din arbetsyta. Det används i det här dokumentet för att visa hur du beviljar åtkomst. i en produktionsmiljö rekommenderar Microsoft att tjänstens huvudnamn beviljas den minsta åtkomst som krävs för att utföra den roll som du avser att utföra den. Information om hur du skapar en anpassad roll med den åtkomst som behövs för ditt scenario finns i Hantera åtkomst till Azure Machine Learning-arbetsytan.

Konfigurera en hanterad identitet

Viktigt!

Hanterad identitet stöds endast när du använder Azure Machine Learning SDK från en virtuell Azure-dator, ett Azure Machine Learning-beräkningskluster eller en beräkningsinstans.

Hanterad identitet med en virtuell dator

  1. Aktivera en systemtilldelad hanterad identitet för Azure-resurser på den virtuella datorn.

  2. Från Azure-portalen väljer du din arbetsyta och väljer sedan Åtkomstkontroll (IAM).

  3. Välj Lägg till, Lägg till rolltilldelning för att öppna sidan Lägg till rolltilldelning.

  4. Välj den roll som du vill tilldela den hanterade identiteten. Till exempel Läsare. Läs mer om att tilldela roller i Tilldela Azure-roller via Azure Portal.

Hanterad identitet med beräkningskluster

Mer information finns i Konfigurera hanterad identitet för beräkningskluster.

Hanterad identitet med beräkningsinstans

Mer information finns i Konfigurera hanterad identitet för beräkningsinstans.

Använda autentisering med tjänstens huvudnamn

GÄLLER FÖR: Python SDK azure-ai-ml v2 (aktuell)

Autentisering med tjänstens huvudnamn använder Azure Identity-paketet för Python. Klassen DefaultAzureCredential söker efter följande miljövariabler och använder värdena när de autentiseras som tjänstens huvudnamn:

  • AZURE_CLIENT_ID – Klient-ID:t returnerades när du skapade tjänstens huvudnamn.
  • AZURE_TENANT_ID – Klientorganisations-ID:t returnerades när du skapade tjänstens huvudnamn.
  • AZURE_CLIENT_SECRET – Lösenordet/autentiseringsuppgifterna som genererats för tjänstens huvudnamn.

Dricks

Under utvecklingen bör du överväga att använda python-dotenv-paketet för att ange dessa miljövariabler. Python-dotenv läser in miljövariabler från .env filer. Standardfilen .gitignore för Python exkluderar .env automatiskt filer, så de bör inte checkas in på några GitHub-lagringsplatser under utvecklingen.

I följande exempel visas hur du använder python-dotenv för att läsa in miljövariablerna från en .env fil och sedan använda DefaultAzureCredential för att skapa autentiseringsobjektet:

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")

När autentiseringsobjektet har skapats används klassen MLClient för att ansluta till arbetsytan. Följande kod använder from_config() till exempel metoden för att läsa in anslutningsinformation:

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)

Tjänstens huvudnamn kan också användas för att autentisera till Rest-API:et för Azure Machine Learning. Du använder beviljandeflödet för Microsoft Entra-ID-klientautentiseringsuppgifter, som tillåter tjänst-till-tjänst-anrop för huvudlös autentisering i automatiserade arbetsflöden.

Viktigt!

Om du använder Azure Active Directory Authentication Library (ADAL) för att hämta autentiseringsuppgifter rekommenderar vi att du migrerar till Microsoft Authentication Library (MSAL). ADAL-supporten upphörde den 30 juni 2022.

Information och exempel på autentisering med MSAL finns i följande artiklar:

Använda hanterad identitetsautentisering

GÄLLER FÖR: Python SDK azure-ai-ml v2 (aktuell)

Autentisering med en hanterad identitet använder Azure Identity-paketet för Python. Om du vill autentisera till arbetsytan från en virtuell dator eller ett beräkningskluster som har konfigurerats med en hanterad identitet använder du DefaultAzureCredential klassen . Den här klassen identifierar automatiskt om en hanterad identitet används och använder den hanterade identiteten för att autentisera till Azure-tjänster.

I följande exempel visas hur du använder DefaultAzureCredential klassen för att skapa autentiseringsobjektet och sedan använder MLClient klassen för att ansluta till arbetsytan:

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)

Använda villkorsstyrd åtkomst

Som administratör kan du tillämpa principer för villkorsstyrd åtkomst i Microsoft Entra för användare som loggar in på arbetsytan. Du kan till exempel kräva tvåfaktorautentisering eller endast tillåta inloggning från hanterade enheter. Om du vill använda villkorlig åtkomst för Azure Machine Learning-arbetsytor specifikt tilldelar du principen för villkorsstyrd åtkomst till appen med namnet Azure Machine Learning. App-ID:t är 0736f41a-0425-bdb5-1563eff02385.

Nästa steg