Kurz: izolování komunikace back-endu v Azure App Service s integrací Virtual Network
V tomto článku nakonfigurujete App Service aplikaci s využitím zabezpečené a síťové komunikace se službou back-end. Ukázkový scénář se používá v tomto kurzu: zabezpečené navázání připojení ke službě rozpoznávání z App Service pomocí Key Vault. Až budete hotovi, budete mít App Service aplikaci, která má přístup k Key Vault i Cognitive Services prostřednictvím služby Azure Virtual Network (VNET) a žádný jiný provoz nepovoluje přístup k těmto prostředkům back-endu. Veškerý provoz bude v rámci virtuální sítě izolovaný pomocí Integrace virtuální sítě a privátních koncových bodů.
V rámci víceklientské služby se odchozí síťový provoz z vaší App Service aplikace do jiných služeb Azure sdílí stejné prostředí s jinými aplikacemi nebo jinými předplatnými. I když může být samotný provoz zašifrovaný, můžou určité scénáře vyžadovat další úroveň zabezpečení tím, že izoluje back-end komunikaci od ostatních síťových přenosů. Tyto scénáře jsou obvykle přístupné pro velké podniky s vysokou úrovní odbornosti, ale App Service je do dosahu integrace virtuální sítě.

S touto architekturou:
- Veřejný provoz do back-endové služby je blokovaný.
- Odchozí provoz z App Service je směrován do virtuální sítě a může se připojit k back-endové službě.
- App Service je možné provést překlad DNS do back-endové služby prostřednictvím privátních zón DNS.
Co se naučíte:
- Vytvoření virtuální sítě a podsítí pro integraci App Service VNet
- Vytváření privátních zón DNS
- Vytváření privátních koncových bodů
- Konfigurace integrace virtuální sítě v App Service
Požadavky
V kurzu se předpokládá, že jste postupovali podle tohoto kurzu: zabezpečené připojení ke službě rozpoznávání z App Service pomocí Key Vault a vytvoření aplikace pro jazykové rozpoznávání.
Kurz pokračuje v používání následujících proměnných prostředí z předchozího kurzu. Ujistěte se, že je správně nastavili.
groupName=myKVResourceGroup
region=westeurope
csResourceName=<cs-resource-name>
appName=<app-name>
vaultName=<vault-name>
Vytvoření virtuální sítě a podsítí
Vytvořte virtuální síť. Nahraďte <virtual-network-name> jedinečným názvem.
# 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/16Vytvořte podsíť pro integraci App Service VNet.
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/serverfarmsV případě App Service se pro podsíť integrace virtuální sítě doporučuje mít blok CIDR
/26minimálně (viz požadavky na podsíť integrace virtuální sítě)./24je více než dostačující.--delegations Microsoft.Web/serverfarmsUrčuje, že podsíť je delegovaná pro App Service integraci virtuálnísítě.Vytvořte další podsíť pro privátní koncové body.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --disable-private-endpoint-network-policiesPro podsítě privátních koncových bodů je nutné zakázat zásady sítě privátního koncového bodu.
Vytváření privátních zón DNS
Vzhledem k tomu, že prostředky Key Vault a Cognitive Services budou za soukromými koncovými body, je nutné pro ně definovat privátní zóny DNS . Tyto zóny slouží k hostování záznamů DNS privátních koncových bodů a umožňují klientům najít back-endové služby podle názvu.
Vytvořte dvě privátní zóny DNS, jednu pro prostředek Cognitive Services a jednu pro váš Trezor klíčů.
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.netDalší informace o těchto nastaveních najdete v tématu Konfigurace DNS privátního koncového bodu Azure .
Připojte privátní zóny DNS k virtuální síti.
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
Vytváření privátních koncových bodů
V podsíti privátního koncového bodu vaší virtuální sítě vytvořte privátní koncový bod pro svůj Trezor klíčů.
# 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-subnetVytvořte skupinu zón DNS pro Cognitive Services privátní koncový bod. Skupina zón DNS je propojení mezi privátní zónou DNS a soukromým koncovým bodem. Tento odkaz vám pomůže automaticky aktualizovat soukromou zónu DNS, když dojde k aktualizaci privátního koncového bodu.
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.comZablokuje veřejný provoz do prostředku Cognitive Services.
az rest --uri $csResourceId?api-version=2021-04-30 --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.provisioningStatePoznámka
Ujistěte se, že stav zřizování změny je
"Succeeded". Pak můžete sledovat změnu chování v ukázkové aplikaci. Aplikaci můžete přesto načíst, ale pokud se pokusíte kliknout na tlačítko rozpoznat , zobrazí seHTTP 500Chyba. Aplikace ztratila připojení k Cognitive Services prostředkům přes sdílenou síť.Opakujte výše uvedené kroky pro Trezor klíčů.
# 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 DenyVynutit okamžité opětovné načtení odkazů na Trezor klíčů v aplikaci resetováním nastavení aplikace (Další informace najdete v tématu rotace).
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)"Poznámka
Znovu můžete sledovat změnu chování v ukázkové aplikaci. Aplikaci už nemůžete načíst, protože už nemůže získat přístup k odkazům na Trezor klíčů. Aplikace ztratila připojení k trezoru klíčů přes sdílené sítě.
Dva privátní koncové body jsou dostupné jenom klientům v rámci virtuální sítě, kterou jste vytvořili. K tajným klíčům se nemůžete dostat ani na stránce trezoru klíčů prostřednictvím tajných kódů v Azure Portal, protože portál je přistupuje přes veřejný Internet (viz Správa zamčených prostředků).
Konfigurace integrace virtuální sítě ve vaší aplikaci
Škálujte aplikaci až na úroveň Standard . Integrace virtuální sítě vyžaduje úroveň Standard nebo vyšší (viz integrace vaší aplikace s Azure Virtual Network).
az appservice plan update --name $appName --resource-group $groupName --sku S1Nesouvisí s naším scénářem, ale také důležité, vynutil protokol HTTPS pro příchozí požadavky.
az webapp update --resource-group $groupName --name $appName --https-onlyPovolte integraci virtuální sítě ve vaší aplikaci.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetIntegrace virtuální sítě umožňuje odchozí přenosy přímo do virtuální sítě. Ve výchozím nastavení se do virtuální sítě směruje jenom místní provoz IP, který je definovaný v dokumentu RFC-1918 , což je to, co pro soukromé koncové body potřebujete. Informace o směrování veškerého provozu do virtuální sítě najdete v tématu Správa směrování Integration Virtual Network. Směrování všech přenosů se dá použít i v případě, že chcete směrovat internetový provoz přes virtuální síť, například přes NAT nebo Azure firewallvirtuální sítě Azure.
V prohlížeči přejděte
<app-name>.azurewebsites.netznovu na další a počkejte, než se integrace projeví. Pokud se zobrazí chyba HTTP 500, počkejte pár minut a zkuste to znovu. Pokud můžete načíst stránku a získat výsledky detekce, připojíte se k Cognitive Services koncovému bodu s odkazy na úložiště klíčů.Poznámka
Pokud budete mít po dlouhou dobu k dispozici chyby HTTP 500, může to způsobit, že se znovu znovu načte odkazy na Trezor klíčů , například:
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)"
Správa zamčených prostředků
v závislosti na vašich scénářích možná nebudete moct spravovat prostředky chráněné soukromým koncovým bodem prostřednictvím Azure Portal, rozhraní příkazového řádku Azure nebo Azure PowerShell (například Key Vault). Všechny tyto nástroje umožňují REST API volání pro přístup k prostředkům prostřednictvím veřejného Internetu a jsou blokovány vaší konfigurací. Tady je několik možností pro přístup k uzamčeným prostředkům:
- V případě Key Vault přidejte veřejnou IP adresu místního počítače k zobrazení nebo aktualizaci tajných klíčů chráněných soukromým koncovým bodem.
- Pokud je vaše místní síť rozšířena do virtuální sítě Azure prostřednictvím brány VPN nebo ExpressRoute, můžete spravovat prostředky chráněné pomocí privátního koncového bodu přímo z vaší místní sítě.
- Spravujte prostředky chráněné soukromým koncovým bodem ze serveru skoku ve virtuální síti.
- Nasaďte Cloud Shell do virtuálnísítě.
Vyčištění prostředků
V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:
az group delete --name $groupName
Spuštění tohoto příkazu může trvat přibližně minut.