Autenticare i client per gli endpoint online
SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)
Questo articolo illustra come autenticare i client per l'esecuzione di operazioni del piano di controllo e del piano dati su endpoint online.
Un'operazione del piano di controllo controlla un endpoint e lo cambia. Queste operazioni includono creazione, lettura, aggiornamento ed eliminazione (CRUD) su endpoint online e distribuzioni online.
Un'operazione del piano dati usa i dati per interagire con un endpoint online senza cambiarlo. Ad esempio, un'operazione dal piano dati potrebbe consistere nell'invio di una richiesta di assegnazione dei punteggi a un endpoint online e nella ricezione di una risposta.
Prerequisiti
Prima di seguire la procedura descritta in questo articolo, assicurarsi che siano stati soddisfati i prerequisiti seguenti:
Un'area di lavoro di Azure Machine Learning. Se non è disponibile, seguire la procedura descritta nell'articolo Avvio rapido: Creare risorse dell'area di lavoro per crearne una.
L'interfaccia della riga di comando di Azure e l'estensione
ml
oppure Python SDK v2 per Azure Machine Learning:Per installare l'interfaccia della riga di comando di Azure e l'estensione, vedere Installare, configurare e usare l'interfaccia della riga di comando di Azure (v2).
Importante
Gli esempi dell'interfaccia della riga di comando in questo articolo presuppongono che si usi la shell Bash (o compatibile). Ad esempio, un sistema Linux o un sottosistema Windows per Linux.
Per installare Python SDK v2, usare il comando seguente:
pip install azure-ai-ml azure-identity
Per aggiornare un'installazione esistente dell'SDK alla versione più recente, usare il comando seguente:
pip install --upgrade azure-ai-ml azure-identity
Per altre informazioni, vedere Installare Python SDK v2 per Azure Machine Learning.
Limiti
Gli endpoint con la modalità di autenticazione tramite token di Microsoft Entra (aad_token
) non supportano l'assegnazione dei punteggi usando az ml online-endpoint invoke
dell'interfaccia della riga di comando, ml_client.online_endpoints.invoke()
dell'SDK o le schede Test o Utilizzo dello studio di Azure Machine Learning. Usare invece un SDK Python generico o l'API REST per passare il token del piano di controllo. Per altre informazioni, vedere Assegnare punteggi ai dati usando la chiave o il token.
Preparare un'identità utente
Per eseguire le operazioni del piano di controllo (CRUD) e del piano dati (invio di richieste di assegnazione dei punteggi) sugli endpoint online, è necessaria un'identità utente. È possibile usare la stessa identità utente o diverse per le operazioni del piano di controllo e del piano dati. In questo articolo viene usata la stessa identità utente per le operazioni del piano di controllo e del piano dati.
Per creare un'identità utente in Microsoft Entra ID, vedere Configurare l'autenticazione. L'ID identità sarà necessario in un secondo momento.
Assegnare autorizzazioni all'identità
In questa sezione si assegnano le autorizzazioni all'identità utente da usare per interagire con l'endpoint. Per iniziare, usare un ruolo predefinito o creare un ruolo personalizzato. Successivamente, assegnare il ruolo all'identità utente.
Usare un ruolo predefinito
Il AzureML Data Scientist
ruolo predefinito può essere usato per gestire e usare endpoint e distribuzioni e usa caratteri jolly per includere le azioni seguenti di controllo degli accessi in base al ruolo del piano di controllo:
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/write
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/delete
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/read
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listKeys/action
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/regenerateKeys/action
e per includere l'azione seguente di controllo degli accessi in base al ruolo del piano dati:
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/score/action
Facoltativamente, il ruolo predefinito Azure Machine Learning Workspace Connection Secrets Reader
può essere usato per accedere ai segreti delle connessioni all'area di lavoro e include le azioni di controllo degli accessi in base al ruolo seguenti del piano di controllo:
Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action
Microsoft.MachineLearningServices/workspaces/metadata/secrets/read
Se si usano questi ruoli predefiniti, non è necessaria alcuna azione in questo passaggio.
(Facoltativo) Creare un ruolo personalizzato
È possibile ignorare questo passaggio se si usano ruoli predefiniti o altri ruoli personalizzati predefiniti.
Definire l'ambito e le azioni per i ruoli personalizzati creando le relative definizioni JSON. Ad esempio, la definizione del ruolo seguente consente all'utente di eseguire operazioni CRUD su un endpoint online, in un'area di lavoro specificata.
custom-role-for-control-plane.json:
{ "Name": "Custom role for control plane operations - online endpoint", "IsCustom": true, "Description": "Can CRUD against online endpoints.", "Actions": [ "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/write", "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/delete", "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/read", "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action", "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listKeys/action", "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/regenerateKeys/action" ], "NotActions": [ ], "AssignableScopes": [ "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>" ] }
La definizione del ruolo seguente consente all'utente di inviare richieste di assegnazione dei punteggi a un endpoint online, in un'area di lavoro specificata.
custom-role-for-scoring.json:
{ "Name": "Custom role for scoring - online endpoint", "IsCustom": true, "Description": "Can score against online endpoints.", "Actions": [ "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*/action" ], "NotActions": [ ], "AssignableScopes": [ "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>" ] }
Usare le definizioni JSON per creare ruoli personalizzati:
az role definition create --role-definition custom-role-for-control-plane.json --subscription <subscriptionId> az role definition create --role-definition custom-role-for-scoring.json --subscription <subscriptionId>
Nota
Per creare ruoli personalizzati è necessario uno di questi tre ruoli:
- owner
- Amministratore Accesso utente
- Un ruolo personalizzato con autorizzazione
Microsoft.Authorization/roleDefinitions/write
(per creare/aggiornare/eliminare ruoli personalizzati) e un'autorizzazioneMicrosoft.Authorization/roleDefinitions/read
(per visualizzare ruoli personalizzati).
Per altre informazioni sulla creazione di ruoli personalizzati, vedere Ruoli personalizzati di Azure.
Verificare la definizione del ruolo:
az role definition list --custom-role-only -o table az role definition list -n "Custom role for control plane operations - online endpoint" az role definition list -n "Custom role for scoring - online endpoint" export role_definition_id1=`(az role definition list -n "Custom role for control plane operations - online endpoint" --query "[0].id" | tr -d '"')` export role_definition_id2=`(az role definition list -n "Custom role for scoring - online endpoint" --query "[0].id" | tr -d '"')`
Assegnare il ruolo all'identità
Se si usa il ruolo predefinito
AzureML Data Scientist
, usare il codice seguente per assegnarlo all'identità utente.az role assignment create --assignee <identityId> --role "AzureML Data Scientist" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
Facoltativamente, se si usa il ruolo predefinito
Azure Machine Learning Workspace Connection Secrets Reader
, usare il codice seguente per assegnarlo all'identità utente.az role assignment create --assignee <identityId> --role "Azure Machine Learning Workspace Connection Secrets Reader" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
Se si usa un ruolo personalizzato, usare il codice seguente per assegnarlo all'identità utente.
az role assignment create --assignee <identityId> --role "Custom role for control plane operations - online endpoint" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName> az role assignment create --assignee <identityId> --role "Custom role for scoring - online endpoint" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
Nota
Per assegnare ruoli personalizzati all'identità utente, è necessario uno dei tre ruoli seguenti:
- owner
- Amministratore Accesso utente
- Un ruolo personalizzato che consente l'autorizzazione
Microsoft.Authorization/roleAssignments/write
(per assegnare ruoli personalizzati) eMicrosoft.Authorization/roleAssignments/read
(per visualizzare le assegnazioni di ruolo).
Per altre informazioni sui diversi ruoli di Azure e sulle relative autorizzazioni, vedere Ruoli di Azure e Assegnazione di ruoli di Azure tramite il portale di Azure.
Creare l'assegnazione di ruolo:
az role assignment list --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
Ottenere il token di Microsoft Entra per le operazioni del piano di controllo
Eseguire questo passaggio se si prevede di eseguire operazioni del piano di controllo con l'API REST, che userà direttamente il token.
Se si prevede di usare altri modi, ad esempio l'interfaccia della riga di comando di Azure Machine Learning (v2), Python SDK (v2) o lo studio di Azure Machine Learning, non è necessario ottenere manualmente il token di Microsoft Entra. Durante l'accesso, invece, l'identità utente sarà già stata autenticata e il token sarà stato recuperato e passato automaticamente.
È possibile recuperare il token di Microsoft Entra per le operazioni del piano di controllo dall'endpoint della risorsa di Azure: https://management.azure.com
.
Accedere ad Azure.
az login
Se si vuole usare un'identità specifica, usare il codice seguente per accedere con l'identità:
az login --identity --username <identityId>
Usare questo contesto per ottenere il token.
export CONTROL_PLANE_TOKEN=`(az account get-access-token --resource https://management.azure.com --query accessToken | tr -d '"')`
(Facoltativo) Verificare l'endpoint della risorsa e l'ID client per individuare il token di Microsoft Entra
Dopo aver recuperato il token di Microsoft Entra, è possibile verificare che sia quello per l'endpoint della risorsa di Azure corretto management.azure.com
e l'ID client corretto decodificando il token tramite jwt.ms, che restituirà una risposta JSON con le informazioni seguenti:
{
"aud": "https://management.azure.com",
"oid": "<your-object-id>"
}
Creare un endpoint
L'esempio seguente crea un endpoint con un'identità assegnata dal sistema (SAI). SAI è il tipo di identità predefinito dell'identità gestita per gli endpoint. Alcuni ruoli di base vengono assegnati automaticamente per SAI. Per altre informazioni sull'assegnazione di ruolo per un'identità assegnata dal sistema, vedere Assegnazione di ruolo automatica per l'identità dell'endpoint.
L'interfaccia della riga di comando non richiede di fornire esplicitamente il token del piano di controllo. Al contrario, l'interfaccia della riga di comando esegue l'autenticazione durante l'accesso e il token viene recuperato e passato automaticamente.
Creare un file YAML di definizione dell'endpoint.
endpoint.yml:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: aad_token
È possibile sostituire
auth_mode
conkey
per l'autenticazione della chiave o conaml_token
per l'autenticazione del token di Azure Machine Learning. In questo esempio si usaaad_token
per l'autenticazione del token di Microsoft Entra.az ml online-endpoint create -f endpoint.yml
Controllare lo stato dell'endpoint:
az ml online-endpoint show -n my-endpoint
Se si vuole eseguire l'override del valore di
auth_mode
(ad esempio sostituendolo conaad_token
) durante la creazione di un endpoint, eseguire il codice seguente:az ml online-endpoint create -n my-endpoint --auth_mode aad_token
Se si vuole aggiornare l'endpoint esistente e specificare
auth_mode
(ad esempio suaad_token
), eseguire il codice seguente:az ml online-endpoint update -n my-endpoint --set auth_mode=aad_token
Creare una distribuzione
Per creare una distribuzione, vedere Distribuire un modello di Machine Learning con un endpoint online o Usare REST per distribuire un modello come endpoint online. Non esiste alcuna differenza nel modo in cui si creano distribuzioni per le diverse modalità di autenticazione.
Il codice seguente è un esempio di come creare una distribuzione. Per altre informazioni sulla distribuzione di endpoint online, vedere Distribuire un modello di Machine Learning con un endpoint online (tramite interfaccia della riga di comando)
Creare un file YAML di definizione della distribuzione.
blue-deployment.yml:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: blue endpoint_name: my-aad-auth-endp1 model: path: ../../model-1/model/ code_configuration: code: ../../model-1/onlinescoring/ scoring_script: score.py environment: conda_file: ../../model-1/environment/conda.yml image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest instance_type: Standard_DS3_v2 instance_count: 1
Creare la distribuzione usando il file YAML. Per questo esempio, impostare tutto il traffico sulla nuova distribuzione.
az ml online-deployment create -f blue-deployment.yml --all-traffic
Ottenere l'URI di assegnazione dei punteggi per l'endpoint
Se si prevede di usare l'interfaccia della riga di comando per richiamare l'endpoint, non è necessario ottenere esplicitamente l'URI di assegnazione dei punteggi, perché l'interfaccia della riga di comando gestisce questo aspetto automaticamente. Tuttavia, è comunque possibile usare l'interfaccia della riga di comando per ottenere l'URI di assegnazione dei punteggi in modo da poterlo usare con altri canali, ad esempio l'API REST.
scoringUri=$(az ml online-endpoint show -n my-endpoint --query "scoring_uri")
Ottenere la chiave o il token per le operazioni del piano dati
È possibile usare una chiave o un token per le operazioni del piano dato, anche se il processo per ottenerli è un'operazione del piano di controllo. In altre parole, si usa un token del piano di controllo per ottenere la chiave o il token che viene usato in un secondo momento per eseguire le operazioni del piano dati.
Per ottenere la chiave o il token di Azure Machine Learning, è necessario che sia assegnato il ruolo corretto all'identità utente che lo richiede, come descritto in Autorizzazione per le operazioni del piano di controllo. L'identità utente non necessita di ruoli aggiuntivi per ottenere il token di Microsoft Entra.
Chiave o token di Azure Machine Learning
Se si prevede di usare l'interfaccia della riga di comando per richiamare l'endpoint, e se l'endpoint è configurato per usare una modalità di autenticazione di tipo chiave o token di Azure Machine Learning (aml_token
), non è necessario ottenere esplicitamente il token del piano dati, perché l'interfaccia della riga di comando gestisce automaticamente questo aspetto. Tuttavia, è comunque possibile usare l'interfaccia della riga di comando per ottenere il token del piano dati in modo da poterlo usare con altri canali, ad esempio l'API REST.
Per ottenere la chiave o il token di Azure Machine Learning (aml_token
), usare il comando az ml online-endpoint get-credentials. Questo comando restituisce un documento JSON che contiene l'ID della chiave o del token di Azure Machine Learning.
Le chiavi vengono restituite nei campi primaryKey
e secondaryKey
. L'esempio seguente illustra come usare il parametro --query
per restituire solo la chiave primaria:
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query primaryKey)
I token di Azure Machine Learning vengono restituiti nel campo accessToken
:
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query accessToken)
Inoltre, i campi expiryTimeUtc
e refreshAfterTimeUtc
contengono gli orari di scadenza e di aggiornamento del token.
Token di Microsoft Entra
Per ottenere il token di Microsoft Entra (aad_token
) usando l'interfaccia della riga di comando, usare il comando az account get-access-token. Questo comando restituisce un documento JSON che contiene il token di Microsoft Entra.
Il token di Microsoft Entra viene restituito nel campo accessToken
:
export DATA_PLANE_TOKEN=`(az account get-access-token --resource https://ml.azure.com --query accessToken | tr -d '"')`
Nota
- L'estensione
ml
dell'interfaccia della riga di comando non supporta l'acquisizione del token di Microsoft Entra. Usare inveceaz account get-access-token
, come descritto nel codice precedente. - Il token per le operazioni del piano dati viene recuperato dall'endpoint della risorsa di Azure
ml.azure.com
invece che damanagement.azure.com
, a differenza del token per le operazioni del piano di controllo.
Verificare l'endpoint della risorsa e l'ID client per individuare il token di Microsoft Entra
Dopo aver recuperato il token di Microsoft Entra, è possibile verificare che sia quello per l'endpoint della risorsa di Azure corretto ml.azure.com
e l'ID client corretto decodificando il token tramite jwt.ms, che restituirà una risposta JSON con le informazioni seguenti:
{
"aud": "https://ml.azure.com",
"oid": "<your-object-id>"
}
Assegnare punteggi ai dati tramite la chiave o il token
Chiave o token di Azure Machine Learning
È possibile usare az ml online-endpoint invoke
per gli endpoint con una chiave o un token di Azure Machine Learning. L'interfaccia della riga di comando gestisce automaticamente la chiave o il token di Azure Machine Learning, quindi non è necessario passarlo in modo esplicito.
az ml online-endpoint invoke -n my-endpoint -r request.json
Token di Microsoft Entra
L'uso di az ml online-endpoint invoke
per gli endpoint con un token di Microsoft Entra non è supportato. Usare invece l'API REST e usare l'URI di assegnazione dei punteggi dell'endpoint per richiamare l'endpoint.
Registrazione e monitoraggio del traffico
Per abilitare la registrazione del traffico nelle impostazioni di diagnostica per l'endpoint, seguire la procedura descritta in Come abilitare/disabilitare i log.
Se l'impostazione di diagnostica è abilitata, è possibile controllare la tabella AmlOnlineEndpointTrafficLogs
per visualizzare la modalità di autenticazione e l'identità utente.