Condividi tramite


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 delle operazioni. In generale, sono disponibili quattro flussi di lavoro di autenticazione che è possibile utilizzare per la connessione all'area di lavoro:

  • Interattivo: si utilizza il proprio account di Microsoft Entra ID per eseguire l'autenticazione diretta o per ottenere un token che viene utilizzato per l'autenticazione. L'autenticazione interattiva viene utilizzata 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 utilizzarlo per eseguire l'autenticazione o per ottenere un token. Un'entità servizio viene usata per autenticare un processo automatizzato al servizio, senza richiedere l'interazione dell'utente. Ad esempio, uno script di integrazione e distribuzione continue 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 utilizza 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 nell'ambito delle pipeline di integrazione e distribuzione continue eseguendo 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 utilizzando 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 utilizzato, 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. Anche se un data scientist può usarlo, ma non eliminarlo o crearlo. Per altre informazioni, vedere Gestire gli accessi all'area di lavoro di Azure Machine Learning.

L'accesso condizionale di Microsoft Entra può essere utilizzato per controllare o limitare ulteriormente 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, tali account devono essere inclusi in Microsoft Entra ID. Se si desidera utilizzare le entità servizio, devono essere presenti in Microsoft Entra ID. Quella delle identità gestite è 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 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.

Utilizzare 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. Esistono diversi modi per eseguire l'autenticazione interattiva. Tuttavia, la maggior parte degli esempi usa DefaultAzureCredential poiché gestisce la maggior parte degli scenari di autenticazione. La classe DefaultAzureCredential usa più approcci (EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential, VisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential) a rotazione, interrompendo l'operazione quando viene fornito un token. Per altre informazioni, vedere il riferimento alla classe DefaultAzureCredential.

Il codice seguente è 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 utilizzare un'entità servizio, è innanzitutto necessario crearla. Concedere, quindi, l'accesso alla propria area di lavoro all'entità servizio. Poiché, come accennato in precedenza, il controllo degli accessi in base al ruolo di Azure viene utilizzato per controllare l'accesso, è necessario anche decidere quale accesso concedere all'entità servizio.

Importante

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

Il motivo per cui è necessario concedere l'accesso minimo consiste nel fatto che un'entità servizio utilizza una password per eseguire l'autenticazione e tale password può essere archiviata come parte di uno script di automazione. Se la password viene persa, il fatto che disponga dell'accesso minimo necessario per eseguire un'attività specifica riduce al minimo l'utilizzo dannoso dell'entità servizio.

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

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 utilizzare il comando az account set -s <subscription name or ID> per impostare la sottoscrizione. Per altre informazioni, vedere Utilizzare 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. Versioni precedenti usano --sdk-auth.

    L'output è un documento JSON simile al seguente. Prendere nota dei campi clientId, clientSecret e tenantId perché sono 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 utilizzando 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 utilizzate 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. Di seguito sono riportati gli ID app da usare per l'accesso condizionale:

ID applicazione Nome Note
d7304df8-741f-47d3-9bc2-df0e24e2071f App Web Azure Machine Learning Workbench Azure Machine Learning Studio
cb2ff863-7f30-4ced-ab89-a00194bcf6d9 Microsoft Foundry App Fonderia

Verificare la presenza di un'entità servizio

Prima di aggiungere i criteri di accesso condizionale, verificare che l'ID applicazione sia elencato nella sezione Applicazioni Enterprise del portale di Azure:

Importante

Per eseguire i passaggi descritti in questa sezione, è necessario disporre di Microsoft Entra ID P2. Per ulteriori informazioni, consultare la sezione Concessione di licenza di Microsoft Entra.

  1. Cercare Applicazioni Enterprise nel campo di ricerca nella parte superiore del portale e selezionare la voce dell'applicazione aziendale.

    Screenshot del campo di ricerca del portale di Azure con una ricerca di

  2. In Applicazioni Enterprise usare il campo Cerca per nome applicazione o ID oggetto per cercare la voce da usare con l'accesso condizionale. Se viene visualizzata una voce, esiste già un'entità servizio per l'ID applicazione. Ignorare il resto dei passaggi di questa sezione e andare alla sezione Aggiungere accesso condizionale.

    Importante

    L'unico filtro deve essere l'ID applicazione inizia con. Rimuovere qualsiasi altro filtro che può essere presente.

    Screenshot della ricerca delle applicazioni aziendali senza risultati corrispondenti.

  3. Se non viene visualizzata alcuna voce, usare il cmdlet di Azure PowerShell seguente per creare un'entità servizio per l'ID applicazione:

    New-AzAdServicePrincipal -ApplicationId "application-ID"
    

    Ad esempio: New-AzADServicePrincipal -ApplicationId "d7304df8-741f-47d3-9bc2-df0e24e2071f".

  4. Dopo aver creato l'entità servizio, tornare a Applicazioni Enterprise e verificare che sia ora possibile trovare l'ID applicazione. È possibile trovare l'elenco degli ID nella sezione Usare l'accesso condizionale.

Aggiungere Accesso condizionale

Per usare l'Accesso condizionale, assegnare i criteri di Accesso condizionale all'ID applicazione. Se l'applicazione non viene visualizzata nell'accesso condizionale, seguire la procedura descritta nella sezione Controllare l'entità servizio.

Passaggi successivi