Защита управляемых конечных точек в Сети с помощью сетевой изоляции
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения 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 для удостоверения.
Миграция из устаревшего метода сетевой изоляции в управляемую виртуальную сеть рабочей области
Если вы ранее использовали устаревший метод для сетевой изоляции управляемых сетевых конечных точек и хотите перейти на использование управляемой виртуальной сети рабочей области для защиты конечных точек, выполните следующие действия.
- Создайте рабочую область и включите управляемую виртуальную сеть. Дополнительные сведения о настройке управляемой сети для рабочей области см. в разделе "Управляемая рабочая область" виртуальная сеть изоляции.
- (Необязательно) В параметре сети рабочей области добавьте правила исходящего трафика с типом частных конечных точек, если развертываниям требуется доступ к дополнительным частным ресурсам, кроме учетной записи хранения, Azure Key Vault и Реестр контейнеров Azure (ACR), связанной с рабочей областью (которые добавляются по умолчанию).
- (Необязательно) Если вы планируете использовать реестры Машинное обучение Azure, настройте частные конечные точки для исходящего взаимодействия с реестром, учетной записью хранения и ее Реестр контейнеров Azure.
- Создайте сетевые конечные точки и развертывания в новой рабочей области. Вы можете использовать Машинное обучение Azure реестры для непосредственного развертывания из них. Дополнительные сведения см. в разделе "Развертывание из реестра".
- Обновите приложения, вызывающие конечные точки, чтобы использовать URI оценки новых сетевых конечных точек.
- Удалите сетевые конечные точки из старой рабочей области после проверки.
Если вам не нужно поддерживать вычислительные ресурсы или хранить сетевые конечные точки и развертывания в старой рабочей области для обслуживания без простоя, можно просто удалить все вычислительные ресурсы в существующей рабочей области и обновить рабочую область, чтобы включить управляемую рабочую сеть.
Ограничения
Флаг
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 и Application Insights) из другой группы ресурсов, отличной от рабочей области. Однако эти ресурсы должны принадлежать той же подписке и клиенту, что и ваша рабочая область.
Примечание.
Сетевая изоляция, описанная в этой статье, применяется к операциям плоскости данных, то есть операциям, которые приводят к запросам оценки (или обслуживанию моделей). Операции плоскости управления (например, запросы на создание, обновление, удаление или извлечение ключей проверки подлинности) отправляются в Azure Resource Manager через общедоступную сеть.
Подготовка системы
Создайте переменные среды, используемые в этом примере, выполнив следующие команды. Замените
<YOUR_WORKSPACE_NAME>
именем, используемым для рабочей области. Замените<YOUR_RESOURCEGROUP_NAME>
группу ресурсов, которая будет содержать рабочую область.Совет
Перед созданием рабочей области необходимо создать группу ресурсов Azure, чтобы она содержала. Дополнительные сведения см. в разделе "Управление группами ресурсов Azure".
export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>" export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
Создайте рабочую область. Параметр
-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
, так как создание развертывания включает создание образов. Дополнительные сведения см. в статье "Настройка сборок образов ".Внимание
При первом настройке управляемой виртуальной сети рабочей области для рабочей области сеть еще не подготовлена. Прежде чем приступить к созданию сетевых развертываний, подготовьте сеть, следуя указаниям , вручную подготовив управляемую сеть. Создание сетевых развертываний будет отклонено до подготовки управляемой сети.
Настройте значения по умолчанию для интерфейса командной строки, чтобы избежать передачи значений для рабочей области и группы ресурсов несколько раз.
az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
Клонируйте репозиторий примеров, чтобы получить примеры файлов для конечной точки и развертывания, а затем перейдите в каталог репозитория
/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
управления входящего взаимодействия. Затем конечная точка будет использовать частную конечную точку рабочей области для входящего взаимодействия.
Так как рабочая область настроена для управляемой виртуальной сети, все развертывания конечной точки будут использовать частные конечные точки управляемой виртуальной сети для исходящего взаимодействия.
Задайте имя конечной точки.
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Создайте конечную точку с
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
Создайте развертывание в управляемой рабочей области виртуальной сети.
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
Получение состояния развертывания.
az ml online-endpoint show -n $ENDPOINT_NAME
Проверьте конечную точку с помощью запроса оценки с помощью интерфейса командной строки.
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Получение журналов развертывания.
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Удалите конечную точку, если она больше не нужна.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Удалите все ресурсы, созданные в этой статье. Замените
<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
см. в разделе "Изоляция сети" с помощью версии 2.
Внимание
Обратитесь к группе безопасности сети перед отключением v1_legacy_mode
, так как они могли включить ее по причине.
Сбой при создании подключенной конечной точки с проверкой подлинности на основе ключей
Используйте следующую команду, чтобы получить список сетевых правил хранилища ключей Azure для рабочей области. Замените <keyvault-name>
именем своего хранилища ключей:
az keyvault network-rule list -n <keyvault-name>
Ответ для этой команды аналогичен следующему коду JSON:
{
"bypass": "AzureServices",
"defaultAction": "Deny",
"ipRules": [],
"virtualNetworkRules": []
}
Если bypass
не имеет значение AzureServices
, выполните инструкции в статье Настройка параметров сети для хранилища ключей, чтобы присвоить ему значение AzureServices
.
Сбой при выполнении сетевого развертывания с ошибкой скачивания образа
Примечание.
Эта проблема применяется при использовании устаревшего метода сетевой изоляции для управляемых сетевых конечных точек, в которых Машинное обучение Azure создает управляемую виртуальную сеть для каждого развертывания в конечной точке.
Проверьте, является
disabled
лиegress-public-network-access
флаг для развертывания. Если этот флаг включен, а видимость реестра контейнеров является частной, ожидается этот сбой.Используйте следующую команду, чтобы проверить состояние подключения к частной конечной точке. Замените
<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>
Не удается разрешить конечную точку оценки
Убедитесь, что клиент, отправивший запрос оценки, представляет виртуальную сеть, которая имеет доступ к рабочей области Машинного обучения Azure.
nslookup
Используйте команду в имени узла конечной точки, чтобы получить сведения об IP-адресе, например:nslookup endpointname.westcentralus.inference.ml.azure.com
Ответ содержит адрес, который должен находиться в диапазоне, предоставленном виртуальной сетью.
Примечание.
- Для конечной точки Kubernetes в Сети имя узла конечной точки должно быть CName (доменное имя), указанное в кластере Kubernetes.
- Если конечная точка — HTTP, IP-адрес содержится в URI конечной точки, который можно получить из пользовательского интерфейса студии.
- Вы можете найти дополнительные способы получения IP-адреса конечной точки в безопасной конечной точке Kubernetes online.
nslookup
Если команда не разрешает имя узла, выполните следующие действия:
Управляемые сетевые конечные точки
Используйте следующую команду, чтобы проверить, существует ли запись A в зоне частного dns-сервера доменных имен для виртуальной сети.
az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
Результаты должны содержать запись, аналогичную
*.<GUID>.inference.<region>
.Если значение вывода не возвращается, удалите частную конечную точку рабочей области и повторно создайте ее. Дополнительные сведения см. в статье Как настроить частную конечную точку.
Если рабочая область с частной конечной точкой использует пользовательский DNS-сервер, выполните следующую команду, чтобы убедиться, что разрешение из пользовательской DNS работает правильно.
dig endpointname.westcentralus.inference.ml.azure.com
Сетевые конечные точки Kubernetes
Проверьте конфигурацию DNS в кластере Kubernetes.
Также проверьте, работает ли 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"
Если сбой или время ожидания curl HTTPs завершается сбоем, но http работает, проверьте, является ли сертификат допустимым.
Если предыдущий процесс не удается разрешить запись A, проверьте, работает ли разрешение из Azure DNS (168.63.129.16).
dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
Если предыдущая команда выполнена успешно, устранение неполадок условного сервера пересылки для приватного канала на пользовательском DNS.
Не удается оценить сетевые развертывания
Выполните следующую команду, чтобы убедиться, что развертывание выполнено успешно:
az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}'
Если развертывание выполнено успешно, значение
state
равноSucceeded
.Если развертывание выполнено успешно, с помощью следующей команды проверьте, назначен ли развертыванию трафик. Замените
<endpointname>
именем конечной точки.az ml online-endpoint show -n <endpointname> --query traffic
Ответ этой команды должен содержать процент трафика, назначенного развертываниям.
Совет
Этот шаг не нужен, если вы используете заголовок в запросе
azureml-model-deployment
для целевого развертывания.Если назначения трафика или заголовок развертывания заданы правильно, используйте следующую команду, чтобы получить журналы для конечной точки. Замените
<endpointname>
именем конечной точки и<deploymentname>
развертыванием.az ml online-deployment get-logs -e <endpointname> -n <deploymentname>
Просмотрите журналы, чтобы узнать, возникла ли проблема с выполнением кода оценки при отправке запроса в развертывание.
Следующие шаги
- Сетевая изоляция с управляемыми подключенными конечными точками
- Изоляция управляемой сети рабочей области
- Руководство. Создание безопасной рабочей области
- Безопасное развертывание для сетевых конечных точек
- Доступ к ресурсам Azure с помощью подключенной конечной точки и управляемого удостоверения
- Устранение неполадок развертывания сетевых конечных точек