Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы настроите приложение службы приложений с безопасным, изолированным от сети взаимодействием со службами серверной части. Пример сценария используется в учебнике: Подключение Cognitive Service к службе приложений с помощью Key Vault для обеспечения безопасности. По завершении работы у вас будет приложение службы приложений, которое будет обращаться как к Key Vault, так и к Foundry Tools через виртуальную сеть Azure, при этом доступ к этим бэкэнд-ресурсам для другого трафика будет закрыт. Весь трафик будет изолирован в виртуальной сети с помощью интеграции виртуальной сети и частных конечных точек.
Как мультитенантная служба, исходящий сетевой трафик из приложения службы приложений в другие службы Azure использует ту же среду с другими приложениями или даже другими подписками. Хотя сам трафик можно зашифровать, некоторые сценарии могут требовать дополнительного уровня безопасности путем изоляции внутреннего взаимодействия от другого сетевого трафика. Как правило, эти сценарии доступны крупным предприятиям с высоким уровнем опыта, но служба приложений делает их доступными благодаря интеграции с виртуальной сетью.
С этой архитектурой:
- Общедоступный трафик к внутренним службам блокируется.
- Исходящий трафик из службы приложений направляется в виртуальную сеть и может обращаться к внутренним службам.
- Служба приложений может выполнять разрешение DNS для внутренних служб через частные зоны DNS.
Освещаются следующие темы:
- Создание виртуальной сети и подсетей для интеграции виртуальной сети службы приложений
- Создание частных зон DNS
- Создание частных конечных точек
- Настройка интеграции виртуальной сети в Службе приложений
Предпосылки
В этом руководстве предполагается, что вы выполнили Tutorial: безопасное подключение к Cognitive Service из службы приложений через Key Vault и создали приложение для определения языка.
В этом руководстве по-прежнему используются следующие переменные среды из предыдущего руководства. Убедитесь, что они правильно заданы.
groupName=myKVResourceGroup
region=westeurope
csResourceName=<cs-resource-name>
appName=<app-name>
vaultName=<vault-name>
planName=<plan-name>
csResourceKVUri=<cs-resource-kv-uri>
csKeyKVUri=<cs-key-kv-uri>
Создание виртуальной сети и подсетей
Создайте виртуальную сеть. Замените <имя> виртуальной сети уникальным именем.
# Save vnet name as variable for convenience vnetName=<virtual-network-name> az network vnet create --resource-group $groupName --location $region --name $vnetName --address-prefixes 10.0.0.0/16Создайте подсеть для интеграции виртуальной сети службы приложений.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name vnet-integration-subnet --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms --private-endpoint-network-policies EnabledДля службы приложений подсеть интеграции виртуальной сети рекомендуется иметь блок
/26CIDR как минимум (см. требования к подсети интеграции виртуальной сети). Варианта/24более чем достаточно.--delegations Microsoft.Web/serverfarmsуказывает, что подсеть делегирована для интеграции с виртуальной сетью Службы приложений.Создайте другую подсеть для частных конечных точек.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --private-endpoint-network-policies DisabledДля подсетей частной конечной точки необходимо отключить политики сети частной конечной точки.
Создание частных зон DNS
Так как ресурсы Key Vault и службы Azure AI будут находиться за частными конечными точками
Создайте две частные зоны DNS, одну для ресурса Azure AI services и одну для хранилища ключей.
az network private-dns zone create --resource-group $groupName --name privatelink.cognitiveservices.azure.com az network private-dns zone create --resource-group $groupName --name privatelink.vaultcore.azure.netДополнительные сведения об этих параметрах см. в разделе конфигурации DNS для частной конечной точки Azure
Свяжите частные зоны DNS с виртуальной сетью.
az network private-dns link vnet create --resource-group $groupName --name cognitiveservices-zonelink --zone-name privatelink.cognitiveservices.azure.com --virtual-network $vnetName --registration-enabled False az network private-dns link vnet create --resource-group $groupName --name vaultcore-zonelink --zone-name privatelink.vaultcore.azure.net --virtual-network $vnetName --registration-enabled False
Создание частных конечных точек
В подсети частной конечной точки вашей виртуальной сети создайте частную конечную точку для вашего Когнитивного Сервиса.
# Get Cognitive Services resource ID csResourceId=$(az cognitiveservices account show --resource-group $groupName --name $csResourceName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securecstext-pe --location $region --connection-name securecstext-pc --private-connection-resource-id $csResourceId --group-id account --vnet-name $vnetName --subnet private-endpoint-subnetСоздайте группу зон DNS для частной конечной точки служб ИИ Azure. Группа зон DNS — это связь между частной зоной DNS и частной конечной точкой. Эта ссылка помогает автоматически обновлять частную зону DNS при обновлении частной конечной точки.
az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securecstext-pe --name securecstext-zg --private-dns-zone privatelink.cognitiveservices.azure.com --zone-name privatelink.cognitiveservices.azure.comБлокировать общедоступный трафик к ресурсу Azure AI services.
az rest --uri $csResourceId?api-version=2024-10-01 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat following command until output is "Succeeded" az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningStateЗамечание
Убедитесь, что состояние подготовки изменения равно
"Succeeded". Затем вы можете наблюдать за изменением поведения в примере приложения. Вы по-прежнему можете загрузить приложение, но если вы попытаетесь нажать кнопку "Обнаружить ", вы получите ошибкуHTTP 500. Приложение потеряло подключение к ресурсу Azure AI services через общую сеть.Повторите описанные выше действия для Key Vault.
# Create private endpoint for key vault vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securekeyvault-pe --location $region --connection-name securekeyvault-pc --private-connection-resource-id $vaultResourceId --group-id vault --vnet-name $vnetName --subnet private-endpoint-subnet # Create DNS zone group for the endpoint az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securekeyvault-pe --name securekeyvault-zg --private-dns-zone privatelink.vaultcore.azure.net --zone-name privatelink.vaultcore.azure.net # Block public traffic to key vault az keyvault update --name $vaultName --default-action DenyПринудительно выполнить повторное извлечение ссылок на хранилище ключей в вашем приложении путем сброса настроек приложения (дополнительные сведения см. в разделе Обновление).
az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"Замечание
Опять же, вы можете наблюдать за изменением поведения в примере приложения. Вы больше не можете загрузить приложение, так как он больше не может получить доступ к ссылкам на хранилище ключей. Приложение потеряло подключение к хранилищу ключей через общую сеть.
Две частные конечные точки доступны только клиентам в созданной виртуальной сети. Вы даже не можете получить доступ к секретам в хранилище ключей через Секреты на портале Azure, так как портал обращается к ним через общий интернет (см. раздел Управление заблокированными ресурсами).
Настройка интеграции виртуальной сети в приложении
Масштабируйте приложение до поддерживаемой ценовой категории (см. Интеграция вашего приложения с виртуальной сетью Azure).
az appservice plan update --name $planName --resource-group $groupName --sku S1Не связано с нашим сценарием, но также важно применять ПРОТОКОЛ HTTPS для входящих запросов.
az webapp update --resource-group $groupName --name $appName --https-onlyВключение интеграции с виртуальной сетью в приложении.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetИнтеграция с виртуальной сетью позволяет исходящему трафику поступать непосредственно в виртуальную сеть. По умолчанию в виртуальную сеть направляется только локальный IP-трафик, определенный в RFC-1918 — это то, что необходимо для частных конечных точек. Сведения о маршрутизации всего трафика в виртуальную сеть см. в разделе Управление маршрутизацией при интеграции с виртуальной сетью. Маршрутизация всего трафика также может использоваться, если вы хотите маршрутизировать интернет-трафик через виртуальную сеть, например через Azure Virtual Network NAT или Azure Firewall.
В браузере снова перейдите на
<app-name>.azurewebsites.netи дождитесь, пока интеграция вступит в силу. Если вы получаете ошибку HTTP 500, подождите несколько минут и повторите попытку. Если вы можете загрузить страницу и получить результаты обнаружения, значит вы подключаетесь к конечной точке служб ИИ Azure со ссылками на хранилище ключей.Замечание
Если по истечении длительного времени вы продолжаете сталкиваться с ошибками HTTP 500, может помочь повторное принудительное получение ссылок на хранилище ключей, как показано ниже.
az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
Управление заблокированными ресурсами
В зависимости от сценариев вы не сможете управлять защищенными частными конечными точками ресурсами через портал Azure, Azure CLI или Azure PowerShell (например, Key Vault). Все эти средства выполняют вызовы REST API для доступа к ресурсам через общедоступный Интернет и блокируются конфигурацией. Ниже приведены несколько вариантов доступа к заблокированным ресурсам:
- Для Key Vault добавьте общедоступный IP-адрес локального компьютера для просмотра или обновления защищенных секретов частной конечной точки.
- Если локальная сеть расширена в виртуальную сеть Azure через шлюз VPN или ExpressRoute, вы можете управлять защищенными частными конечными точками непосредственно из локальной сети.
- Управление защищенными ресурсами частной конечной точки с сервера перехода в виртуальной сети.
- Deploy Cloud Shell в виртуальную сеть.
Очистите ресурсы
На предыдущих этапах вы создали ресурсы Azure в группе ресурсов. Если вы не ожидаете, что эти ресурсы потребуются в будущем, удалите группу ресурсов, выполнив следующую команду в Cloud Shell:
az group delete --name $groupName
Ее выполнение может занять до минуты.