Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описано, как настроить приложение службы приложений с безопасным, изолированным от сети взаимодействием со службами серверной части. Пример сценария используется в учебнике: Подключение Cognitive Service к службе приложений с помощью Key Vault для обеспечения безопасности. По завершении у вас есть приложение службы приложений, которое обращается как к Key Vault, так и к средствам Foundry через виртуальную сеть Azure. Для другого трафика доступ к этим серверным ресурсам запрещен. Весь трафик будет изолирован в виртуальной сети через интеграцию виртуальной сети и частные конечные точки.
В мультитенантной службе исходящий сетевой трафик из приложения службы приложений в другие службы Azure использует ту же среду с другими приложениями или даже другими подписками. Хотя сам трафик может быть зашифрован, некоторые сценарии могут потребовать дополнительного уровня безопасности путем изоляции внутреннего взаимодействия от другого сетевого трафика. Как правило, эти сценарии доступны крупным предприятиям с высоким уровнем опыта, но служба приложений делает их доступными благодаря интеграции с виртуальной сетью.
При использовании этой архитектуры:
- Общедоступный трафик к внутренним службам блокируется.
- Исходящий трафик из службы приложений направляется в виртуальную сеть и может обращаться к внутренним службам.
- Служба приложений может выполнять разрешение DNS для внутренних служб через частные зоны DNS.
Что вы узнаете:
- Создание виртуальной сети и подсетей для интеграции виртуальной сети службы приложений
- Создание частных зон DNS
- Создание частных конечных точек
- Настройка интеграции виртуальной сети в Службе приложений
Предпосылки
Завершите Руководство: безопасное подключение к Cognitive Service от службы приложений с помощью Key Vault и создание приложения для определения языка.
Не забудьте задать следующие переменные среды из учебника: безопасное подключение Cognitive Service из службы приложений с помощью Key Vault:
groupName=myKVResourceGroup region=canadacentral csResourceName=<cs-resource-name> appName=<app-name> vaultName=<vault-name> planName=<plan-name> csResourceKVUri=<cs-resource-kv-uri> csKeyKVUri=<cs-key-kv-uri>
Создание виртуальной сети и подсетей
Создайте виртуальную сеть. Замените <имя> виртуальной сети уникальным именем.
# Save the virtual network name as a 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Для App Service рекомендуется, чтобы подсеть интеграции виртуальной сети имела как минимум блок CIDR
/26. (См. требования к подсети интеграции виртуальной сети.)/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 и Foundry Tools будут находиться за частными конечными точками, необходимо определить для них частные зоны DNS . Эти зоны используются для размещения записей DNS для частных конечных точек и позволяют клиентам находить внутренние службы по имени.
Создайте две частные зоны DNS, одну для ресурса Foundry Tools и одну для хранилища ключей.
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
Создание частных конечных точек
В подсети частной конечной точки виртуальной сети создайте частную конечную точку для ресурса Foundry Tools.
# Get Foundry Tools 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 для частной конечной точки Foundry Tools. Группа зон 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Блокировать общедоступный трафик к ресурсу Foundry Tools.
az rest --uri $csResourceId?api-version=2024-10-01 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat the following command until the output is "Succeeded" az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningStateЗамечание
Убедитесь, что состояние подготовки изменения равно
"Succeeded". Затем можно наблюдать изменение поведения в примере приложения. Вы по-прежнему можете загрузить приложение, но если вы попытаетесь выбрать кнопку "Обнаружение ", вы получите ошибкуHTTP 500. Приложение потеряло подключение к ресурсу Foundry Tools через общую сеть.Повторите предыдущие шаги для хранилища ключей.
# Create a private endpoint for the 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 a 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 the 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 NAT или брандмауэр Azure.
В браузере перейдите к
<app-name>.azurewebsites.netи дождитесь пока интеграция вступит в силу. Если вы получаете ошибку HTTP 500, подождите несколько минут и повторите попытку. Если вы можете загрузить страницу и получить результаты обнаружения, это значит, что вы подключаетесь к конечной точке Foundry Tools, используя ссылки на хранилище ключей.Замечание
Если вы продолжаете получать ошибки 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-шлюз или Azure ExpressRoute, вы можете управлять защищенными ресурсами частной конечной точки непосредственно из локальной сети.
- Управление ресурсами, защищенными частной конечной точкой, с сервера перехода в виртуальной сети.
- Deploy Cloud Shell в виртуальную сеть.
Очистите ресурсы
На предыдущих этапах вы создали ресурсы Azure в группе ресурсов. Если вы не ожидаете, что эти ресурсы потребуются в будущем, удалите группу ресурсов, выполнив следующую команду в Cloud Shell:
az group delete --name $groupName
Эта команда может занять минуту на выполнение.