Partilhar via


Autenticar clientes para endpoints online

APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Este artigo descreve como autenticar clientes para realizar operações de plano de controlo e plano de dados em endpoints online.

Uma operação de plano de controle controla um ponto de extremidade e o altera. As operações do plano de controle incluem operações de criação, leitura, atualização e exclusão (CRUD) em pontos de extremidade online e implantações online.

Uma operação de plano de dados usa dados para interagir com um ponto de extremidade online sem alterar o ponto de extremidade. Por exemplo, uma operação de plano de dados pode consistir em enviar uma solicitação de pontuação para um ponto de extremidade online e obter uma resposta.

Pré-requisitos

Preparar uma identidade de usuário

Precisa de uma identidade de utilizador para realizar operações no plano de controlo (por exemplo, operações CRUD) e operações no plano de dados (por exemplo, enviar pedidos de pontuação) no endpoint online. Você pode usar a mesma identidade de usuário ou identidades de usuário diferentes para o plano de controle e operações do plano de dados. Neste artigo, você usa a mesma identidade de usuário para operações do plano de controle e do plano de dados.

Para informações sobre como criar uma identidade de utilizador no Microsoft Entra ID, veja Configurar autenticação. Você precisará do ID de identidade mais tarde.

Atribuir permissões à identidade

Nesta seção, você atribui permissões à identidade de usuário que usa para interagir com o ponto de extremidade. Você começa usando uma função interna ou criando uma função personalizada. Depois disso, você atribui a função à sua identidade de usuário.

Usar uma função interna

Podes usar a AzureML Data Scientistfunção incorporada para gerir e usar endpoints e implementações. Também utiliza caracteres universais para incluir as seguintes ações de controlo de acesso baseado em funções (RBAC) no plano de controlo.

  • 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

Utiliza curingas para incluir a seguinte ação RBAC no plano de dados:

  • Microsoft.MachineLearningServices/workspaces/onlineEndpoints/score/action

Opcionalmente, pode usar a função Azure Machine Learning Workspace Connection Secrets Reader incorporada para aceder aos segredos das ligações do espaço de trabalho. Inclui as seguintes ações RBAC no plano de controlo:

  • Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action
  • Microsoft.MachineLearningServices/workspaces/metadata/secrets/read

Se usares estas funções incorporadas, não precisas de tomar qualquer medida nesta etapa.

(Opcional) Criar uma função personalizada

Pode ignorar este passo se estiver a utilizar funções incorporadas ou outras funções personalizadas pré-criadas.

  1. Defina o escopo e as ações para funções personalizadas criando definições JSON das funções. Por exemplo, a seguinte definição de função, custom-role-for-control-plane.json, permite ao utilizador realizar operações CRUD num endpoint online num espaço de trabalho especificado.

    {
        "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>"
        ]
    }
    

    A seguinte definição de função, custom-role-for-scoring.json, permite ao utilizador enviar pedidos de pontuação para um endpoint online num espaço de trabalho especificado.

    {
        "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 as definições JSON para criar funções personalizadas:

    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 criar funções personalizadas, você precisa de uma das três funções:

    • Proprietário
    • Administrador de Acesso de Usuário
    • Um função personalizada com Microsoft.Authorization/roleDefinitions/write permissão (para criar/atualizar/eliminar funções personalizadas) e Microsoft.Authorization/roleDefinitions/read permissão (para visualizar funções personalizadas).

    Para obter mais informações sobre como criar funções personalizadas, consulte Funções personalizadas do Azure.

  3. Verifique a definição de função:

    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 '"')`
    

Atribuir a função à identidade

  1. Se você estiver usando a AzureML Data Scientist função interna, use o código a seguir para atribuir a função à sua identidade de usuário.

    az role assignment create --assignee <identityID> --role "AzureML Data Scientist" --scope /subscriptions/<subscriptionID>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
    
  2. Opcionalmente, se você estiver usando a Azure Machine Learning Workspace Connection Secrets Reader função interna, use o código a seguir para atribuir a função à sua identidade de usuário.

    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. Se você estiver usando uma função personalizada, use o código a seguir para atribuir a função à sua identidade de usuário.

    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 atribuir funções personalizadas à identidade do usuário, você precisa de uma das três funções:

    • Proprietário
    • Administrador de Acesso de Usuário
    • Uma função personalizada que permite Microsoft.Authorization/roleAssignments/write permissão (para atribuir funções personalizadas) e Microsoft.Authorization/roleAssignments/read (para visualizar atribuições de funções).

    Para mais informações sobre funções Azure e as suas permissões, consulte funções Azure e Atribuir funções Azure usando o portal Azure.

  4. Confirme a atribuição da função:

    az role assignment list --scope /subscriptions/<subscriptionID>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
    

Obtenha o token Microsoft Entra para operações de plano de controle

Complete este passo se planeia realizar operações no plano de controlo usando a API REST, que utiliza diretamente o token.

Se planeias usar outros métodos, como Azure CLI com a extensão ml v2, Python SDK v2 ou Azure Machine Learning Studio, não precisas de obter manualmente o token Microsoft Entra. A sua identidade de utilizador será autenticada durante o início de sessão, e o token será automaticamente recuperado e passado por si.

Pode recuperar o token Microsoft Entra para operações de plano de controlo a partir do ponto final de recurso do Azure: https://management.azure.com.

  1. Inicie sessão no Azure.

    az login
    
  2. Se você quiser usar uma identidade específica, use o seguinte código para entrar com a identidade:

    az login --identity --username <identityID>
    
  3. Use este contexto para obter o token:

    export CONTROL_PLANE_TOKEN=`(az account get-access-token --resource https://management.azure.com --query accessToken | tr -d '"')`
    

(Opcional) Verifique o endpoint de recurso e o ID do cliente para o token Microsoft Entra

Depois de recuperar o token Microsoft Entra, pode verificar se o token corresponde ao endpoint de recurso Azure correto (management.azure.com) e ao ID de cliente correto, descodificando o token via jwt.ms, que devolve uma resposta JSON contendo a seguinte informação:

{
    "aud": "https://management.azure.com",
    "oid": "<your-object-id>"
}

Criar um ponto final

O exemplo seguinte cria o ponto final com uma identidade atribuída pelo sistema como identidade do endpoint. A identidade atribuída pelo sistema é o tipo de identidade padrão da identidade gerida para os pontos finais. Algumas funções básicas são automaticamente atribuídas à identidade atribuída pelo sistema. Para obter mais informações sobre a atribuição de função para uma identidade atribuída pelo sistema, consulte Atribuição automática de função para identidade de ponto de extremidade.

A CLI não exige que você forneça explicitamente o token do plano de controle. Em vez disso, o comando CLI az login autentica-o durante o início de sessão, e o token é automaticamente recuperado e passado para si.

  1. Crie um ficheiro YAML de definição de endpoint chamado endpoint.yml:

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aad_token
    

    Pode definir auth_mode para autenticação com chave key ou aml_token para autenticação de token do Azure Machine Learning. Este exemplo utiliza aad_token para autenticação de tokens Microsoft Entra.

  2. Crie o ponto de extremidade:

    az ml online-endpoint create -f endpoint.yml
    
  3. Verifique o status do endpoint:

    az ml online-endpoint show -n my-endpoint
    
  4. Se você quiser substituir auth_mode (por exemplo, para aad_token) ao criar um ponto de extremidade, execute o seguinte código:

    az ml online-endpoint create -n my-endpoint --auth-mode aad_token
    
  5. Se quiser atualizar o endpoint existente e especificar auth_mode (por exemplo, como aad_token), execute o seguinte código:

    az ml online-endpoint update -n my-endpoint --set auth_mode=aad_token
    

Criar uma implantação

Para criar uma implementação, veja Implantar um modelo de aprendizagem automática com um endpoint online ou Use REST para implementar um modelo como endpoint online. Não há diferença na forma como crias implementações para diferentes modos de autenticação.

O código a seguir é um exemplo de como criar uma implantação. Para mais informações sobre a implementação de endpoints online, consulte Deploy a machine learning model with a online endpoint (via CLI).

  1. Crie um ficheiro YAML de definição de implementação chamado 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. Crie a implementação usando o ficheiro YAML. Para este exemplo, defina todo o tráfego para a nova implantação.

    az ml online-deployment create -f blue-deployment.yml --all-traffic
    

Obter o URI de pontuação para o ponto de extremidade

Se usares az ml online-endpoint invoke para chamar o endpoint, a CLI resolve automaticamente o URI de pontuação, por isso não precisas de o recuperar manualmente.

No entanto, se precisar do URI de pontuação para usar com outras ferramentas (como a API REST ou clientes HTTP personalizados), pode recuperá-lo com o seguinte comando:

scoringUri=$(az ml online-endpoint show -n my-endpoint --query "scoring_uri")

Obter a chave ou token para operações de plano de dados

Pode usar uma chave ou token para operações no plano de dados, mesmo que o processo de obtenção da chave ou token seja uma operação do plano de controlo. Em outras palavras, você usa um token de plano de controle para obter a chave ou token que você usa posteriormente para executar suas operações de plano de dados.

Para obter a chave ou o token Azure Machine Learning, a identidade do utilizador que a solicita precisa de ter o papel correto atribuído, conforme descrito na Autorização para operações no plano de controlo. A identidade do utilizador não precisa de funções adicionais para obter token Microsoft Entra.

Se planeias usar a CLI para invocar o endpoint, não precisas de obter as chaves ou o token para operações no plano de dados explicitamente porque a CLI fornece isso para ti. No entanto, ainda pode usar a CLI para obter as chaves ou o token para operações no plano de dados, de modo a poder usá-lo com outros canais, como a API REST.

Para obter as chaves ou o token para operações de plano de dados, use o comando az ml online-endpoint get-credentials . Este comando devolve a saída JSON que contém as chaves, o token e/ou informações adicionais.

Gorjeta

No comando seguinte, o --query parâmetro é usado para extrair informação específica da saída JSON. No entanto, pode usar qualquer ferramenta adequada para esse fim.

Quando o auth_mode do ponto final é key

  • As chaves são retornadas nos primaryKey campos e 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)
    

Quando o auth_mode do ponto final é aml_token

  • O token é devolvido no accessToken campo.

  • O tempo de expiração do token é devolvido no expiryTimeUtc campo.

  • O tempo de atualização do token é devolvido no refreshAfterTimeUtc campo.

    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)
    

Quando o auth_mode do ponto final é aad_token

  • O token é devolvido no accessToken campo.

  • O tempo de expiração do token é devolvido no expiryTimeUtc campo.

    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)
    

Verifique o ponto de extremidade do recurso e a ID do cliente para o token do Microsoft Entra

Depois de obter o token Entra, pode verificar se o token é para o endpoint de recurso Azure correto, ml.azure.com, e o ID de cliente correto, descodificando o token via jwt.ms, que retorna uma resposta JSON com a seguinte informação:

{
    "aud": "https://ml.azure.com",
    "oid": "<your-object-id>"
}

Pontuar dados usando a chave ou token

Você pode usar az ml online-endpoint invoke para pontos de extremidade com uma chave, um token do Azure Machine Learning ou um token do Microsoft Entra. A CLI fornece automaticamente a chave ou token, por isso não precisa de a passar explicitamente.

az ml online-endpoint invoke -n my-endpoint -r request.json

Registre e monitore o tráfego

Para ativar o registo de tráfego nas definições de diagnóstico do endpoint, complete os passos em Ativar registos.

Se a definição de diagnóstico estiver ativada, pode ver a AmlOnlineEndpointTrafficLogs tabela para ver o modo de autenticação e a identidade do utilizador.