Öğ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.

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
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/16App 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/serverfarmsApp 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)./24yeterlidir.--delegations Microsoft.Web/serverfarmsalt ağın App Service VNET tümleştirmesi için temsilciolarak bulunduğunu belirtir.Ö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.
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.netBu ayarlar hakkında daha fazla bilgi için bkz. Azure özel uç nokta DNS yapılandırması
Ö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
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-subnetBiliş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.comBiliş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.provisioningStateNot
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 birHTTP 500hata alırsınız. Uygulamanın, paylaşılan ağ üzerinden bilişsel hizmetler kaynağına bağlantısı kesildi.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 DenyUygulama 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
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 S1Senaryomuzla ilgisi yoktur, ancak önemli, gelen istekler için de HTTPS 'yi zorlar.
az webapp update --resource-group $groupName --name $appName --https-onlyUygulamanızda VNet tümleştirmesini etkinleştirin.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetVNet 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.
Tarayıcıda,
<app-name>.azurewebsites.nettekrar 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.