在 Azure App Service 中啟用虛擬網路整合
透過從 Azure App Service 應用程式與 Azure 虛擬網路整合,您可以從虛擬網路內的應用程式觸達私人資源。
必要條件
虛擬網路整合功能需要:
- 支援虛擬網路整合的 App Service 定價層。
- 相同區域中具有空白子網路的虛擬網路。
必須委派子網路給 Microsoft.Web/serverFarms。 如果在整合之前未完成委派,則佈建流程將設定此委派。 子網路必須配置 IPv4 /28
區塊 (16 個位址)。 我們建議您至少要有 64 個位址 (IPv4 /26
區塊),以允許最大水平縮放。
如果虛擬網路位於與應用程式不同的訂用帳戶中,則您必須確定已向 Microsoft.Web
資源提供者註冊具有虛擬網路的訂用帳戶。 您可以遵循本文件來明確註冊提供者,但會在訂用帳戶中建立第一個 Web 應用程式時自動註冊提供者。
在 Azure 入口網站中設定
請從 App Service 入口網站中,移至 [網路]。 在 [輸出流量設定] 區段中,選取 [虛擬網路整合]。
選取 [新增虛擬網路整合]。
下拉式清單包含您訂用帳戶中相同區域內的所有虛擬網路。 選取預先存在的空白子網路,或者建立新的子網路。
整合期間,會重新啟動您的應用程式。 當整合完成時,您將會看到與其整合的虛擬網路詳細資訊。
使用 Azure CLI 進行設定
您也可以使用 Azure CLI 來設定虛擬網路整合:
az webapp vnet-integration add --resource-group <group-name> --name <app-name> --vnet <vnet-name> --subnet <subnet-name>
注意
此命令會檢查是否已將子網路委派給 Microsoft.Web/serverFarms,並在未設定子網路時套用必要的委派。 如果您已設定子網路,但沒有檢查的權限,或者虛擬網路位於另一個訂用帳戶中,您可以使用 --skip-delegation-check
參數來略過驗證。
使用 Azure PowerShell 進行設定
準備參數。
$siteName = '<app-name>'
$vNetResourceGroupName = '<group-name>'
$webAppResourceGroupName = '<group-name>'
$vNetName = '<vnet-name>'
$integrationSubnetName = '<subnet-name>'
$vNetSubscriptionId = '<subscription-guid>'
注意
如果虛擬網路位於 webapp 以外的另一個訂用帳戶中,您可以使用 Set-AzContext -Subscription "xxxx-xxxx-xxxx-xxxx" 命令來設定目前的訂用帳戶內容。 將目前的訂用帳戶內容設定為部署虛擬網路的訂用帳戶。
檢查子網路是否委派給 Microsoft.Web/serverFarms。
$vnet = Get-AzVirtualNetwork -Name $vNetName -ResourceGroupName $vNetResourceGroupName
$subnet = Get-AzVirtualNetworkSubnetConfig -Name $integrationSubnetName -VirtualNetwork $vnet
Get-AzDelegation -Subnet $subnet
如果您的子網未委派給 Microsoft.Web/serverFarms,請使用下列命令新增委派。
$subnet = Add-AzDelegation -Name "myDelegation" -ServiceName "Microsoft.Web/serverFarms" -Subnet $subnet
Set-AzVirtualNetwork -VirtualNetwork $vnet
設定虛擬網路整合。
注意
如果 webapp 位於虛擬網路以外的另一個訂用帳戶中,您可以使用 Set-AzContext -Subscription "xxxx-xxxx-xxxx-xxxx" 命令來設定目前的訂用帳戶內容。 將目前的訂用帳戶內容設定為部署 Web 應用程式的訂用帳戶。
$subnetResourceId = "/subscriptions/$vNetSubscriptionId/resourceGroups/$vNetResourceGroupName/providers/Microsoft.Network/virtualNetworks/$vNetName/subnets/$integrationSubnetName"
$webApp = Get-AzResource -ResourceType Microsoft.Web/sites -ResourceGroupName $webAppResourceGroupName -ResourceName $siteName
$webApp.Properties.virtualNetworkSubnetId = $subnetResourceId
$webApp.Properties.vnetRouteAllEnabled = 'true'
$webApp | Set-AzResource -Force