Autenticación de clientes para puntos de conexión en línea
SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)
En este artículo se explica cómo autenticar a clientes para realizar operaciones de plano de control y plano de datos en puntos de conexión en línea.
Una operación de plano de control controla un punto de conexión y lo cambia. Las operaciones de plano de control incluyen operaciones de creación, lectura, actualización y eliminación (CRUD) en puntos de conexión en línea e implementaciones en línea.
Una operación de plano de datos usa datos para interactuar con un punto de conexión en línea sin cambiar el punto de conexión. Por ejemplo, una operación de plano de datos podría consistir en enviar una solicitud de puntuación a un punto de conexión en línea y obtener una respuesta.
Requisitos previos
Antes de seguir los pasos de este artículo, asegúrese de que tiene los siguientes requisitos previos:
Un área de trabajo de Azure Machine Learning. Si no tiene uno, siga los pasos descritos en el artículo Inicio rápido: Creación de recursos del área de trabajo para crear uno.
La CLI de Azure y la extensión
ml
o el SDK v2 de Python para Azure Machine Learning:Para instalar la CLI de Azure y la extensión, consulte Instalación, configuración y uso de la CLI (v2).
Importante
En los ejemplos de la CLI de este artículo se supone que usa el shell de Bash (o compatible). Por ejemplo, de un sistema Linux o Subsistema de Windows para Linux.
Para instalar el SDK de Python v2, use el siguiente comando:
pip install azure-ai-ml azure-identity
Para actualizar una instalación existente del SDK a la versión más reciente, use el siguiente comando:
pip install --upgrade azure-ai-ml azure-identity
Para más información, consulte Instalación del SDK v2 de Python para Azure Machine Learning.
Preparación de la identidad de un usuario
Se necesita la identidad de un usuario para realizar operaciones de plano de control (es decir, operaciones CRUD) y operaciones de plano de datos (es decir, enviar solicitudes de puntuación) en el punto de conexión en línea. Use la misma identidad de usuario o identidades de usuario diferentes para las operaciones de plano de control y de plano de datos. En este artículo, se usará la misma identidad de usuario para las operaciones de plano de control y de plano de datos.
Para crear una identidad de usuario en Microsoft Entra ID, consulte Configuración de la autenticación. Necesitará el id. de identidad más adelante.
Asignación de permisos a la identidad
En esta sección, asignará permisos a la identidad de usuario que se usa para interactuar con el punto de conexión. Para empezar, use un rol integrado o cree un rol personalizado. A partir de entonces, se asigna el rol a la identidad del usuario.
Use un rol integrado
El rol integrado AzureML Data Scientist
se puede usar para administrar y usar puntos de conexión e implementaciones, y usa caracteres comodín para incluir las siguientes acciones de RBAC de plano de control:
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
y para incluir las siguientes acciones de RBAC de plano de datos:
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/score/action
Opcionalmente, el rol integrado Azure Machine Learning Workspace Connection Secrets Reader
se puede usar para acceder a secretos desde las conexiones del área de trabajo e incluye las siguientes acciones de RBAC de plano de control:
Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action
Microsoft.MachineLearningServices/workspaces/metadata/secrets/read
Si usa estos roles integrados, no se necesita ninguna acción en este paso.
(Opcional) creación de un rol personalizado
Omita este paso si usa roles integrados u otros roles personalizados creados previamente.
Defina el ámbito y las acciones de los roles personalizados mediante la creación de definiciones JSON de los roles. Por ejemplo, la siguiente definición de rol permite al usuario realizar operaciones CRUD de un punto de conexión en línea en un área de trabajo especificada.
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 siguiente definición de rol permite al usuario enviar solicitudes de puntuación a un punto de conexión en línea en un área de trabajo especificada.
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>" ] }
Use las definiciones JSON para crear roles personalizados:
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:
Para crear roles personalizados, necesita uno de tres roles:
- propietario
- Administrador de acceso de usuarios
- un rol personalizado con permiso de
Microsoft.Authorization/roleDefinitions/write
(para crear, actualizar o eliminar roles personalizados) y permiso deMicrosoft.Authorization/roleDefinitions/read
(para ver roles personalizados).
Para obtener más información sobre la creación de roles personalizados, consulte Roles personalizados de Azure.
Compruebe la definición de roles:
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 '"')`
Asignar el rol a la identidad
Si usa el rol integrado
AzureML Data Scientist
, use el código siguiente para asignar el rol a la identidad de usuario.az role assignment create --assignee <identityId> --role "AzureML Data Scientist" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
Opcionalmente, si usa el rol integrado
Azure Machine Learning Workspace Connection Secrets Reader
, use el código siguiente para asignar el rol a la identidad de usuario.az role assignment create --assignee <identityId> --role "Azure Machine Learning Workspace Connection Secrets Reader" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
Si usa un rol personalizado, use el código siguiente para asignar el rol a la identidad de usuario.
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:
Para asignar roles personalizados a la identidad de usuario, se necesita uno de estos tres roles:
- propietario
- Administrador de acceso de usuarios
- un rol personalizado que permite los permisos
Microsoft.Authorization/roleAssignments/write
(para asignar roles personalizados) yMicrosoft.Authorization/roleAssignments/read
(para ver las asignaciones de roles).
Para obtener más información sobre los distintos roles de Azure y sus permisos, consulte roles de Azure y Asignación de roles de Azure mediante Azure Portal.
Confirme la asignación de roles:
az role assignment list --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
Obtención del token de Microsoft Entra para operaciones de plano de control
Realice este paso si planea realizar operaciones de plano de control con la API de REST, que usará directamente el token.
Si planea usar otras formas, como la CLI de Azure Machine Learning (v2), el SDK de Python (v2) o Estudio de Azure Machine Learning, no es necesario obtener manualmente el token de Microsoft Entra. En su lugar, durante el inicio de sesión, su identidad de usuario ya se autenticaría, el token se recuperaría automáticamente y se le pasaría.
Es posible recuperar el token de Microsoft Entra para operaciones de plano de control desde el punto de conexión de recursos de Azure: https://management.azure.com
.
Inicie sesión en Azure.
az login
Si desea usar una identidad específica, use el código siguiente para iniciar sesión con la identidad:
az login --identity --username <identityId>
Use este contexto para obtener el token.
export CONTROL_PLANE_TOKEN=`(az account get-access-token --resource https://management.azure.com --query accessToken | tr -d '"')`
(Opcional) comprobación del punto de conexión del recurso y el id. de cliente para el token de Microsoft Entra
Después de recuperar el token de Microsoft Entra, compruebe que el token sea para el punto de conexión correcto de recursos de Azure management.azure.com
y el id. de cliente sea correcto decodificando el token a través de jwt.ms, que devolverá una respuesta JSON con la siguiente información:
{
"aud": "https://management.azure.com",
"oid": "<your-object-id>"
}
Creación de un punto de conexión
En el ejemplo siguiente, se crea el punto de conexión con una identidad asignada por el sistema (SAI) como identidad del punto de conexión. El SAI es el tipo de identidad predeterminado de la identidad administrada para los puntos de conexión. Algunos roles básicos se asignan automáticamente para la SAI. Para obtener más información sobre la asignación de roles para una identidad asignada por el sistema, consulte Asignación automática de roles para la identidad del punto de conexión.
La CLI no requiere que proporcione explícitamente el token del plano de control. En su lugar, la CLI az login
autentica durante el inicio de sesión y el token se recupera y se pasa automáticamente.
Cree un archivo YAML de definición de punto de conexión.
endpoint.yml:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: my-endpoint auth_mode: aad_token
Reemplace
auth_mode
porkey
para la autenticación de claves, o bienaml_token
para la autenticación de tokens de Azure Machine Learning. En este ejemplo, usaráaad_token
para la autenticación de tokens de Microsoft Entra.az ml online-endpoint create -f endpoint.yml
Compruebe el estado del punto de conexión:
az ml online-endpoint show -n my-endpoint
Si desea invalidar
auth_mode
(por ejemplo, paraaad_token
) al crear un punto de conexión, ejecute el código siguiente:az ml online-endpoint create -n my-endpoint --auth_mode aad_token
Si desea actualizar el punto de conexión existente y especificar
auth_mode
(por ejemplo, paraaad_token
), ejecute el código siguiente:az ml online-endpoint update -n my-endpoint --set auth_mode=aad_token
de una implementación
Para crear una implementación, consulte Implementación de un modelo de ML con un punto de conexión en línea o Uso de REST para implementar modelos como puntos de conexión en línea. No hay ninguna diferencia en cómo se crean implementaciones para distintos modos de autenticación.
El siguiente código es un ejemplo de cómo crear una implementación. Para obtener más información sobre la implementación de puntos de conexión en línea, consulte Implementación de modelos de ML con puntos de conexión en línea (a través de la CLI)
Creación de un archivo YAML de definición de implementación.
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
Cree la implementación mediante el archivo YAML. En este ejemplo, establezca todo el tráfico en la nueva implementación.
az ml online-deployment create -f blue-deployment.yml --all-traffic
Obtención del URI de puntuación para el punto de conexión
Si tiene previsto usar la CLI para invocar el punto de conexión, no es necesario obtener explícitamente el URI de puntuación, ya que la CLI lo controla por usted. Sin embargo, aún podría usar la CLI para obtener el URI de puntuación y usarlo con otros canales, como la API de REST.
scoringUri=$(az ml online-endpoint show -n my-endpoint --query "scoring_uri")
Obtención de la clave o token para operaciones de plano de datos
Se puede usar una clave o token para las operaciones de plano de datos, aunque el proceso de obtención de la clave o el token sea una operación de plano de control. En otras palabras, se usa un token de plano de control para obtener la clave o el token que, posteriormente, se usará para realizar las operaciones de plano de datos.
La obtención de la clave o token de Azure Machine Learning requiere que el rol correcto se asigne a la identidad de usuario que lo solicite, tal y como se describe en Autorización para operaciones de plano de control. La obtención del Token de Microsoft Entra no requiere ningún rol adicional para la identidad del usuario.
Si tiene previsto usar la CLI para invocar el punto de conexión, no es necesario obtener las claves o el token de las operaciones del plano de datos explícitamente, ya que la CLI la controla automáticamente. Sin embargo, todavía puede usar la CLI para obtener las claves o el token de la operación del plano de datos para poder usarlo con otros canales, como la API REST.
Para obtener las claves o el token de las operaciones del plano de datos, use el comando az ml online-endpoint get-credentials. Este comando devuelve una salida JSON que contiene las claves, el token o la información adicional.
Sugerencia
Para extraer una información específica de la salida JSON, el parámetro --query
del comando de la CLI se usa como ejemplo. Sin embargo, es posible usar cualquier herramienta adecuada para este propósito.
Cuándo auth_mode
es el punto de conexión key
- Las claves se devuelven en los campos
primaryKey
ysecondaryKey
.
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query primaryKey)
export DATA_PLANE_TOKEN2=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query secondaryKey)
Cuando auth_mode
del punto de conexión es aml_token
- El token se devuelve en el campo
accessToken
. - El tiempo de expiración del token se devuelve en el campo
expiryTimeUtc
. - El tiempo de actualización del token se devuelve en el campo
refreshAfterTimeUtc
.
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query accessToken)
export EXPIRY_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query expiryTimeUtc)
export REFRESH_AFTER_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query refreshAfterTimeUtc)
Cuándo auth_mode
es el punto de conexión aad_token
- El token se devuelve en el campo
accessToken
. - El tiempo de expiración del token se devuelve en el campo
expiryTimeUtc
.
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query accessToken)
export EXPIRY_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query expiryTimeUtc)
Comprobación del punto de conexión del recurso y el id. de cliente para el token de Microsoft Entra
Después de obtener el token de Entra, compruebe que el token sea para el punto de conexión correcto de recursos de Azure ml.azure.com
y el id. de cliente sea correcto decodificando el token a través de jwt.ms, que devolverá una respuesta JSON con la siguiente información:
{
"aud": "https://ml.azure.com",
"oid": "<your-object-id>"
}
Puntuación de datos mediante la clave o el token
Puede usar az ml online-endpoint invoke
para puntos de conexión con una clave, un token de Azure Machine Learning o un token de Microsoft Entra. La CLI controla automáticamente la clave o el token, por lo que no es necesario pasarla explícitamente.
az ml online-endpoint invoke -n my-endpoint -r request.json
Registro y supervisión del tráfico
Para habilitar el registro de tráfico en la configuración de diagnóstico del punto de conexión, siga los pasos descritos en Habilitación o deshabilitación de registros.
Si la configuración de diagnóstico estuviera habilitada, compruebe la tabla AmlOnlineEndpointTrafficLogs
para ver el modo de autenticación y la identidad del usuario.