Kurz: Izolace back-endové komunikace v Azure App Service s využitím integrace Virtual Network

V tomto článku nakonfigurujete aplikaci App Service se zabezpečenou komunikací izolovanou sítí s back-endovými službami. Ukázkový scénář se používá v kurzu Zabezpečení připojení Cognitive Service z App Service pomocí Key Vault. Až budete hotovi, budete mít aplikaci App Service, která přistupuje k Key Vault i službám Azure AI prostřednictvím virtuální sítě Azure, a žádný jiný provoz nebude mít přístup k těmto back-endovým prostředkům. Veškerý provoz bude v rámci vaší virtuální sítě izolovaný pomocí integrace virtuální sítě a privátních koncových bodů.

Jako služba s více tenanty sdílí odchozí síťový provoz z aplikace App Service do jiných služeb Azure stejné prostředí s jinými aplikacemi nebo dokonce 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í tím, že izolují back-endovou komunikaci od jiných síťových přenosů. Tyto scénáře jsou obvykle přístupné velkým podnikům s vysokou úrovní odborných znalostí, ale App Service je v dosahu integrace virtuální sítě.

architektura scénáře

S touto architekturou:

  • Veřejný provoz do back-endových služeb je blokovaný.
  • Odchozí provoz z App Service se směruje do virtuální sítě a může se dostat do back-endových služeb.
  • App Service dokáž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 App Service integraci virtuální sítě
  • 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 tomto kurzu se předpokládá, že jste postupovali podle kurzu Zabezpečení připojení cognitive service z App Service pomocí Key Vault a vytvořili jste aplikaci detektoru jazyka.

Kurz dál používá následující proměnné prostředí z předchozího kurzu. Ujistěte se, že jste 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í

  1. 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/16
    
  2. Vytvořte podsíť pro integraci App Service virtuální sítě.

    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 --disable-private-endpoint-network-policies false
    

    Pro App Service se doporučuje, aby podsíť integrace virtuální sítě měla blok /26 CIDR minimálně (viz Požadavky na podsíť integrace virtuální sítě). /24 je více než dostačující. --delegations Microsoft.Web/serverfarmsUrčuje, že podsíť je delegovaná pro App Service integraci virtuální sítě.

  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 --disable-private-endpoint-network-policies true
    

    U podsítí privátních koncových bodů musíte zakázat zásady sítě privátních koncových bodů.

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

Vzhledem k tomu, že vaše prostředky Key Vault a služeb Azure AI budou umístěné za privátními koncovými body, musíte pro ně definovat privátní 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 služeb Azure AI a jednu pro 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
    

Vytvář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 službu Cognitive Service.

    # 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
    
  2. Vytvořte skupinu zón DNS pro privátní koncový bod služeb Azure AI. 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. Blokování veřejného provozu do prostředku služeb Azure AI

    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.provisioningState
    

    Pozná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 i nadále načíst, ale pokud se pokusíte kliknout na tlačítko Rozpoznat, zobrazí se chyba HTTP 500 . Aplikace ztratila připojení k prostředku služeb Azure AI prostřednictvím sdílené sítě.

  4. 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 Deny
    
  5. Vynuťte okamžité opětovné načtení odkazů na trezor klíčů ve vaší aplikaci resetováním nastavení aplikace (další informace najdete 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 trezor klíčů. Aplikace ztratila připojení k trezoru klíčů prostřednictvím sdílené 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 v Azure Portal nemůžete získat přístup ani k tajným kódům v trezoru klíčů, protože portál k nim přistupuje přes veřejný internet (viz Správa uzamčených prostředků).

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

  1. Škálujte aplikaci na podporovanou cenovou úroveň (viz Integrace aplikace s virtuální sítí Azure).

    az appservice plan update --name $appName --resource-group $groupName --sku S1
    
  2. Nesouvisející s naším scénářem, ale také důležité, vynucovat https pro příchozí požadavky.

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

    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 tok přímo do virtuální sítě. Ve výchozím nastavení se do virtuální sítě směruje jenom provoz místních IP adres definovaný v rfc-1918 , což je to, co potřebujete pro privátní koncové body. Pokud chcete směrovat veškerý provoz do virtuální sítě, přečtěte si téma Správa směrování integrace virtuální sítě. Směrování veškerého provozu můžete použít také v případě, že chcete směrovat internetový provoz přes virtuální síť, například přes azure Virtual Network NAT nebo Azure Firewall.

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

    Poznámka

    Pokud se chyby HTTP 500 budou dál dostávat i po delší době, může pomoct vynutit opětovné načtení odkazů na trezor klíčů , například takto:

    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 nemusí být možné spravovat prostředky chráněné privátním koncovým bodem prostřednictvím Azure Portal, Azure CLI nebo Azure PowerShell (například Key Vault). Všechny tyto nástroje volají rozhraní REST API pro přístup k prostředkům přes veřejný internet a vaše konfigurace je blokuje. Tady je několik možností pro přístup k uzamčeným prostředkům:

  • Pro Key Vault přidejte veřejnou IP adresu místního počítače a zobrazte nebo aktualizujte tajné kódy chráněné privátním koncovým bodem.
  • Pokud je vaše místní síť rozšířená do virtuální sítě Azure prostřednictvím brány VPN nebo ExpressRoute, můžete spravovat prostředky chráněné privátním koncovým bodem přímo z místní sítě.
  • Správa prostředků chráněných privátním koncovým bodem z jump serveru 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.

Další kroky