Compartir a través de


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:

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.

  1. 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>"
        ]
    }
    
  2. 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 de Microsoft.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.

  3. 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

  1. 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>
    
  2. 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>
    
  3. 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) y Microsoft.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.

  4. 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.

  1. Inicie sesión en Azure.

    az login
    
  2. Si desea usar una identidad específica, use el código siguiente para iniciar sesión con la identidad:

    az login --identity --username <identityId>
    
  3. 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.

  1. 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
    
  2. Reemplace auth_mode por key para la autenticación de claves, o bien aml_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
    
  3. Compruebe el estado del punto de conexión:

    az ml online-endpoint show -n my-endpoint
    
  4. Si desea invalidar auth_mode (por ejemplo, para aad_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
    
  5. Si desea actualizar el punto de conexión existente y especificar auth_mode (por ejemplo, para aad_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)

  1. 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
    
  2. 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 y secondaryKey.
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.