Поделиться через


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

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

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

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

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

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

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

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

Для выполнения операций уровня управления (т. е. операций 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. Дополнительные сведения о назначении ролей для удостоверения, назначаемого системой, см. в разделе "Автоматическое назначение ролей" для удостоверения конечной точки.

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

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

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

Чтобы получить ключи или маркер для операций плоскости данных, используйте команду az ml online-endpoint get-credentials . Эта команда возвращает выходные данные JSON, содержащие ключи, маркеры и/или дополнительные сведения.

Совет

Для извлечения определенных сведений из выходных данных --query JSON параметр команды CLI используется в качестве примера. Однако для этой цели можно использовать любое подходящее средство.

Когда auth_mode конечная точка находится key

  • Ключи возвращаются в primaryKey полях и 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)

Когда auth_mode конечная точка находится aml_token

  • Маркер возвращается в accessToken поле.
  • Время окончания срока действия маркера возвращается в expiryTimeUtc поле.
  • Время обновления маркера возвращается в 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)

Когда auth_mode конечная точка находится aad_token

  • Маркер возвращается в accessToken поле.
  • Время окончания срока действия маркера возвращается в 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)

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

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

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

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

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

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

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

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

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