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 (corrente)SDK Python azure-ai-ml v2 (corrente)

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 su Microsoft Entra ID 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: usare il proprio account Microsoft Entra ID per l'autenticazione diretta o per ottenere un token che viene 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 l'autenticazione o per 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 subisce una modifica.

  • 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 ml o l'interfaccia della riga di comando v2) è uno strumento della riga di comando per l'uso 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 tramite l’autenticazione dell'interfaccia della riga di comando di Azure con un'identità dell'entità servizio.

  • Identità gestita: quando si usa l’SDK di Azure Machine Learning v2 in un’istanza di ambiente di calcolo o su 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. È anche possibile configurare cluster di elaborazione di Azure Machine Learning per usare un'identità gestita per l'accesso 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 (RBAC) 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 ambiente di calcolo ma non per usarla, mentre un data scientist potrebbe usarla ma non eliminarla o crearla. Per altre informazioni, vedere Gestire gli accessi all'area di lavoro di Azure Machine Learning.

L'accesso condizionale di 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 desidera che gli utenti eseguano l'autenticazione usando singoli account, gli utenti devono disporre di account nella propria istanza di Microsoft Entra ID. Per usare le entità servizio, tali entità devono esistere nella propria istanza di Microsoft Entra ID. Anche le identità gestite sono 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 di 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 altre operazioni in Azure Machine Learning.

Usare l'autenticazione interattiva

SI APPLICA A: SDK Python 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 l’accesso alle proprie credenziali. Quando è necessario un token, ne chiede uno che usa più identità (EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential, VisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential) a turno, arrestandosi quando viene fornito un token. Per altre informazioni, vedere il riferimento alla classe DefaultAzureCredential.

Di seguito è riportato un esempio d’uso di DefaultAzureCredential per l’autenticazione. Se l'esito dell’autenticazione con DefaultAzureCredential è negativo, viene usato un fallback di autenticazione tramite il Web browser dell’utente.

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, viene usata la classe MLClient per la connessione all'area di lavoro. Ad esempio, il codice seguente usa il metodo from_config() per il caricamento delle 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), occorre prima crearla. Concedere, quindi, l'accesso alla propria area di lavoro all'entità servizio. Come accennato in precedenza, il controllo degli accessi in base al ruolo (RBAC) di Azure viene usato per controllare l'accesso, quindi occorre anche decidere quale accesso concedere all'entità servizio.

Importante

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

La concessione dell'accesso minimo è motivata dal fatto che un'entità servizio usa una password per l’autenticazione e tale password può essere memorizzata in uno script di automazione. Se la password viene persa, la concessione dell'accesso minimo per lo svolgimento di un'attività specifica riduce al minimo l'uso dannoso dell'entità servizio.

Il modo più semplice per creare un'entità servizio e concederle l'accesso alla propria area di lavoro consiste nell'uso dell'interfaccia della riga di comando di Azure. Per creare un'entità servizio e concederle l'accesso alla propria area di lavoro, effettuare la procedura seguente:

Nota

L’intera procedura può essere eseguita solo da 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.

    In caso di più sottoscrizioni di Azure, è possibile usare il comando az account set -s <subscription name or ID> 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 creata un'entità servizio denominata 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 >= 2.51.0 dell'interfaccia della riga di comando di Azure. Le versioni precedenti usano --sdk-auth.

    L'output sarà un JSON simile al seguente. Prendere nota dei campi clientId, clientSecret e tenantId perché saranno necessari per gli altri passaggi riportati 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 valore clientId 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 campo objectId perché il suo valore sarà necessario 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, consultare le informazioni presenti negli articoli seguenti:

    Importante

    L'accesso come proprietario consente all'entità servizio di eseguire praticamente qualunque operazione nella propria 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 lo svolgimento del ruolo previsto. Per informazioni sulla creazione di un ruolo personalizzato con l'accesso necessario per il proprio 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 l’SDK di Azure Machine Learning da una macchina virtuale di Azure, un cluster di elaborazione o un'istanza di ambiente di calcolo di Azure Machine Learning.

Identità gestita con una macchina virtuale

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

  2. Nel portale di Azure selezionare l'area di lavoro e scegliere 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 elaborazione

Per altre informazioni, vedere Configurare un'identità gestita per un cluster di elaborazione.

Identità gestita con istanza di ambiente di calcolo

Per altre informazioni, vedere Configurare un'identità gestita per un’istanza di ambiente di calcolo.

Usare l'autenticazione basata su entità servizio

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

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

  • AZURE_CLIENT_ID: ID client restituito quando viene creata l'entità servizio.
  • AZURE_TENANT_ID: ID tenant restituito quando viene creata l'entità servizio.
  • AZURE_CLIENT_SECRET: password/credenziale generata 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 da file .env. Il file .gitignore standard per Python esclude automaticamente i file .env, per cui non devono essere controllati in alcun repository GitHub durante lo sviluppo.

L'esempio seguente illustra l'uso di python-dotenv per il caricamento delle variabili di ambiente da un file .env e l’uso di DefaultAzureCredential per la creazione dell'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, viene usata la classe MLClient per la connessione all'area di lavoro. Ad esempio, il codice seguente usa il metodo from_config() per il caricamento delle 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)

È possibile usare un'entità servizio per eseguire l'autenticazione nell'API REST di Azure Machine Learning. Usare il flusso di concessione delle credenziali client di Microsoft Entra ID, che consente di eseguire 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 con un'identità gestita

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

L'autenticazione con un'entità gestita usa il pacchetto di identità di Azure per Python. Per eseguire l'autenticazione nell'area di lavoro da una macchina virtuale, un cluster di elaborazione o un'istanza di ambiente di calcolo configurata con un'identità gestita, usare la classe DefaultAzureCredential. 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 classe DefaultAzureCredential per la creazione dell'oggetto credenziale e l’uso della classe MLClient per la connessione 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 da dispositivi gestiti. Nello specifico, per usare l'accesso condizionale per le aree di lavoro di Azure Machine Learning, assegnare i criteri di accesso condizionale all'app denominata Azure Machine Learning. L'ID app è 0736f41a-0425-bdb5-1563eff02385.

Passaggi successivi