在 Azure App Service 中啟用虛擬網路整合

透過從 Azure App Service 應用程式與 Azure 虛擬網路整合,您可以從虛擬網路內的應用程式觸達私人資源。

必要條件

虛擬網路整合功能需要:

必須委派子網路給 Microsoft.Web/serverFarms。 如果在整合之前未完成委派,則佈建流程將設定此委派。 子網路必須配置 IPv4 /28 區塊 (16 個位址)。 我們建議您至少要有 64 個位址 (IPv4 /26 區塊),以允許最大水平縮放。

如果虛擬網路位於與應用程式不同的訂用帳戶中,則您必須確定已向 Microsoft.Web 資源提供者註冊具有虛擬網路的訂用帳戶。 您可以遵循本文件來明確註冊提供者,但會在訂用帳戶中建立第一個 Web 應用程式時自動註冊提供者。

在 Azure 入口網站中設定

  1. 請從 App Service 入口網站中,移至 [網路]。 在 [輸出流量設定] 區段中,選取 [虛擬網路整合]

  2. 選取 [新增虛擬網路整合]

    Screenshot that shows selecting Virtual network integration.

  3. 下拉式清單包含您訂用帳戶中相同區域內的所有虛擬網路。 選取預先存在的空白子網路,或者建立新的子網路。

    Screenshot that shows selecting the virtual network.

整合期間,會重新啟動您的應用程式。 當整合完成時,您將會看到與其整合的虛擬網路詳細資訊。

使用 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

下一步