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

SI APPLICA A:Azureml di Python SDK v1

Informazioni su come configurare l'autenticazione nell'area di lavoro di Azure Machine Learning. L'autenticazione nell'area di lavoro di Azure Machine Learning è basata su Azure Active Directory (Azure AD) per la maggior parte degli elementi. In generale, sono disponibili quattro flussi di lavoro di autenticazione che è possibile usare durante la connessione all'area di lavoro:

  • Interattivo: l'account in Azure Active Directory viene usato 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 Azure Active Directory e usarlo per autenticare o ottenere un token. Un'entità servizio viene usata quando è necessario un processo automatizzato per eseguire l'autenticazione al servizio senza richiedere l'interazione dell'utente. Ad esempio, uno script di integrazione e distribuzione continua che esegue il training e verifica un modello ogni volta che il codice di training cambia.

  • Sessione dell'interfaccia della riga di comando di Azure: si usa una sessione dell'interfaccia della riga di comando di Azure attiva per l'autenticazione. 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, 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 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 e le istanze di calcolo di Azure Machine Learning possono essere configurati anche 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 di Azure AD 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

Azure Active Directory

Tutti i flussi di lavoro di autenticazione per l'area di lavoro si basano su Azure Active Directory. Se si vuole che gli utenti eseguano l'autenticazione usando singoli account, devono avere account in Azure AD. Se si desidera usare le entità servizio, devono esistere in Azure AD. Le identità gestite sono anche una funzionalità di Azure AD.

Per altre informazioni su Azure AD, vedere Informazioni sull'autenticazione di Azure Active Directory.

Dopo aver creato gli account Azure AD, 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), è 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 è necessario decidere anche quale accesso concedere al sp.

Importante

Quando si usa un'entità servizio, concedere l'accesso minimo necessario per l'attività utilizzata. Ad esempio, non si concederà a un proprietario dell'entità servizio o a un collaboratore l'accesso se viene usato per leggere il 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 rilevata, 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 concedere 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 presenti 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 --sdk-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
    

    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 dal 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 contenute negli articoli seguenti:

    Importante

    L'accesso proprietario consente all'entità servizio di eseguire virtualmente 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 desiderato. 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 o con 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 ruolo per aprire la pagina Aggiungi assegnazione ruolo.

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

    Impostazione valore
    Ruolo Ruolo da assegnare.
    Assegna accesso a Identità gestita
    Membri Identità gestita creata in precedenza

    Aggiungere la pagina dell'assegnazione di ruolo in portale di Azure.

Identità gestita con cluster di calcolo

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

Usare l'autenticazione interattiva

Importante

L'autenticazione interattiva usa il browser e richiede cookie (inclusi i cookie di terze parti). Se sono stati disabilitati i cookie, è possibile che venga visualizzato un errore, ad esempio "non è stato possibile accedere". Questo errore può verificarsi anche se è stato abilitato Azure AD Multi-Factor Authentication.

La maggior parte degli esempi e della documentazione usa l'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.

  • L'uso del costruttore per fornire le informazioni sulla sottoscrizione, sul Workspace gruppo di risorse e sull'area di lavoro richiederà anche 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 usa l'interfaccia della riga di comando di Azure, il az login comando 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 usando l'interfaccia della riga di comando di Azure, è possibile usare la classe per eseguire l'autenticazione AzureCliAuthentication all'area di lavoro usando 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 all'area di lavoro dall'SDK, usando un'entità servizio, usare il costruttore della ServicePrincipalAuthentication classe. Usare i valori disponibili durante la creazione del provider di servizi come parametri. 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 ids/segreti usati sopra nelle variabili di ambiente, come illustrato nel codice seguente. L'archiviazione nelle variabili di ambiente impedisce la verifica accidentale delle informazioni 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 all'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 all'area di lavoro da una macchina virtuale, un cluster di calcolo o un'istanza di calcolo configurata con un'identità gestita, usare la MsiAuthentication classe . Nell'esempio seguente viene illustrato come usare 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

Come amministratore, è possibile applicare criteri di accesso condizionale di Azure AD 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