Öğretici: Sanal Ağ tümleştirmesi ile Azure App Service'te arka uç iletişimini yalıtma

Bu makalede, arka uç hizmetleriyle güvenli, ağdan yalıtılmış iletişimle bir App Service uygulaması yapılandıracaksınız. Kullanılan örnek senaryo Öğretici: Key Vault kullanarak App Service'ten Bilişsel Hizmet bağlantısının güvenliğini sağlama bölümündedir. İşiniz bittiğinde, Azure sanal ağı üzerinden hem Key Vault hem de Azure AI hizmetlerine erişen bir App Service uygulamanız olur ve bu arka uç kaynaklarına başka hiçbir trafiğin erişmesine izin verilmez. Tüm trafik, sanal ağ tümleştirmesi ve özel uç noktalar kullanılarak sanal ağınızda yalıtılır.

Çok kiracılı bir hizmet olarak App Service uygulamanızdan diğer Azure hizmetlerine giden ağ trafiği, diğer uygulamalarla ve hatta diğer aboneliklerle aynı ortamı paylaşır. Trafiğin kendisi şifrelenebilir ancak bazı senaryolar arka uç iletişimini diğer ağ trafiğinden yalıtarak ek bir güvenlik düzeyi gerektirebilir. Bu senaryolara genellikle yüksek düzeyde uzmanlığa sahip büyük kuruluşlar erişebilir ancak App Service, sanal ağ tümleştirmesi ile bu senaryoları ulaşılabilir hale getirir.

senaryo mimarisi

Bu mimariyle:

  • Arka uç hizmetlerine yönelik genel trafik engellenir.
  • App Service'ten giden trafik sanal ağa yönlendirilir ve arka uç hizmetlerine ulaşabilir.
  • App Service, özel DNS bölgeleri aracılığıyla arka uç hizmetlerinde DNS çözümlemesi gerçekleştirebilir.

Öğrenecekleriniz:

  • App Service sanal ağ tümleştirmesi için sanal ağ ve alt ağlar oluşturma
  • Özel DNS bölgeleri oluşturma
  • Özel uç nokta oluşturma
  • App Service'te sanal ağ tümleştirmesini yapılandırma

Önkoşullar

Öğreticide , Öğretici: Key Vault kullanarak App Service'ten Bilişsel Hizmet bağlantısının güvenliğini sağlama ve dil algılayıcısı uygulamasını oluşturma adımlarını izlediğiniz varsayılır.

Öğretici, önceki öğreticide yer alan aşağıdaki ortam değişkenlerini kullanmaya devam eder. Bunları düzgün ayarladığınızdan emin olun.

    groupName=myKVResourceGroup
    region=westeurope
    csResourceName=<cs-resource-name>
    appName=<app-name>
    vaultName=<vault-name>

Sanal ağ ve alt ağlar oluşturma

  1. Sanal ağ oluşturun. sanal ağ-adını> benzersiz bir adla değiştirin<.

    # 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. App Service sanal ağ tümleştirmesi için bir alt ağ oluşturun.

    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
    

    App Service için sanal ağ tümleştirme alt ağının en az CIDR bloğuna /26 sahip olması önerilir (bkz. Sanal ağ tümleştirme alt ağ gereksinimleri). /24 yeterliden daha fazlasıdır. --delegations Microsoft.Web/serverfarms Alt ağın App Service sanal ağ tümleştirmesi için temsilci olarak atandığını belirtir.

  3. Özel uç noktalar için başka bir alt ağ oluşturun.

    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
    

    Özel uç nokta alt ağları için özel uç nokta ağ ilkelerini devre dışı bırakmanız gerekir.

Özel DNS bölgeleri oluşturma

Key Vault ve Azure AI hizmetleri kaynaklarınız özel uç noktaların arkasında duracağından, bunlar için özel DNS bölgeleri tanımlamanız gerekir. Bu bölgeler, özel uç noktaların DNS kayıtlarını barındırmak ve istemcilerin arka uç hizmetlerini ada göre bulmalarını sağlamak için kullanılır.

  1. Biri Azure AI hizmetleri kaynağınız, diğeri de anahtar kasanız için olmak üzere iki özel DNS bölgesi oluşturun.

    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
    

    Bu ayarlar hakkında daha fazla bilgi için bkz. Azure Özel Uç Nokta DNS yapılandırması

  2. Özel DNS bölgelerini sanal ağa bağlayın.

    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
    

Özel uç nokta oluşturma

  1. Sanal ağınızın özel uç nokta alt ağında Bilişsel Hizmetiniz için özel bir uç nokta oluşturun.

    # 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. Azure AI hizmetleri özel uç noktası için bir DNS bölge grubu oluşturun. DNS bölge grubu, özel DNS bölgesi ile özel uç nokta arasındaki bağlantıdır. Bu bağlantı, özel uç nokta için bir güncelleştirme olduğunda özel DNS Bölgesini otomatik olarak güncelleştirmenize yardımcı olur.

    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. Azure AI hizmetleri kaynağına yönelik genel trafiği engelleyin.

    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
    

    Not

    Değişikliğinizin sağlama durumunun olduğundan "Succeeded"emin olun. Ardından örnek uygulamadaki davranış değişikliğini gözlemleyebilirsiniz. Uygulamayı yine de yükleyebilirsiniz, ancak Algıla düğmesine tıklamayı denerseniz bir HTTP 500 hata alırsınız. Uygulama, paylaşılan ağ üzerinden Azure AI hizmetleri kaynağına bağlantısını kaybetti.

  4. Anahtar kasası için yukarıdaki adımları yineleyin.

    # 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. Uygulama ayarlarını sıfırlayarak uygulamanızdaki anahtar kasası başvurularının hemen yeniden başlatılmasını zorunlu tutun (daha fazla bilgi için bkz . Döndürme).

    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)"
    

    Not

    Yine örnek uygulamadaki davranış değişikliğini gözlemleyebilirsiniz. Artık anahtar kasası başvurularına erişemediğinden uygulamayı yüklenemiyor. Uygulama, paylaşılan ağ üzerinden anahtar kasasıyla bağlantısını kaybetti.

İki özel uç noktaya yalnızca oluşturduğunuz sanal ağın içindeki istemciler erişebilir. Azure portalının Gizli Diziler sayfasından anahtar kasasındaki gizli dizilere bile erişemezsiniz, çünkü portal bunlara genel İnternet üzerinden erişir (bkz . Kilitli kaynakları yönetme).

Uygulamanızda sanal ağ tümleştirmesini yapılandırma

  1. Uygulamayı desteklenen bir fiyatlandırma katmanına ölçeklendirin (bkz. Uygulamanızı Azure sanal ağıyla tümleştirme).

    az appservice plan update --name $appName --resource-group $groupName --sku S1
    
  2. Senaryomuzla ilgisiz ama aynı zamanda önemli olan gelen istekler için HTTPS'yi zorunlu kılma.

    az webapp update --resource-group $groupName --name $appName --https-only
    
  3. Uygulamanızda sanal ağ tümleştirmesini etkinleştirin.

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

    Sanal ağ tümleştirmesi, giden trafiğin doğrudan sanal ağa akmasını sağlar. Varsayılan olarak, yalnızca RFC-1918'de tanımlanan yerel IP trafiği sanal ağa yönlendirilir ve bu da özel uç noktalar için ihtiyacınız olan şeydir. Tüm trafiğinizi sanal ağa yönlendirmek için bkz. Sanal ağ tümleştirme yönlendirmesini yönetme. İnternet trafiğini Azure Sanal Ağ NAT veya AzureGüvenlik Duvarı gibi sanal ağınız üzerinden yönlendirmek istiyorsanız tüm trafiği yönlendirmek de kullanılabilir.

  4. Tarayıcıda öğesine yeniden gidin <app-name>.azurewebsites.net ve tümleştirmenin etkili olmasını bekleyin. HTTP 500 hatası alırsanız birkaç dakika bekleyin ve yeniden deneyin. Sayfayı yükleyip algılama sonuçlarını alabildiyseniz anahtar kasası başvuruları ile Azure AI hizmetleri uç noktasına bağlanıyorsunuz demektir.

    Not

    Http 500 hatalarını uzun bir süre sonra almaya devam ederseniz , anahtar kasası başvurularını yeniden kullanmaya zorlamak yardımcı olabilir, örneğin:

    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)"
    

Kilitli kaynakları yönetme

Senaryolarınıza bağlı olarak, azure portalı, Azure CLI veya Azure PowerShell (örneğin, Key Vault) aracılığıyla özel uç nokta korumalı kaynakları yönetemeyebilirsiniz. Bu araçların tümü genel İnternet üzerinden kaynaklara erişmek için REST API çağrıları yapar ve yapılandırmanız tarafından engellenir. Kilitli kaynaklara erişmek için birkaç seçenek şunlardır:

  • Key Vault için, özel uç nokta korumalı gizli dizileri görüntülemek veya güncelleştirmek için yerel makinenizin genel IP'sini ekleyin.
  • Şirket içi ağınız bir VPN ağ geçidi veya ExpressRoute aracılığıyla Azure sanal ağına genişletildiyse, özel uç nokta korumalı kaynakları doğrudan şirket içi ağınızdan yönetebilirsiniz.
  • Sanal ağdaki bir atlama sunucusundan özel uç nokta korumalı kaynakları yönetin.
  • Cloud Shell'i sanal ağa dağıtın.

Kaynakları temizleme

Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:

az group delete --name $groupName

Bu komutun çalıştırılması bir dakika sürebilir.

Sonraki adımlar