Condividi tramite


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: 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'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 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 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 calcolo 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 impiegato, 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 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 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 (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.

È consigliabile ruotare regolarmente i segreti, come la password 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 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 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.

    Pagina Aggiungi assegnazione di ruolo nel portale di Azure.

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 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 si basa sull'autenticazione interattiva. Ad esempio, quando si usa l'SDK sono presenti due chiamate di funzione che richiederanno 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 autenticare la 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 è stata eseguita l'autenticazione interattiva in precedenza 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 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