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

SI APPLICA A:Python SDK azureml v1

Informazioni su come configurare l'autenticazione nell'area di lavoro di Azure Machine Learning. 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: si utilizza il proprio account di Microsoft Entra ID per eseguire 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 utilizzarlo per eseguire 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 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 usa una sessione attiva dell'interfaccia della riga di comando di Azure. L'autenticazione dell'interfaccia della riga di comando di Azure viene usata durante la sperimentazione e lo sviluppo iterativo oppure quando è necessario un processo automatizzato per l'autenticazione nel servizio usando una sessione pre-autenticata. È 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 Azure Machine Learning SDK in una macchina virtuale di Azure, è possibile utilizzare 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 e istanze di ambiente di calcolo di Azure Machine Learning in modo che usino 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 disporre dei diritti di accesso per creare un'istanza di ambiente di calcolo, ma non per utilizzarla, mentre uno scienziato dei dati 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 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 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.

Configurare un'entità servizio

Per usare un'entità servizio, è innanzitutto necessario crearla. Quindi, concedere all'entità l'accesso all'area di lavoro. Poiché come accennato in precedenza, il controllo degli accessi in base al ruolo di Azure viene utilizzato per controllare l'accesso, è inoltre necessario 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

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 sono disponibili 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 utilizzano --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 di 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 utilizzate da Azure Machine Learning, consultare le informazioni presenti 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 svolgere il 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 Azure Machine Learning SDK da una macchina virtuale di Azure o con 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 quindi scegliere Controllo di accesso (IAM).

  3. Selezionare Aggiungi, Aggiungi assegnazione di ruolo per aprire il riquadro Aggiungi assegnazione di ruolo.

  4. Assegnare il ruolo seguente. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

    Impostazione Valore
    Ruolo Il ruolo che si intende assegnare.
    Assegna accesso a Identità gestita
    Membri L'identità gestita creata in precedenza.

    Add role assignment page in Azure portal.

L'identità gestita con cluster di elaborazione.

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

Usare l'autenticazione interattiva

Importante

L'autenticazione interattiva utilizza il browser e richiede cookie, inclusi quelli di terze parti. Se sono stati disabilitati i cookie, è possibile che venga visualizzato un messaggio di errore simile a "Non è possibile eseguire l'accesso". Questo errore può verificarsi anche se è stata abilitata l'autenticazione a più fattori di Microsoft Entra.

La maggior parte degli esempi nella documentazione e nei campioni usa l'autenticazione interattiva. Ad esempio, quando si usa l'SDK sono presenti due chiamate di funzione che richiedono automaticamente un flusso di autenticazione basato sull'interfaccia utente:

  • La chiamata della funzione from_config() genererà il prompt.

    from azureml.core import Workspace
    ws = Workspace.from_config()
    

    La funzione from_config() cerca un file JSON contenente le informazioni di connessione dell'area di lavoro.

  • Anche l'uso del costruttore Workspace per fornire informazioni su sottoscrizione, gruppo di risorse e area di lavoro richiederà l'autenticazione interattiva.

    ws = Workspace(subscription_id="your-sub-id",
                  resource_group="your-resource-group-id",
                  workspace_name="your-workspace-name"
                  )
    

Suggerimento

Se si ha accesso a più tenant, potrebbe essere necessario importare la classe e definire in modo esplicito il tenant di destinazione. Se si chiama il costruttore per InteractiveLoginAuthentication verrà richiesto di eseguire l'accesso in modo analogo alle chiamate precedenti.

from azureml.core.authentication import InteractiveLoginAuthentication
interactive_auth = InteractiveLoginAuthentication(tenant_id="your-tenant-id")

Quando si utilizza l'interfaccia della riga di comando di Azure, il comando az login viene usato per eseguire l'autenticazione della sessione dell'interfaccia della riga di comando. Per altre informazioni, vedere Introduzione all'interfaccia della riga di comando di Azure.

Suggerimento

Se si usa l'SDK da un ambiente in cui in precedenza è stata eseguita l'autenticazione interattiva tramite l'interfaccia della riga di comando di Azure, è possibile usare la classe AzureCliAuthentication per eseguire l'autenticazione nell'area di lavoro utilizzando le credenziali memorizzate nella cache dall'interfaccia della riga di comando:

from azureml.core.authentication import AzureCliAuthentication
cli_auth = AzureCliAuthentication()
ws = Workspace(subscription_id="your-sub-id",
               resource_group="your-resource-group-id",
               workspace_name="your-workspace-name",
               auth=cli_auth
               )

Usare l'autenticazione basata su entità servizio

Per eseguire l'autenticazione nell'area di lavoro dall'SDK tramite un'entità servizio, usare il costruttore della classe ServicePrincipalAuthentication. Come parametri, usare i valori ottenuti durante la creazione del provider di servizi. Il parametro tenant_id viene mappato a tenantId, service_principal_id viene mappato a clientId e service_principal_password viene mappato a clientSecret.

from azureml.core.authentication import ServicePrincipalAuthentication

sp = ServicePrincipalAuthentication(tenant_id="your-tenant-id", # tenantID
                                    service_principal_id="your-client-id", # clientId
                                    service_principal_password="your-client-secret") # clientSecret

La variabile sp ora include un oggetto di autenticazione da usare direttamente nell'SDK. In generale, è consigliabile archiviare gli ID e i segreti usati in precedenza nelle variabili di ambiente, come illustrato nel codice seguente. L'archiviazione nelle variabili di ambiente impedisce che le informazioni vengano accidentalmente archiviate in un repository GitHub.

import os

sp = ServicePrincipalAuthentication(tenant_id=os.environ['AML_TENANT_ID'],
                                    service_principal_id=os.environ['AML_PRINCIPAL_ID'],
                                    service_principal_password=os.environ['AML_PRINCIPAL_PASS'])

Per i flussi di lavoro automatizzati eseguiti in Python e che usano principalmente l'SDK, è possibile usare questo oggetto così com'è nella maggior parte dei casi per l'autenticazione. Il codice seguente esegue l'autenticazione nell'area di lavoro usando l'oggetto di autenticazione creato.

from azureml.core import Workspace

ws = Workspace.get(name="ml-example",
                   auth=sp,
                   subscription_id="your-sub-id",
                   resource_group="your-rg-name")
ws.get_details()

Usare l'autenticazione dell'identità gestita

Per eseguire l'autenticazione nell'area di lavoro da una macchina virtuale, da un cluster di elaborazione o da un'istanza di ambiente di calcolo configurata con un'identità gestita, usare la classe MsiAuthentication. L'esempio seguente illustra come utilizzare questa classe per eseguire l'autenticazione in un'area di lavoro:

from azureml.core.authentication import MsiAuthentication

msi_auth = MsiAuthentication()

ws = Workspace(subscription_id="your-sub-id",
                resource_group="your-resource-group-id",
                workspace_name="your-workspace-name",
                auth=msi_auth
                )

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. Nello specifico, per usare l'accesso condizionale per le aree di lavoro di Azure Machine Learning, assegnare il criterio di accesso condizionale all'app denominata Azure Machine Learning. L'ID app è 0736f41a-0425-bdb5-1563eff02385.

Passaggi successivi