Защита среды вывода Машинного обучения Azure с помощью виртуальных сетей (версия 1)

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

ОБЛАСТЬ ПРИМЕНЕНИЯ: Расширение ML для Azure CLI версии 1

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

В этой статье вы узнаете, как защитить следующие ресурсы вывода в виртуальной сети.

  • Кластер Azure Kubernetes Service (AKS) по умолчанию
  • Частный кластер AKS
  • Кластер AKS с закрытой ссылкой

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

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

  • Существующие виртуальная сеть и подсеть для использования с вычислительными ресурсами.

  • Чтобы развернуть ресурсы в виртуальной сети или подсети, учетная запись пользователя должна иметь разрешения на доступ к следующим действиям в управлении доступом на основе ролей в Azure (Azure RBAC):

    • "Microsoft.Network/*/read" в ресурсе виртуальной сети. Это разрешение не требуется для развертываний шаблонов Azure Resource Manager (ARM).
    • "Microsoft.Network/virtualNetworks/join/action" в ресурсе виртуальной сети.
    • "Microsoft.Network/virtualNetworks/subnets/join/action" в ресурсе подсети.

    Дополнительные сведения об Azure RBAC при работе с сетью см. в разделе Встроенные роли сети.

Важно!

Для использования некоторых команд Azure CLI, приведенных в этой статье, используйте расширение azure-cli-ml (версия 1) для Машинного обучения Azure. Поддержка расширения версии 1 будет прекращена 30 сентября 2025 г. Вы можете установить и использовать расширение версии 1 до этой даты.

Рекомендуется перейти на расширение ml (версия 2) до 30 сентября 2025 г. Дополнительные сведения о расширении версии 2 см. на странице расширения CLI для Azure ML и пакета SDK для Python версии 2.

Ограничения

Экземпляры контейнеров Azure

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

Служба Azure Kubernetes

  • Если кластер AKS находится за пределами виртуальной сети, рабочая область и связанные с ней ресурсы (хранилище, хранилище ключей, Реестр контейнеров Azure) должны иметь частные конечные точки или конечные точки службы в той же виртуальной сети, что и кластер AKS. Чтобы добавить эти частные конечные точки или конечные точки службы в виртуальную сеть, прочтите руководство Создание защищенной рабочей области.
  • Если рабочая область имеет частную конечную точку, кластер службы Azure Kubernetes должен находиться в том же регионе Azure, что и рабочая область.
  • Использование общедоступного полного доменного имени (FQDN) с частным кластером AKSне поддерживается в Машинном обучении Azure.

Служба Azure Kubernetes

Важно!

Чтобы использовать кластер AKS в виртуальной сети, сначала выполните необходимые условия в статье Настройка расширенных параметров сети в Службе Azure Kubernetes (AKS).

Чтобы добавить AKS в виртуальной сети в рабочую область, выполните следующие действия.

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

  2. Выберите Вычислительная среда слева и Кластеры вывода в центре. После этого щелкните + Создать. Наконец, выберите AksCompute.

    Screenshot of create inference cluster dialog.

  3. В диалоговом окне "Создать AksCompute" выберите "Создать", "Расположение" и размер виртуальной машины для кластера. Наконец, щелкните Далее.

    Screenshot of VM settings.

  4. В разделе Настройка параметров заполните поле Имя вычисления, выберите значения параметров Cluster Purpose (Назначение кластера) и Number of nodes (Число узлов), а затем щелкните Дополнительно, чтобы отобразить параметры сети. В области Настройка виртуальной сети задайте следующие значения.

    • Настройте виртуальную сеть для использования.

      Совет

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

    • Настройте подсеть для создания кластера.

    • В поле Диапазон адресов службы Kubernetes введите диапазон адресов службы Kubernetes. Этот диапазон адресов использует диапазон IP-адресов нотации CIDR для определения IP-адресов, которые доступны этому кластеру. Он не должен пересекаться с диапазонами IP-адресов подсети (например, 10.0.0.0/16).

    • В поле IP-адрес службы DNS Kubernetes введите IP-адрес службы DNS Kubernetes. Это IP-адрес, назначенный службе DNS Kubernetes. Он должен находиться в пределах диапазона адресов службы Kubernetes (например, 10.0.0.10).

    • В поле Адрес моста Docker введите адрес моста Docker. Этот IP-адрес, назначенный мосту Docker. Он не должен пересекаться с диапазоном IP-адресов, выделенным для какой-либо подсети или службы Kubernetes (например, 172.18.0.1/16).

    Screenshot of configure network settings.

  5. При развертывании модели в качестве веб-службы для AKS создается конечная точка оценки для обработки запросов, запрашивающих запросы. Убедитесь, что в группе безопасности сети (NSG), управляющей виртуальной сетью, включено правило безопасности для входящего трафика для IP-адреса конечной точки оценки, чтобы ее можно было вызывать извне виртуальной сети.

    Чтобы найти IP-адрес конечной точки оценки, просмотрите URI оценки для развернутой службы. Сведения о просмотре URI оценки см. в разделе Использование модели, развернутой в качестве веб-службы.

    Важно!

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

    Screenshot that shows an inbound security rule.

    Важно!

    IP-адрес, показанный в образе для конечной точки оценки, будет отличаться для ваших развертываний. Хотя один и тот же IP-адрес совместно используется всеми развертываниями в одном кластере AKS, каждый кластер AKS будет иметь разные IP-адреса.

Вы также можете использовать пакет SDK для Машинного обучения Azure, чтобы добавить в виртуальную сеть службу Azure Kubernetes. Если в вашей виртуальной сети уже есть кластер AKS, можно подключить его к рабочей области, следуя инструкциям в разделе Развертывание в AKS. Следующий код создает новый экземпляр AKS в подсети default виртуальной сети с именем mynetwork.

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

from azureml.core.compute import ComputeTarget, AksCompute

# Create the compute configuration and set virtual network information
config = AksCompute.provisioning_configuration(location="eastus2")
config.vnet_resourcegroup_name = "mygroup"
config.vnet_name = "mynetwork"
config.subnet_name = "default"
config.service_cidr = "10.0.0.0/16"
config.dns_service_ip = "10.0.0.10"
config.docker_bridge_cidr = "172.17.0.1/16"

# Create the compute target
aks_target = ComputeTarget.create(workspace=ws,
                                  name="myaks",
                                  provisioning_configuration=config)

Когда завершится процесс создания, вы сможете выполнять анализ или оценку моделей в кластере AKS за виртуальной сетью. Дополнительные сведения см. в статье о развертывании в Службе Azure Kubernetes.

Дополнительные сведения об использовании Role-Based управления доступом с помощью Kubernetes см. в статье Использование Azure RBAC для авторизации Kubernetes.

Роль "Участник сетей"

Важно!

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

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

  1. Чтобы найти субъект-службу или идентификатор управляемого удостоверения для AKS, используйте следующие команды Azure CLI. Замените <aks-cluster-name> именем кластера. Замените <resource-group-name> на имя группы ресурсов, которая содержит кластер AKS:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query servicePrincipalProfile.clientId
    

    Если эта команда возвращает значение msi, используйте следующую команду, чтобы указать идентификатор субъекта для управляемого удостоверения:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. Чтобы узнать идентификатор группы ресурсов, содержащей виртуальную сеть, используйте следующую команду. Замените <resource-group-name> на имя группы ресурсов, которая содержит виртуальную сеть Azure:

    az group show -n <resource-group-name> --query id
    
  3. Чтобы добавить субъект-службу или управляемое удостоверение в качестве участника сети, используйте следующую команду. Замените <SP-or-managed-identity> идентификатором, возвращенным для субъекта-службы или управляемого удостоверения. Замените <resource-group-id> идентификатором, возвращенным для группы ресурсов, содержащей виртуальную сеть.

    az role assignment create --assignee <SP-or-managed-identity> --role 'Network Contributor' --scope <resource-group-id>
    

Дополнительные сведения об использовании внутреннего балансировщика нагрузки с AKS см. в разделе Использование внутреннего балансировщика нагрузки со службой Azure Kubernetes.

Безопасный трафик виртуальной сети

Изолировать трафик между кластером AKS и виртуальной сетью можно двумя способами.

  • Частный кластер AKS. Этот подход использует Приватный канал Azure для защиты обмена данными с кластером для операций развертывания и управления.
  • Внутренняя подсистема балансировки нагрузки AKS. Этот подход настраивает конечную точку для развертываний в AKS для использования частного IP-адреса в виртуальной сети.

Частный кластер AKS

По умолчанию кластеры AKS имеют уровень управления или сервер API с общедоступными IP-адресами. Вы можете настроить AKS для использования закрытой плоскости управления, создав частный кластер AKS. Дополнительные сведения см. в статье Создание частного кластера службы Kubernetes Azure.

После создания частного кластера AKS подключите кластер к виртуальной сети для использования с машинное обучение Azure.

Внутренняя подсистема балансировки нагрузки AKS

По умолчанию в развертываниях AKS используется общедоступная подсистема балансировки нагрузки. В этом разделе вы узнаете, как настроить AKS для использования внутренней подсистемы балансировки нагрузки. Внутренняя (или частная) подсистема балансировки нагрузки используется там, где в качестве интерфейсных разрешены только частные IP-адреса. Внутренние Load Balancer используются для балансировки трафика внутри виртуальной сети.

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

Включить частную подсистему балансировки нагрузки

Важно!

Невозможно включить частный IP-адрес при создании кластера службы Azure Kubernetes в Студии машинного обучения Azure. Вы можете создать его с внутренней подсистемой балансировки нагрузки при использовании пакета SDK для Python или расширения Azure CLI для машинного обучения.

В следующих примерах показано, как создать новый кластер AKS с частным IP-или внутренней подсистемой балансировки нагрузки с помощью пакета SDK и CLI:

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

import azureml.core
from azureml.core.compute import AksCompute, ComputeTarget

# Verify that cluster does not exist already
try:
    aks_target = AksCompute(workspace=ws, name=aks_cluster_name)
    print("Found existing aks cluster")

except:
    print("Creating new aks cluster")

    # Subnet to use for AKS
    subnet_name = "default"
    # Create AKS configuration
    prov_config=AksCompute.provisioning_configuration(load_balancer_type="InternalLoadBalancer")
    # Set info for existing virtual network to create the cluster in
    prov_config.vnet_resourcegroup_name = "myvnetresourcegroup"
    prov_config.vnet_name = "myvnetname"
    prov_config.service_cidr = "10.0.0.0/16"
    prov_config.dns_service_ip = "10.0.0.10"
    prov_config.subnet_name = subnet_name
    prov_config.load_balancer_subnet = subnet_name
    prov_config.docker_bridge_cidr = "172.17.0.1/16"

    # Create compute target
    aks_target = ComputeTarget.create(workspace = ws, name = "myaks", provisioning_configuration = prov_config)
    # Wait for the operation to complete
    aks_target.wait_for_completion(show_output = True)

При присоединении существующего кластера к рабочей области используйте load_balancer_type и load_balancer_subnet параметры AksCompute.attach_configuration () для настройки подсистемы балансировки нагрузки.

Сведения о присоединении кластера см. в разделе Подключение существующего кластера AKS.

Ограничение исходящих подключений из виртуальной сети

Если вы не хотите использовать правила для исходящего трафика по умолчанию и хотите ограничить исходящий доступ в виртуальной сети, необходимо разрешить доступ к реестру контейнеров Azure. Например, убедитесь, что группы безопасности сети (NSG) содержат правило, которое разрешает доступ к тегу службы AzureContainerRegistry.RegionName, где {RegionName} — это имя региона Azure.

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

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