Защита управляемых конечных точек в Сети с помощью сетевой изоляции

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

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

Примеры, использующие устаревший метод для сетевой изоляции, см. в файлах развертывания deploy-moe-vnet-legacy.sh (для развертывания с помощью универсальной модели) и deploy-moe-vnet-mlflow-legacy.sh (для развертывания с помощью модели MLflow) в репозитории GitHub в azureml-examples.

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

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

  • Установите и настройте Azure CLI и ml расширение в Azure CLI. Дополнительные сведения см. в разделе Установка, настройка и использование CLI (версия 2).

    Совет

    Машинное обучение Azure управляемая виртуальная сеть появилась 23 мая 2023 года. Если у вас есть более ранняя версия расширения ml, возможно, потребуется обновить его для работы примеров, приведенных в этой статье. Чтобы обновить расширение, используйте следующую команду Azure CLI:

    az extension update -n ml
    
  • В примерах интерфейса командной строки в этой статье предполагается, что вы используете оболочку Bash (или совместимая). Например, из системы Linux или подсистемы Windows для Linux.

  • У вас должна быть группа ресурсов Azure, в которой у вас (или вашего субъекта-службы) должен быть доступ Contributor. Если вы настроили ml расширение, у вас будет такая группа ресурсов.

  • Если вы хотите использовать управляемое удостоверение , назначаемое пользователем, для создания конечных точек и сетевых развертываний и управления ими, удостоверение должно иметь соответствующие разрешения. Дополнительные сведения о необходимых разрешениях см. в разделе "Настройка проверки подлинности службы". Например, необходимо назначить соответствующее разрешение RBAC для Azure Key Vault для удостоверения.

Миграция из устаревшего метода сетевой изоляции в управляемую виртуальную сеть

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

  1. Удалите все вычислительные ресурсы в рабочей области.
  2. Включите управляемую виртуальную сеть для рабочей области. Дополнительные сведения о настройке управляемой сети для рабочей области см. в разделе "Управляемая рабочая область" виртуальная сеть изоляции.
  3. Настройте частные конечные точки для исходящего взаимодействия с частными ресурсами, к которым требуются управляемые сетевые конечные точки. Эти частные ресурсы включают учетную запись хранения, Azure Key Vault и Реестр контейнеров Azure (ACR).
  4. (Необязательно) Если вы интегрируете с реестром пользователей, настройте частные конечные точки для исходящего взаимодействия с реестром, учетной записью хранения и ее ACR.

Ограничения

  • Флаг v1_legacy_mode должен быть отключен (false) в рабочей области Машинного обучения Azure. Если этот флаг включен, вы не сможете создать управляемую конечную точку в сети. Дополнительные сведения см. в статье Сетевая изоляция с помощью API версии 2.

  • Если в рабочей области Машинного обучения Azure есть частная конечная точка, созданная до 24 мая 2022 г., необходимо повторно создать частную конечную точку рабочей области, прежде чем настраивать подключенные конечные точки для использования частной конечной точки. Дополнительные сведения о создании частной конечной точки для рабочей области см. в статье Настройка частной конечной точки для рабочей области Машинного обучения Azure.

    Совет

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

    В Студии перейдите в Directory + Subscription + Workspace раздел (в правом верхнем углу студии) и выберите View all properties in Azure Portal. Выберите представление JSON в правом верхнем углу страницы "Обзор", а затем выберите последнюю версию API. На этой странице можно проверка значение properties.creationTime.

    Кроме того, используйте az ml workspace showинтерфейс командной строки с my_ml_client.workspace.get("my-workspace-name")пакетом SDK или curl рабочей областью с REST API.

  • При использовании сетевой изоляции с сетевыми конечными точками можно использовать связанные с рабочей областью ресурсы (Реестр контейнеров Azure (ACR), служба хранилища учетную запись, Key Vault и приложение Аналитика) из другой группы ресурсов, отличной от рабочей области. Однако эти ресурсы должны принадлежать той же подписке и клиенту, что и ваша рабочая область.

Примечание.

Сетевая изоляция, описанная в этой статье, применяется к операциям плоскости данных, то есть операциям, которые приводят к запросам оценки (или обслуживанию моделей). Операции плоскости управления (например, запросы на создание, обновление, удаление или извлечение ключей проверки подлинности) отправляются в Azure Resource Manager через общедоступную сеть.

Подготовка системы

  1. Создайте переменные среды, используемые в этом примере, выполнив следующие команды. Замените <YOUR_WORKSPACE_NAME> именем, используемым для рабочей области. Замените <YOUR_RESOURCEGROUP_NAME> группу ресурсов, которая будет содержать рабочую область.

    Совет

    Перед созданием рабочей области необходимо создать группу ресурсов Azure, чтобы она содержала. Дополнительные сведения см. в разделе "Управление группами ресурсов Azure".

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Создайте рабочую область. Параметр -m allow_only_approved_outbound настраивает управляемую виртуальную сеть для рабочей области и блокирует исходящий трафик, за исключением утвержденных назначений.

    az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_only_approved_outbound
    

    Кроме того, если вы хотите разрешить развертывание отправлять исходящий трафик в Интернет, раскомментируйте следующий код и запустите его.

    # az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_internet_outbound
    

    Дополнительные сведения о создании новой рабочей области или обновлении существующей рабочей области для использования управляемой виртуальной сети см. в статье "Настройка управляемой виртуальной сети для разрешения исходящего трафика в Интернет".

    Если рабочая область настроена с частной конечной точкой, Реестр контейнеров Azure рабочей области необходимо настроить для уровня "Премиум", чтобы разрешить доступ через частную конечную точку. Дополнительные сведения см в статье Уровни службы Реестра контейнеров Azure. Кроме того, рабочая область должна быть задана свойством image_build_compute , так как создание развертывания включает создание образов. Дополнительные сведения см. в статье "Настройка сборок образов ".

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

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Клонируйте репозиторий примеров, чтобы получить примеры файлов для конечной точки и развертывания, а затем перейдите в каталог репозитория /cli .

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd /cli
    

Команды, приведенные в этом руководстве, находятся в файле deploy-managed-online-endpoint-workspacevnet.sh в cli каталоге, а файлы конфигурации YAML находятся в подкаталоге endpoints/online/managed/sample/ .

Создание защищенной управляемой подключенной конечной точки

Чтобы создать защищенную управляемую конечную точку в сети, создайте конечную точку в рабочей области и задайте для этого конечную точку public_network_access для disabled управления входящего взаимодействия. Затем конечная точка будет использовать частную конечную точку рабочей области для входящего взаимодействия.

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

  1. Задайте имя конечной точки.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Создайте конечную точку с public_network_access отключенным для блокировки входящего трафика.

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml --set public_network_access=disabled
    

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

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

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Создайте развертывание в управляемой рабочей области виртуальной сети.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Получение состояния развертывания.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. Проверьте конечную точку с помощью запроса оценки с помощью интерфейса командной строки.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Получение журналов развертывания.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Удалите конечную точку, если она больше не нужна.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Удалите все ресурсы, созданные в этой статье. Замените <resource-group-name> именем группы ресурсов, используемой в этом примере:

    az group delete --resource-group <resource-group-name>
    

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

Создание подключенной конечной точки завершается сбоем с сообщением V1LegacyMode == true

Рабочую область Машинного обучения Azure можно настроить для v1_legacy_mode, в результате чего API версии 2 будут отключены. Управляемые подключенные конечные точки — это функция платформы API версии 2. Она не будет работать, если для рабочей области включен параметр v1_legacy_mode.

Внимание

Прежде чем отключить v1_legacy_mode, посоветуйтесь с командой, обеспечивающей безопасность сети. Возможно, этот параметр был специально включен ими.

Сведения о том, как отключить v1_legacy_mode, см. в статье Сетевая изоляция с помощью версии 2.

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

Используйте следующую команду, чтобы получить список правил сети Azure Key Vault для рабочей области. Замените <keyvault-name> именем своего хранилища ключей:

az keyvault network-rule list -n <keyvault-name>

Отклик на эту команду будет похож на приведенный ниже документ JSON:

{
    "bypass": "AzureServices",
    "defaultAction": "Deny",
    "ipRules": [],
    "virtualNetworkRules": []
}

Если bypass не имеет значение AzureServices, выполните инструкции в статье Настройка параметров сети для хранилища ключей, чтобы присвоить ему значение AzureServices.

Сбой при выполнении сетевого развертывания с ошибкой скачивания образа

Примечание.

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

  1. Убедитесь, что флаг egress-public-network-access для развертывания отключен. Если этот флаг включен, а для реестра контейнеров установлен частный уровень видимости, этот сбой будет ожидаемым.

  2. Используйте следующую команду, чтобы проверить состояние подключения к частной конечной точке. Замените <registry-name> именем Реестра контейнеров Azure для рабочей области:

    az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
    

    Убедитесь, что в документе отклика для поля status задано значение Approved. Если это не так, используйте следующую команду, чтобы утвердить его. Замените <private-endpoint-name> именем, полученным от предыдущей команды:

    az network private-endpoint-connection approve -n <private-endpoint-name>
    

Не удается разрешить конечную точку оценки

  1. Убедитесь, что клиент, отправивший запрос оценки, представляет виртуальную сеть, которая имеет доступ к рабочей области Машинного обучения Azure.

  2. Чтобы получить сведения об IP-адресе, используйте команду nslookup в имени узла конечной точки:

    nslookup endpointname.westcentralus.inference.ml.azure.com
    

    Отклик будет содержать адрес. Этот адрес должен находиться в диапазоне, предоставленном виртуальной сетью.

    Примечание.

    Для конечной точки Kubernetes в Сети имя узла конечной точки должно быть CName (доменное имя), указанное в кластере Kubernetes. Если это конечная точка HTTP, IP-адрес будет содержаться в URI конечной точки, которую можно получить непосредственно в пользовательском интерфейсе Studio. Дополнительные способы получения IP-адреса конечной точки можно найти в безопасной конечной точке Kubernetes online.

  3. Если имя узла не разрешено командой nslookup :

    Для управляемой конечной точки в Сети

    1. Проверьте, существует ли запись A в частной зоне DNS для виртуальной сети.

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

      az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
      

      В результатах должна присутствовать запись, аналогичная *.<GUID>.inference.<region>.

    2. Если значение вывода не возвращается, удалите частную конечную точку для рабочей области и создайте ее снова. Дополнительные сведения см. в статье Как настроить частную конечную точку.

    3. Если рабочая область с частной конечной точкой настроена с помощью пользовательского DNS-сервера, используйте следующую команду, чтобы проверить правильность разрешения из пользовательского DNS.

      dig endpointname.westcentralus.inference.ml.azure.com
      

    Для конечной точки Kubernetes online

    1. Проверьте конфигурацию DNS в кластере Kubernetes.

    2. Кроме того, можно проверка, если azureml-fe работает должным образом, используйте следующую команду:

      kubectl exec -it deploy/azureml-fe -- /bin/bash
      (Run in azureml-fe pod)
      
      curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

      Для HTTP используйте

      curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

    Если сбой HTTPs curl (например, время ожидания), но http работает, проверка, что сертификат действителен.

    Если это не удается разрешить запись A, проверьте, работает ли разрешение из Azure DNS(168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    

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

Не удается оценить сетевые развертывания

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

    az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}' 
    

    Если развертывание выполнено успешно, state будет иметь значение Succeeded.

  2. Если развертывание выполнено успешно, с помощью следующей команды проверьте, назначен ли развертыванию трафик. Замените <endpointname> именем используемой конечной точки:

    az ml online-endpoint show -n <endpointname>  --query traffic
    

    Совет

    Этот шаг не требуется, если вы используете заголовок azureml-model-deployment в запросе к целевому развертыванию.

    Отклик этой команды должен содержать список с указанием процента трафика, назначенного развертываниям.

  3. Если назначения трафика (или заголовок развертывания) заданы правильно, используйте следующую команду, чтобы получить журналы для конечной точки. Замените <endpointname> именем конечной точки, а <deploymentname> — развертыванием:

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    

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

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