Проверка подлинности клиентов для сетевых конечных точек

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

В этой статье описывается, как выполнять проверку подлинности клиентов для выполнения операций уровня управления и плоскости данных в сетевых конечных точках.

Операция плоскости управления управляет конечной точкой и изменяет ее. К операциям уровня управления относятся операции создания, чтения, обновления и удаления (CRUD) в сетевых конечных точках и развертываниях в сети.

Операция плоскости данных использует данные для взаимодействия с интернет-конечной точкой без изменения конечной точки. Например, операция плоскости данных может состоять из отправки запроса оценки в конечную точку в Сети и получения ответа.

Необходимые компоненты

Перед выполнением действий, описанных в этой статье, убедитесь, что выполнены следующие необходимые условия:

Ограничения

Конечные точки с режимом проверки подлинности маркераaad_token Microsoft Entra () не поддерживают оценку с помощью интерфейса командной строкиaz ml online-endpoint invoke, пакета SDK ml_client.online_endpoints.invoke()или вкладки "Тест или использование" Студия машинного обучения Azure. Вместо этого используйте универсальный пакет SDK для Python или используйте REST API для передачи маркера уровня управления. Дополнительные сведения см. в разделе "Оценка данных с помощью ключа или маркера".

Подготовка удостоверения пользователя

Для выполнения операций уровня управления (т. е. операций CRUD) и операций плоскости данных (то есть отправки запросов оценки) на конечную точку в сети требуется удостоверение пользователя. Для операций уровня управления и плоскости данных можно использовать одно и то же удостоверение пользователя или разные удостоверения пользователей. В этой статье используется одно и то же удостоверение пользователя для операций уровня управления и плоскости данных.

Сведения о создании удостоверения пользователя в идентификаторе Microsoft Entra см. в разделе "Настройка проверки подлинности". Позже вам потребуется идентификатор удостоверения.

Назначение разрешений удостоверению

В этом разделе описано, как назначить разрешения для удостоверения пользователя, используемого для взаимодействия с конечной точкой. Начните с использования встроенной роли или создания настраиваемой роли. После этого вы назначите роль удостоверению пользователя.

Использование встроенной роли

AzureML Data ScientistВстроенная роль может использоваться для управления конечными точками и развертываниями и использует дикие объекты карта для включения следующих действий RBAC уровня управления:

  • 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

и включить следующее действие RBAC уровня данных:

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

Azure Machine Learning Workspace Connection Secrets Reader При необходимости встроенная роль может использоваться для доступа к секретам из подключений к рабочей области и включает следующие действия RBAC уровня управления:

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

Если вы используете эти встроенные роли, на этом шаге не требуется никаких действий.

(Необязательно) Создание настраиваемой роли

Этот шаг можно пропустить, если вы используете встроенные роли или другие предварительно созданные пользовательские роли.

  1. Определите область и действия для пользовательских ролей, создав определения JSON ролей. Например, следующее определение роли позволяет пользователю CRUD использовать конечную точку в сети в указанной рабочей области.

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

    Следующее определение роли позволяет пользователю отправлять запросы оценки в конечную точку в сети в указанной рабочей области.

    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. Используйте определения JSON для создания пользовательских ролей:

    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>
    

    Примечание.

    Чтобы создать пользовательские роли, вам потребуется одна из трех ролей:

    • владелец
    • администратор доступа пользователей
    • пользовательская роль с Microsoft.Authorization/roleDefinitions/write разрешением (для создания и обновления и удаления пользовательских ролей) и Microsoft.Authorization/roleDefinitions/read разрешений (для просмотра пользовательских ролей).

    Дополнительные сведения о создании пользовательских ролей см. в статье о пользовательских ролях Azure.

  3. Проверьте определение роли:

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

Назначение роли удостоверению

  1. Если вы используете AzureML Data Scientist встроенную роль, используйте следующий код, чтобы назначить роль идентификатору пользователя.

    az role assignment create --assignee <identityId> --role "AzureML Data Scientist" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
    
  2. При необходимости, если вы используете Azure Machine Learning Workspace Connection Secrets Reader встроенную роль, используйте следующий код, чтобы назначить роль удостоверению пользователя.

    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. Если вы используете пользовательскую роль, используйте следующий код, чтобы назначить роль идентификатору пользователя.

    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>
    

    Примечание.

    Чтобы назначить пользовательские роли удостоверению пользователя, вам потребуется одна из трех ролей:

    • владелец
    • администратор доступа пользователей
    • пользовательская роль, которая разрешает Microsoft.Authorization/roleAssignments/write разрешение (назначать пользовательские роли) и Microsoft.Authorization/roleAssignments/read (просматривать назначения ролей).

    Дополнительные сведения о разных ролях Azure и их разрешениях см. в статье "Роли Azure " и "Назначение ролей Azure" с помощью портала Azure.

  4. Подтвердите назначение роли:

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

Получение маркера Microsoft Entra для операций плоскости управления

Выполните этот шаг , если планируется выполнять операции плоскости управления с REST API, который будет напрямую использовать маркер.

Если вы планируете использовать другие способы, такие как Машинное обучение Azure CLI (версия 2), пакет SDK Для Python (версия 2) или Студия машинного обучения Azure, вам не нужно вручную получить маркер Microsoft Entra. Скорее, во время входа удостоверение пользователя уже будет проходить проверку подлинности, и маркер будет автоматически получен и передан для вас.

Маркер Microsoft Entra для операций уровня управления можно получить из конечной точки ресурса Azure: https://management.azure.com

  1. войдите в Azure.

    az login
    
  2. Если вы хотите использовать определенное удостоверение, используйте следующий код для входа с помощью удостоверения:

    az login --identity --username <identityId>
    
  3. Используйте этот контекст для получения маркера.

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

(Необязательно) Проверка конечной точки ресурса и идентификатора клиента для маркера Microsoft Entra

После получения маркера Microsoft Entra можно убедиться, что маркер предназначен для правильной конечной точки management.azure.com ресурса Azure и правильного идентификатора клиента, декодируя маркер с помощью jwt.ms, который вернет ответ JSON со следующими сведениями:

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

Создание конечной точки

В следующем примере создается конечная точка с удостоверением, назначенным системой (SAI) в качестве удостоверения конечной точки. SAI — это тип удостоверения по умолчанию управляемого удостоверения для конечных точек. Некоторые основные роли автоматически назначаются для SAI. Дополнительные сведения о назначении ролей для удостоверения, назначаемого системой, см. в разделе "Автоматическое назначение ролей" для удостоверения конечной точки.

Интерфейс командной строки не требует явного предоставления маркера плоскости управления. Вместо этого интерфейс командной строки выполняет проверку подлинности во время входа, а маркер автоматически извлекается и передается для вас.

  1. Создайте файл YAML определения конечной точки.

    endpoint.yml:

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aad_token
    
  2. Вы можете заменить auth_mode на key проверку подлинности ключа или aml_token для проверки подлинности маркера Машинное обучение Azure. В этом примере используется aad_token для проверки подлинности маркера Microsoft Entra.

    az ml online-endpoint create -f endpoint.yml
    
  3. Проверьте состояние конечной точки:

    az ml online-endpoint show -n my-endpoint
    
  4. Если вы хотите переопределить auth_mode (например, на aad_token) при создании конечной точки, выполните следующий код:

    az ml online-endpoint create -n my-endpoint --auth_mode aad_token
    
  5. Если вы хотите обновить существующую конечную точку и указать auth_mode (например, чтобы aad_token), выполните следующий код:

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

Создание развертывания

Сведения о создании развертывания см. в статье "Развертывание модели машинного обучения с помощью сетевой конечной точки " или "Использование REST" для развертывания модели в качестве сетевой конечной точки. Нет разницы в том, как создавать развертывания для разных режимов проверки подлинности.

Следующий код является примером создания развертывания. Дополнительные сведения о развертывании сетевых конечных точек см. в статье "Развертывание модели машинного обучения с помощью сетевой конечной точки" (с помощью ИНТЕРФЕЙСА командной строки)

  1. Создайте файл YAML определения развертывания.

    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. Создайте развертывание с помощью YAML-файла. В этом примере задайте для нового развертывания весь трафик.

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

Получение URI оценки для конечной точки

Если вы планируете использовать ИНТЕРФЕЙС командной строки для вызова конечной точки, вам не нужно явно получать URI оценки, так как интерфейс командной строки обрабатывает его для вас. Однако вы по-прежнему можете использовать ИНТЕРФЕЙС командной строки для получения URI оценки, чтобы использовать его с другими каналами, такими как REST API.

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

Получение ключа или маркера для операций плоскости данных

Ключ или маркер можно использовать для операций плоскости данных, даже если процесс получения ключа или маркера является операцией плоскости управления. Другими словами, маркер плоскости управления используется для получения ключа или маркера, который позже используется для выполнения операций плоскости данных.

Получение ключа или маркера Машинное обучение Azure требует, чтобы правильная роль была назначена идентификатору пользователя, запрашивающего его, как описано в авторизации для операций плоскости управления. Удостоверение пользователя не требует дополнительных ролей для получения маркера Microsoft Entra.

Маркер ключа или Машинное обучение Azure

Если вы планируете использовать ИНТЕРФЕЙС командной строки для вызова конечной точки, и если конечная точка настроена для использования режима проверки подлинности ключа или маркера Машинное обучение Azure (aml_token), вам не требуется явно получить маркер плоскости данных, так как интерфейс командной строки обрабатывает его для вас. Однако вы по-прежнему можете использовать интерфейс командной строки для получения маркера плоскости данных, чтобы использовать его с другими каналами, такими как REST API.

Чтобы получить ключ или токен Машинное обучение Azure (aml_token), используйте команду az ml online-endpoint get-credentials. Эта команда возвращает документ JSON, содержащий ключ или маркер Машинное обучение Azure.

Ключи возвращаются в primaryKey полях и secondaryKey полях. В следующем примере показано, как использовать параметр --query для возврата только первичного ключа:

export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query primaryKey)

маркеры Машинное обучение Azure возвращаются в accessToken поле:

export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query accessToken)

Кроме того, expiryTimeUtcrefreshAfterTimeUtc поля содержат срок действия маркера и время обновления.

Токен Microsoft Entra

Чтобы получить токен Microsoft Entra (aad_token) с помощью CLI, используйте команду az account get-access-token . Эта команда возвращает документ JSON, содержащий токен Microsoft Entra.

Маркер Microsoft Entra возвращается в accessToken поле:

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

Примечание.

  • Расширение CLI ml не поддерживает получение маркера Microsoft Entra. Используйте az account get-access-token вместо этого, как описано в предыдущем коде.
  • Маркер операций плоскости данных извлекается из конечной точки ml.azure.com ресурса Azure вместо management.azure.comмаркера для операций плоскости управления.

Проверка конечной точки ресурса и идентификатора клиента для маркера Microsoft Entra

После получения маркера Entra можно убедиться, что маркер предназначен для правильной конечной точки ml.azure.com ресурса Azure и правильного идентификатора клиента, декодируя маркер с помощью jwt.ms, который вернет ответ JSON со следующими сведениями:

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

Оценка данных с помощью ключа или маркера

Маркер ключа или Машинное обучение Azure

Можно использовать az ml online-endpoint invoke для конечных точек с ключом или маркером Машинное обучение Azure. Интерфейс командной строки обрабатывает ключ или маркер Машинное обучение Azure автоматически, чтобы не нужно явно передавать его.

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

Токен Microsoft Entra

Использование az ml online-endpoint invoke конечных точек с токеном Microsoft Entra не поддерживается. Вместо этого используйте REST API и используйте URI оценки конечной точки для вызова конечной точки.

Журнал и мониторинг трафика

Чтобы включить ведение журнала трафика в параметрах диагностика для конечной точки, выполните действия, описанные в разделе "Включение и отключение журналов".

Если параметр диагностики включен, вы можете проверка AmlOnlineEndpointTrafficLogs таблицу, чтобы просмотреть режим проверки подлинности и удостоверение пользователя.