Configurare l'autenticazione per le risorse e i flussi di lavoro di Azure Machine Learning

SI APPLICA A:Estensione Ml dell'interfaccia della riga di comando di Azure v2 (current)Python SDK azure-ai-ml v2 (current)

Informazioni su come configurare l'autenticazione nell'area di lavoro di Azure Machine Learning dall'interfaccia della riga di comando di Azure o da Azure Machine Learning SDK v2. L'autenticazione per l'area di lavoro di Azure Machine Learning si basa sull'ID Di Ingresso Microsoft per la maggior parte degli elementi. In generale, ci sono quattro flussi di lavoro di autenticazione che è possibile usare per la connessione all'area di lavoro:

  • Interattivo: si usa l'account in Microsoft Entra ID per l'autenticazione diretta o per ottenere un token usato per l'autenticazione. L'autenticazione interattiva viene usata durante la sperimentazione e lo sviluppo iterativo. L'autenticazione interattiva consente di controllare l'accesso alle risorse (ad esempio un servizio Web) in base all'utente.

  • Entità servizio: creare un account dell'entità servizio in Microsoft Entra ID e usarlo per autenticare o ottenere un token. Un'entità servizio viene usata quando è necessario un processo automatizzato per l'autenticazione al servizio senza richiedere l'interazione dell'utente. Ad esempio, uno script di integrazione e distribuzione continua che esegue il training e il test di un modello ogni volta che il codice di training cambia.

  • Sessione dell'interfaccia della riga di comando di Azure: per l'autenticazione si usa una sessione attiva dell'interfaccia della riga di comando di Azure. L'estensione dell'interfaccia della riga di comando di Azure per Machine Learning (l'estensione o l'interfaccia della riga di comando v2) è uno strumento da riga di comando per l'uso ml con Azure Machine Learning. È possibile accedere ad Azure tramite l'interfaccia della riga di comando di Azure nella workstation locale, senza archiviare le credenziali nel codice Python o richiedere all'utente di eseguire l'autenticazione. Analogamente, è possibile riutilizzare gli stessi script dell'integrazione continua e delle pipeline di distribuzione, autenticando l'interfaccia della riga di comando di Azure con un'identità dell'entità servizio.

  • Identità gestita: quando si usa Azure Machine Learning SDK v2 in un'istanza di calcolo o in una macchina virtuale di Azure, è possibile usare un'identità gestita per Azure. Questo flusso di lavoro consente alla macchina virtuale di connettersi all'area di lavoro usando l'identità gestita, senza archiviare le credenziali nel codice Python o richiedere all'utente di eseguire l'autenticazione. I cluster di calcolo di Azure Machine Learning possono anche essere configurati per usare un'identità gestita per accedere all'area di lavoro durante il training dei modelli.

Indipendentemente dal flusso di lavoro di autenticazione usato, il controllo degli accessi in base al ruolo di Azure viene usato per definire l'ambito del livello di accesso (autorizzazione) consentito alle risorse. Ad esempio, un processo di amministrazione o automazione potrebbe avere accesso per creare un'istanza di calcolo, ma non usarla, mentre un data scientist potrebbe usarlo, ma non eliminarlo o crearlo. Per altre informazioni, vedere Gestire gli accessi all'area di lavoro di Azure Machine Learning.

L'accesso condizionale Microsoft Entra può essere usato per controllare ulteriormente o limitare l'accesso all'area di lavoro per ogni flusso di lavoro di autenticazione. Ad esempio, un amministratore può consentire l'accesso all'area di lavoro solo dai dispositivi gestiti.

Prerequisiti

Microsoft Entra ID

Tutti i flussi di lavoro di autenticazione per l'area di lavoro si basano su Microsoft Entra ID. Se si vuole che gli utenti eseguano l'autenticazione usando singoli account, devono avere account nell'ID Microsoft Entra. Se si desidera usare le entità servizio, è necessario che esistano nell'ID Microsoft Entra. Le identità gestite sono anche una funzionalità di Microsoft Entra ID.

Per altre informazioni su Microsoft Entra ID, vedere Che cos'è l'autenticazione di Microsoft Entra.

Dopo aver creato gli account Microsoft Entra, vedere Gestire l'accesso all'area di lavoro di Azure Machine Learning per informazioni sulla concessione dell'accesso all'area di lavoro e ad altre operazioni in Azure Machine Learning.

Usare l'autenticazione interattiva

SI APPLICA A: Python SDK azure-ai-ml v2 (corrente)

L'autenticazione interattiva usa il pacchetto Di identità di Azure per Python. La maggior parte degli esempi usa DefaultAzureCredential per accedere alle credenziali. Quando è necessario un token, richiede uno usando più identità (EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredentialVisualStudioCodeCredential, AzureCliCredential) AzurePowerShellCredentiala sua volta, interrompendosi quando si fornisce un token. Per altre informazioni, vedere le informazioni di riferimento sulla classe DefaultAzureCredential .

Di seguito è riportato un esempio di utilizzo DefaultAzureCredential per l'autenticazione. Se l'autenticazione con DefaultAzureCredential ha esito negativo, viene invece usato un fallback dell'autenticazione tramite il Web browser.

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

Dopo aver creato l'oggetto credenziale, la classe MLClient viene usata per connettersi all'area di lavoro. Ad esempio, il codice seguente usa il metodo per caricare le from_config() informazioni di connessione:

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)

Configurare un'entità servizio

Per usare un'entità servizio (SP), è prima necessario creare il provider di servizi. Concedere quindi l'accesso all'area di lavoro. Come accennato in precedenza, il controllo degli accessi in base al ruolo di Azure viene usato per controllare l'accesso, quindi è anche necessario decidere quale accesso concedere al provider di servizi.

Importante

Quando si usa un'entità servizio, concedere l'accesso minimo necessario per l'attività per cui viene usato. Ad esempio, non si concede l'accesso a un'entità servizio o a un collaboratore se tutto viene usato per la lettura del token di accesso per una distribuzione Web.

Il motivo per cui concedere l'accesso minimo è che un'entità servizio usa una password per l'autenticazione e la password può essere archiviata come parte di uno script di automazione. Se la password viene persa, avere l'accesso minimo necessario per un'attività specifica riduce al minimo l'uso dannoso del sp.

Il modo più semplice per creare un sp e concedere l'accesso all'area di lavoro consiste nell'usare l'interfaccia della riga di comando di Azure. Per creare un'entità servizio e concedergli l'accesso all'area di lavoro, seguire questa procedura:

Nota

Per eseguire tutti questi passaggi, è necessario essere un amministratore della sottoscrizione.

  1. Eseguire l'autenticazione alla sottoscrizione di Azure:

    az login
    

    Se l'interfaccia della riga di comando può aprire il browser predefinito, eseguirà questa operazione e caricherà una pagina di accesso. In caso contrario, è necessario aprire un browser e seguire le istruzioni nella riga di comando. Le istruzioni prevedono l'individuazione di https://aka.ms/devicelogin e l'immissione di un codice di autorizzazione.

    Se si hanno più sottoscrizioni di Azure, è possibile usare il az account set -s <subscription name or ID> comando per impostare la sottoscrizione. Per altre informazioni, vedere Use multiple Azure subscriptions (Usare più sottoscrizioni di Azure).

    Per altri metodi di autenticazione, vedere Accedere con l'interfaccia della riga di comando di Azure.

  2. Creare l'entità servizio. Nell'esempio seguente viene creato un sp denominato ml-auth :

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

    Il parametro --json-auth è disponibile nelle versioni >dell'interfaccia della riga di comando di Azure = 2.51.0. Versioni precedenti a questo utilizzo.--sdk-auth

    L'output sarà un JSON simile al seguente. Prendere nota dei clientIdcampi , clientSecrete tenantId , perché saranno necessari per altri passaggi in questo articolo.

    {
        "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. Recuperare i dettagli per l'entità servizio usando il clientId valore restituito nel passaggio precedente:

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

    Il codice JSON seguente è un esempio semplificato dell'output del comando . Prendere nota del objectId campo, perché sarà necessario il relativo valore per il passaggio successivo.

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. Per concedere l'accesso all'area di lavoro e ad altre risorse usate da Azure Machine Learning, usare le informazioni negli articoli seguenti:

    Importante

    L'accesso proprietario consente all'entità servizio di eseguire praticamente qualsiasi operazione nell'area di lavoro. Viene usato in questo documento per illustrare come concedere l'accesso; in un ambiente di produzione Microsoft consiglia di concedere all'entità servizio l'accesso minimo necessario per eseguire il ruolo previsto. Per informazioni sulla creazione di un ruolo personalizzato con l'accesso necessario per lo scenario, vedere Gestire l'accesso all'area di lavoro di Azure Machine Learning.

Configurare un'identità gestita

Importante

L'identità gestita è supportata solo quando si usa Azure Machine Learning SDK da una macchina virtuale di Azure, un cluster di calcolo di Azure Machine Learning o un'istanza di calcolo.

Identità gestita con una macchina virtuale

  1. Abilitare un'identità gestita assegnata dal sistema per le risorse di Azure nella macchina virtuale.

  2. Nella portale di Azure selezionare l'area di lavoro e quindi selezionare Controllo di accesso (IAM).

  3. Selezionare Aggiungi, Aggiungi assegnazione di ruolo per aprire la pagina Aggiungi assegnazione di ruolo.

  4. Selezionare il ruolo da assegnare all'identità gestita. Ad esempio, Lettore. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

Identità gestita con cluster di calcolo

Per altre informazioni, vedere Configurare l'identità gestita per il cluster di calcolo.

Identità gestita con istanza di calcolo

Per altre informazioni, vedere Configurare l'identità gestita per l'istanza di calcolo.

Usare l'autenticazione basata su entità servizio

SI APPLICA A: Python SDK azure-ai-ml v2 (corrente)

L'autenticazione con un'entità servizio usa il pacchetto Azure Identity per Python. La DefaultAzureCredential classe cerca le variabili di ambiente seguenti e usa i valori durante l'autenticazione come entità servizio:

  • AZURE_CLIENT_ID - ID client restituito quando è stata creata l'entità servizio.
  • AZURE_TENANT_ID - ID tenant restituito al momento della creazione dell'entità servizio.
  • AZURE_CLIENT_SECRET - Password/credenziali generate per l'entità servizio.

Suggerimento

Durante lo sviluppo, prendere in considerazione l'uso del pacchetto python-dotenv per impostare queste variabili di ambiente. Python-dotenv carica le variabili di ambiente dai .env file. Il file standard .gitignore per Python esclude automaticamente i .env file, quindi non deve essere archiviato in alcun repository GitHub durante lo sviluppo.

L'esempio seguente illustra l'uso di python-dotenv per caricare le variabili di ambiente da un .env file e quindi usare DefaultAzureCredential per creare l'oggetto credenziale:

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

Dopo aver creato l'oggetto credenziale, la classe MLClient viene usata per connettersi all'area di lavoro. Ad esempio, il codice seguente usa il metodo per caricare le from_config() informazioni di connessione:

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)

L'entità servizio può essere usata anche per eseguire l'autenticazione all'API REST di Azure Machine Learning. Si usa il flusso di concessione delle credenziali client di Microsoft Entra ID, che consente chiamate da servizio a servizio per l'autenticazione headless nei flussi di lavoro automatizzati.

Importante

Se attualmente si usa Azure Active Directory Authentication Library (ADAL) per ottenere le credenziali, è consigliabile eseguire la migrazione a Microsoft Authentication Library (MSAL). Il supporto di ADAL è terminato il 30 giugno 2022.

Per informazioni ed esempi sull'autenticazione con MSAL, vedere gli articoli seguenti:

Usare l'autenticazione dell'identità gestita

SI APPLICA A: Python SDK azure-ai-ml v2 (corrente)

L'autenticazione con un'identità gestita usa il pacchetto Di identità di Azure per Python. Per eseguire l'autenticazione all'area di lavoro da una macchina virtuale o un cluster di calcolo configurato con un'identità gestita, usare la DefaultAzureCredential classe . Questa classe rileva automaticamente se viene usata un'identità gestita e usa l'identità gestita per l'autenticazione nei servizi di Azure.

Nell'esempio seguente viene illustrato l'uso della DefaultAzureCredential classe per creare l'oggetto credenziale, quindi usare la MLClient classe per connettersi all'area di lavoro:

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)

Usare l'accesso condizionale

Gli amministratori possono applicare i criteri di accesso condizionale di Microsoft Entra per gli utenti che accedono all'area di lavoro. Ad esempio, è possibile richiedere l'autenticazione a due fattori o consentire l'accesso solo dai dispositivi gestiti. Per usare l'accesso condizionale per le aree di lavoro di Azure Machine Learning in particolare, assegnare i criteri di accesso condizionale all'app denominata Azure Machine Learning. L'ID app è 0736f41a-0425-bdb5-1563eff02385.

Passaggi successivi