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


Настройка проверки подлинности для моделей, развернутых в виде веб-служб

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1

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

Для развертываний моделей, созданных в Машинном обучении Azure, можно настроить один из следующих двух методов проверки подлинности:

  • На основе ключа — для проверки подлинности в веб-службе используется статический ключ.

  • на основе маркера: временный маркер должен быть получен из рабочей области Машинное обучение Azure (с помощью идентификатора Microsoft Entra) и использоваться для проверки подлинности в веб-службе. Срок действия маркера истекает через определенный период времени, и его нужно регулярно обновлять для продолжения работы с веб-службой.

    Примечание.

    Проверка подлинности на основе маркера доступна только для развертываний в Службе Azure Kubernetes.

Проверка подлинности на основе ключей

В веб-службах, развернутых в Службе Azure Kubernetes, по умолчанию включена проверка подлинности на основе ключа.

В службах, развернутых в Экземплярах контейнеров Azure (ACI), проверка подлинности на основе ключа по умолчанию отключена, но ее можно включить, указав параметр auth_enabled=True при создании веб-службы в ACI. В следующем примере кода создается конфигурация развертывания ACI с включенной проверкой подлинности на основе ключа.

from azureml.core.webservice import AciWebservice

aci_config = AciWebservice.deploy_configuration(cpu_cores = 1,
                                                memory_gb = 1,
                                                auth_enabled=True)

После этого можно будет использовать настраиваемую конфигурацию ACI в развертывании с помощью класса Model.

from azureml.core.model import Model, InferenceConfig


inference_config = InferenceConfig(entry_script="score.py",
                                   environment=myenv)
aci_service = Model.deploy(workspace=ws,
                       name="aci_service_sample",
                       models=[model],
                       inference_config=inference_config,
                       deployment_config=aci_config)
aci_service.wait_for_deployment(True)

Чтобы получить ключи проверки подлинности, используйте aci_service.get_keys(). Чтобы повторно создать ключ, используйте функцию regen_key() и передайте значение Primary или Secondary.

aci_service.regen_key("Primary")
# or
aci_service.regen_key("Secondary")

Проверка подлинности на основе токенов

При включении проверки подлинности с помощью маркеров для веб-службы пользователи должны предоставить веб-службе Машинного обучения Azure маркер JWT для доступа к ней. Срок действия маркера безопасности истекает через заданное время, и его необходимо обновить, чтобы продолжить выполнение вызовов.

  • Проверка подлинности на основе маркеров безопасности включена по умолчанию при развертывании в Службе Azure Kubernetes.
  • При развертывании в Экземплярах контейнеров Azure проверка подлинности на основе маркеров безопасности не поддерживается.
  • Проверку подлинности на основе маркера нельзя использовать одновременно с проверкой подлинности на основе ключа.

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

from azureml.core.webservice import AksWebservice
from azureml.core.model import Model, InferenceConfig

# Create the config
aks_config = AksWebservice.deploy_configuration()

#  Enable token auth and disable (key) auth on the webservice
aks_config = AksWebservice.deploy_configuration(token_auth_enabled=True, auth_enabled=False)

aks_service_name ='aks-service-1'

# deploy the model
aks_service = Model.deploy(workspace=ws,
                           name=aks_service_name,
                           models=[model],
                           inference_config=inference_config,
                           deployment_config=aks_config,
                           deployment_target=aks_target)

aks_service.wait_for_deployment(show_output = True)

Если проверка подлинности на основе токенов включена, можно использовать метод get_token для получения маркера JWT и его срока действия:

Совет

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

token, refresh_by = aks_service.get_token()
print(token)

Внимание

После истечения срока действия маркера безопасности refresh_by необходимо запрашивать новый маркер. Если необходимо обновить маркеры за пределами пакета SDK для Python, можно использовать REST API с проверкой подлинности на основе субъекта-службы, чтобы периодически выполнять вызов service.get_token(), как обсуждалось ранее.

Настоятельно рекомендуется создать рабочую область Машинного обучения Azure в том же регионе, что и кластер службы Azure Kubernetes.

Для проверки подлинности с помощью маркера веб-служба выполняет вызов в регион, в котором создана рабочая область Машинного обучения Azure. Если регион рабочей области недоступен, вы не сможете получить маркер для веб-службы, даже если кластер находится в другом регионе, отличном от региона рабочей области. Результатом является то, что проверка подлинности Microsoft Entra недоступна, пока регион рабочей области не будет доступен снова.

Кроме того, чем больше расстояние между регионом кластера и регионом рабочей области, тем дольше будет проходить получение маркера.

Следующие шаги

Дополнительные сведения о проверке подлинности в развернутой модели см. в статье Использование модели Машинного обучения Azure, развернутой в качестве веб-службы.