Kurz: Izolace back-endové komunikace ve službě Azure App Service pomocí integrace virtuální sítě

V tomto článku nakonfigurujete App Service aplikaci se zabezpečenou sítí, která je izolována pro komunikaci s back-endovými službami. Ukázkový scénář se používá v Tutorial: Zabezpečené připojení služeb Cognitive Service ze služby App Service pomocí Key Vault. Po dokončení máte aplikaci app Service, která přistupuje ke službě Key Vault i Foundry Tools prostřednictvím virtuální sítě Azure. Žádný jiný provoz nemá povolený přístup k těmto backendovým zdrojům. Veškerý provoz bude v rámci vaší virtuální sítě izolovaný prostřednictvím integrace virtuální sítě a privátních koncových bodů.

Ve službě s více tenanty sdílí odchozí síťový provoz z vaší aplikace App Service do jiných služeb Azure stejné prostředí s jinými aplikacemi nebo dokonce s jinými předplatnými. I když samotný provoz může být šifrovaný, některé scénáře můžou vyžadovat vyšší úroveň zabezpečení prostřednictvím izolace back-endové komunikace od jiného síťového provozu. Tyto scénáře jsou obvykle přístupné velkým podnikům s vysokou úrovní odborných znalostí, ale App Service ho při integraci virtuální sítě zařadí do dosahu.

Diagram znázorňující architekturu scénáře

V této architektuře:

  • Veřejný provoz do back-endových služeb je zablokovaný.
  • Odchozí provoz ze služby App Service se směruje do virtuální sítě a může se spojit s back-endovými službami.
  • Služba App Service může provádět překlad DNS do back-endových služeb prostřednictvím privátních zón DNS.

Co se naučíte:

  • Vytvoření virtuální sítě a podsítí pro integraci virtuální sítě služby App Service
  • Vytvoření privátních zón DNS
  • Vytvoření privátních koncových bodů
  • Konfigurace integrace virtuální sítě ve službě App Service

Předpoklady

Vytvoření virtuální sítě a podsítí

  1. Vytvořte virtuální síť. Nahraďte <název> virtuální sítě jedinečným názvem.

    # 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
    
  2. Vytvořte podsíť pro integraci virtuální sítě služby App Service.

    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
    

    V případě služby App Service doporučujeme, aby podsíť integrace virtuální sítě měla minimálně blok /26 CIDR. (Viz požadavky na podsíť integrace virtuální sítě.) /24 je více než dostačující. --delegations Microsoft.Web/serverfarms určuje, že podsíť je delegovaná pro integraci virtuální sítě služby App Service.

  3. 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 --private-endpoint-network-policies Disabled
    

    U podsítí privátních koncových bodů je potřeba zakázat zásady sítě privátních koncových bodů.

Vytvoření privátních zón DNS

Vzhledem k tomu, že vaše prostředky Key Vault a Foundry Tools budou umístěny za soukromými koncovými body, musíte pro ně definovat soukromé zóny DNS. Tyto zóny slouží k hostování záznamů DNS pro privátní koncové body a umožňují klientům najít back-endové služby podle názvu.

  1. Vytvořte dvě privátní zóny DNS, jednu pro prostředek Foundry Tools 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.net
    

    Další informace o těchto nastaveních najdete v tématu Konfigurace DNS privátního koncového bodu Azure.

  2. Propojte privátní zóny DNS s virtuální sítí.

    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
    

Vytvoření privátních koncových bodů

  1. V podsíti privátního koncového bodu vaší virtuální sítě vytvořte privátní koncový bod pro prostředek 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
    
  2. Vytvořte skupinu zón DNS pro privátní koncový bod Foundry Tools. Skupina zón DNS je propojení mezi privátní zónou DNS a privátním koncovým bodem. Tento odkaz vám pomůže automaticky aktualizovat privátní 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.com
    
  3. Zablokujte veřejný provoz do prostředku 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
    

    Poznámka:

    Ujistěte se, že stav zřizování vaší změny je "Succeeded". Pak můžete sledovat změnu chování v ukázkové aplikaci. Aplikaci můžete stále načíst, ale pokud se pokusíte vybrat tlačítko Zjistit, zobrazí se HTTP 500 chyba. Aplikace ztratila připojení k prostředku Foundry Tools prostřednictvím sdílených sítí.

  4. Opakujte předchozí kroky pro trezor klíčů.

    # 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
    
  5. Vynuťte okamžité opětovné načtení odkazů na trezor klíčů ve vaší aplikaci resetováním nastavení aplikace. (Další informace naleznete v tématu Otočení.)

    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:

    Opět můžete sledovat změnu chování v ukázkové aplikaci. Aplikaci už nemůžete načíst, protože už nemá přístup k odkazům na úložiště klíčů. Aplikace ztratila připojení k trezoru klíčů prostřednictvím sdílených sítí.

Dva privátní koncové body jsou přístupné jenom klientům ve virtuální síti, kterou jste vytvořili. Na stránce Tajné kódy na webu Azure Portal nemáte přístup ani k tajným kódům v trezoru klíčů, protože k nim portál přistupuje přes veřejný internet. (Viz Správa uzamčených prostředků.)

Konfigurace integrace virtuální sítě v aplikaci

  1. Zvyšte kapacitu aplikace na podporovaný cenový plán. (Viz Integrace aplikace s virtuální sítí Azure.)

    az appservice plan update --name $planName --resource-group $groupName --sku S1
    
  2. Vynucujte HTTPS pro příchozí požadavky. (Tento krok nesouvisí s aktuálním scénářem, ale je důležitý.)

    az webapp update --resource-group $groupName --name $appName --https-only
    
  3. Povolte integraci virtuální sítě ve vaší aplikaci.

    az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnet
    

    Integrace virtuální sítě umožňuje, aby odchozí provoz proudil přímo do virtuální sítě. Ve výchozím nastavení se do virtuální sítě směruje pouze místní provoz IP definovaný v dokumentu RFC-1918 , což je to, co potřebujete pro privátní koncové body. Informace o směrování veškerého provozu do virtuální sítě najdete v tématu Správa směrování integrace virtuální sítě. Veškerý provoz můžete také směrovat, pokud chcete směrovat internetový provoz přes vaši virtuální síť, například přes Azure NAT Gateway nebo Azure Firewall.

  4. V prohlížeči přejděte na <app-name>.azurewebsites.net a počkejte, až se integrace provede. Pokud se zobrazí chyba HTTP 500, počkejte několik minut a zkuste to znovu. Pokud můžete stránku načíst a získat výsledky detekce, připojujete se ke koncovému bodu Foundry Tools pomocí odkazů na trezor klíčů.

    Poznámka:

    Pokud se chyby HTTP 500 vrací po dlouhou dobu, může pomoci vynutit opětovné načtení Key Vault reference:

    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 uzamčených prostředků

V závislosti na vašich scénářích možná nebudete moct spravovat prostředky chráněné privátním koncovým bodem prostřednictvím webu Azure Portal, Azure CLI nebo Azure PowerShellu (například Key Vault). Všechny tyto nástroje provádějí volání rozhraní REST API 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ě služby Key Vault přidejte veřejnou IP adresu místního počítače pro zobrazení nebo aktualizaci tajných kódů, které jsou chráněné privátními koncovými body.
  • Pokud je vaše místní síť rozšířená do virtuální sítě Azure prostřednictvím brány VPN nebo Azure ExpressRoute, můžete spravovat privátní koncové body chráněné prostředky přímo z místní sítě.
  • Spravujte prostředky, které jsou chráněny privátním koncovým bodem, pomocí jump serveru ve virtuální síti.
  • Deploy Cloud Shell do virtuální sítě.

Vyčistěte zdroje

V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud v budoucnu tyto prostředky nepotřebujete, odstraňte skupinu prostředků spuštěním následujícího příkazu v Cloud Shell:

az group delete --name $groupName

Tento příkaz může chvíli trvat, než se spustí.

Další kroky