Öğretici: sanal ağ tümleştirmesiyle Azure App Service arka uç iletişimini yalıtma

Bu makalede, arka uç hizmetleriyle güvenli, ağ yalıtımlı iletişim ile bir App Service uygulaması yapılandıracaksınız. Kullanılan örnek senaryo öğreticide: Key Vault kullanarak App Service 'Ten güvenlibilişsel hizmet bağlantısı. İşiniz bittiğinde, bir Azure sanal ağı (VNet) aracılığıyla hem Key Vault hem de bilişsel hizmetlere erişen App Service bir uygulamanız vardır ve bu arka uç kaynaklarına erişme izni yoktur. VNET tümleştirmesi ve Özel uç noktalarkullanılarak tüm trafik sanal ağınız dahilinde yalıtılacaktır.

Çok kiracılı bir hizmet olarak, App Service uygulamanızdan diğer Azure hizmetlerine giden ağ trafiği aynı ortamı diğer uygulamalarla ve hatta diğer aboneliklerle paylaşır. Trafiğin kendisi şifreli olsa da, belirli senaryolar, arka uç iletişimini diğer ağ trafiğinden ayırarak ek bir güvenlik düzeyi gerektirebilir. Bu senaryolar genellikle yüksek düzeyde uzmanlığa sahip büyük kuruluşlar tarafından erişilebilirdir, ancak App Service VNet tümleştirmeyle iletişime geçer.

Senaryo mimarisi

Bu mimariyle:

  • Arka uç hizmetlerine yönelik ortak trafik engellenir.
  • App Service giden trafik VNet 'e yönlendirilir ve arka uç hizmetlerine erişebilir.
  • App Service, özel DNS bölgeleri aracılığıyla arka uç hizmetlerinde DNS çözümlemesi gerçekleştirebilir.

Öğrenirsiniz:

  • App Service VNet 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 'da VNet tümleştirmesini yapılandırma

Önkoşullar

Öğreticide, Key Vault kullanarak App Service 'Dan güvenli bilişsel hizmet bağlantısı ve dil algılayıcısı uygulamasını Oluşturma öğreticisini takip ettiğiniz varsayılmaktadır.

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

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

VNet ve alt ağlar oluşturma

  1. VNet oluşturun. <virtual-network-name> 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 VNet 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
    

    App Service için, VNet tümleştirme alt ağının en az bir CıDR bloğunun olması önerilir /26 (bkz. VNET tümleştirme alt ağ gereksinimleri). /24 yeterlidir. --delegations Microsoft.Web/serverfarms alt ağın App Service VNET tümleştirmesi için temsilciolarak bulunduğunu 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
    

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

Özel DNS bölgeleri oluşturma

Key Vault ve bilişsel hizmetler kaynaklarınız Özel uç noktalarınarkasına oturduğundan, bunlar IÇIN özel DNS bölgeleri tanımlamanız gerekir. Bu bölgeler, Özel uç noktalar için DNS kayıtlarını barındırmak ve istemcilerin arka uç hizmetlerini ada göre bulmasına izin vermek için kullanılır.

  1. Biri bilişsel hizmetler kaynağınız ve anahtar kasanızın 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 VNet 'e 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, anahtar kasanız 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. Bilişsel hizmetler özel uç noktası için bir DNS bölgesi grubu oluşturun. DNS bölgesi grubu, özel DNS bölgesi ve özel uç nokta arasındaki bağlantıdır. Bu bağlantı, Özel uç noktada 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. Bilişsel hizmetler kaynağı için 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

    Yaptığınız değişikliğin sağlama durumunun olduğundan emin olun "Succeeded" . Ardından örnek uygulamadaki davranış değişikliğini gözlemleyebilirsiniz. Uygulamayı yüklemeye devam edebilirsiniz, ancak Algıla düğmesine tıkladıysanız bir HTTP 500 hata alırsınız. Uygulamanın, paylaşılan ağ üzerinden bilişsel hizmetler kaynağına bağlantısı kesildi.

  4. Anahtar Kasası için yukarıdaki adımları tekrarlayın.

    # 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ı hemen tekrar al zorlayın (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ği için uygulamayı yüksiz yükleyebilirsiniz. Uygulamanın, paylaşılan ağ aracılığıyla anahtar kasasıyla olan bağlantısı kesildi.

İki özel uç noktaya yalnızca oluşturduğunuz VNet içindeki istemciler erişilebilir. Portal herkese genel İnternet üzerinden eriştiği için Azure portal gizli dizileri aracılığıyla anahtar kasasındaki gizli dizileri de erişemezsiniz (bkz. kilitli kaynakları yönetme).

Uygulamanızda VNet tümleştirmesini yapılandırma

  1. Uygulamayı Standart katmana ölçeklendirin. VNet tümleştirmesi Standart katman veya üzerini gerektirir (bkz. uygulamanızı Azure sanal ağıyla tümleştirme).

    az appservice plan update --name $appName --resource-group $groupName --sku S1
    
  2. Senaryomuzla ilgisi yoktur, ancak önemli, gelen istekler için de HTTPS 'yi zorlar.

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

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

    VNet tümleştirmesi giden trafiğin doğrudan VNet 'e akmasını sağlar. Varsayılan olarak, yalnızca RFC-1918 ' de tanımlanan yerel IP trafiği, Özel uç noktalar için Ihtiyacınız olan VNET 'e yönlendirilir. Tüm trafiğinizi VNet 'e yönlendirmek için bkz. sanal ağ tümleştirme yönlendirmeyi yönetme. İnternet trafiğini, VNet 'iniz aracılığıyla Azure VNET NAT veya Azure Güvenlik Duvarıaracılığıyla yönlendirmek istiyorsanız, tüm trafiği yönlendirme de kullanılabilir.

  4. Tarayıcıda, <app-name>.azurewebsites.net tekrar gidin ve tümleştirmenin etkili olması için bekleyin. Bir HTTP 500 hatası alırsanız birkaç dakika bekleyip yeniden deneyin. Sayfayı yükleyebilir ve algılama sonuçlarını elde edebilirsiniz, Anahtar Kasası başvurularıyla bilişsel hizmetler uç noktasına bağlanıyorsunuz.

    Not

    Uzun bir süre sonra HTTP 500 hataları almaya devam ederseniz, bu şekilde Anahtar Kasası başvurularını yeniden tekrar al zorlamaya yardımcı olabilir:

    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 clı veya Azure PowerShell (örneğin Key Vault) aracılığıyla özel uç nokta korumalı kaynaklarını yönetemeyebilirsiniz. Bu araçların hepsi, kaynaklara genel İnternet üzerinden 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 aşağıda verilmiştir:

  • Key Vault için, Özel uç nokta korumalı gizli dizileri görüntülemek veya güncelleştirmek üzere yerel makinenizin genel IP 'sini ekleyin.
  • Şirket içi ağınız bir VPN ağ geçidi veya ExpressRouteüzerinden Azure VNET 'e genişletilmişse, Özel uç nokta korumalı kaynaklarını doğrudan şirket içi ağınızdan yönetebilirsiniz.
  • Özel uç nokta korumalı kaynaklarını VNet 'teki bir sıçrama sunucusundan yönetin.
  • Cloud Shell VNET 'e 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