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
- Creare un'area di lavoro di Azure Machine Learning.
- Configurare l'ambiente di sviluppo per installare Azure Machine Learning SDK o usare un'istanza di ambiente di calcolo di Azure Machine Learning con l'SDK già installato.
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.
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.
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
etenantId
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" }
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" }
Per concedere l'accesso all'area di lavoro e ad altre risorse usate da Azure Machine Learning, consultare le informazioni presenti negli articoli seguenti:
- Come assegnare ruoli e azioni in Azure Machine Learning
- Come assegnare ruoli nell'interfaccia della riga di comando
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
Abilitare un'identità gestita assegnata dal sistema per le risorse di Azure nella macchina virtuale.
Nel portale di Azure selezionare l'area di lavoro e scegliere Controllo di accesso (IAM).
Selezionare Aggiungi, Aggiungi assegnazione di ruolo per aprire il riquadro Aggiungi assegnazione di ruolo.
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.
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.