
在 Azure 中,這項功能稱為 「輸出 VNet 整合」(Outbound VNet Integration)。它能讓你的 Web App 存取 VNet 內的資源(例如私有的資料庫或 VM),而不需要經過公網。
不過,要成功將 Web App 加入 VNet,你需要注意以下幾個關鍵點:
1. 方案等級限制 (App Service Plan SKU)
並非所有的 Web App 都能加入 VNet。你的 App Service Plan 必須是以下等級之一:
- Basic (僅限較新的版本)
- Standard
- Premium (v2 或 v3)
- Functions Premium
如果你是 Free 或 Shared 等級,則不支援 VNet 整合。
2. 子網段 (Subnet) 的特殊要求
Web App 加入 VNet 不是隨便找個 Subnet 塞進去就好,它有「潔癖」:
- 必須是空的:該 Subnet 不能有其他資源(如 VM 或資料庫)。
- 必須委派 (Delegation):該 Subnet 必須專門「委派」給
Microsoft.Web/serverFarms使用。 - 足夠的 IP:建議至少保留
/28位址空間(16 個 IP),因為 Web App 擴展時會消耗 IP。
3. 如何執行?(PowerShell 指令)
既然你已經定義了變數,以下是將 Web App 整合進 VNet 的標準流程:
A. 先幫 Subnet 設定委派 (如果還沒設定)
PowerShell
# 取得現有的 VNet 物件並設定 Subnet 委派
$vnet = Get-AzVirtualNetwork -Name $VNET_NAME -ResourceGroupName $RESOURCE_GROUP
$subnet = $vnet.Subnets | Where-Object { $_.Name -eq $SUBNET_NAME }
# 執行委派 (Delegation)
az network vnet subnet update `
--resource-group $RESOURCE_GROUP `
--vnet-name $VNET_NAME `
--name $SUBNET_NAME `
--delegations Microsoft.Web/serverFarms
B. 執行 VNet 整合
PowerShell
az webapp vnet-integration add `
--resource-group $RESOURCE_GROUP `
--name $WEB_APP_NAME `
--vnet $VNET_NAME `
--subnet $SUBNET_NAME
4. 常見的坑(鬼打牆預警)
- 區域限制 (Region):Web App 和 VNet 最好在同一個 Region(你的變數看起來都是
jpe日本東部,這沒問題)。 - 路由問題:預設情況下,只有往 VNet 私有位址的流量會走 VNet。如果你希望連「上網」的流量都強迫走 VNet(例如要過防火牆),你需要開啟
Route All設定。
我目前的 RG 可以加入其他 RG 的 vnet
在 Azure 中,資源的「實體連線」(VNet 整合)與「邏輯分類」(Resource Group, RG)是解耦的。只要你的帳號在兩個 Resource Group 都擁有足夠的權限(通常是 Contributor 或 Network Contributor),就能跨組進行整合。
以下是跨 RG 加入 VNet 的操作要點與指令:
1. 核心邏輯:使用「資源 ID」
當 VNet 在另一個 RG 時,單純傳入 VNet 名稱 $VNET_NAME 可能會讓 CLI 找不到對象。最穩健的做法是使用 完整資源 ID (Resource ID)。
2. 指令實作
首先,定義 VNet 所在的 RG 名稱(假設叫 rg-network-shared):
PowerShell
# 設定 VNet 所在的資源群組
$VNET_RG = "rg-network-shared" # 請換成你 VNet 實際所在的 RG 名稱
# 1. 取得 VNet 的子網段資源 ID (最保險的做法)
$SUBNET_ID = "/subscriptions/你的訂閱ID/resourceGroups/$VNET_RG/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME"
# 2. 執行 VNet 整合
az webapp vnet-integration add `
--name $WEB_APP_NAME `
--resource-group $RESOURCE_GROUP `
--vnet $VNET_NAME `
--subnet $SUBNET_NAME `
--subscription "你的訂閱ID" # 如果跨訂閱才需要,同訂閱可省略
3. 關鍵權限檢查(鬼打牆預防)
由於你提到你「目前不是 Owner」,跨 RG 操作最常卡在 RBAC 權限:
- 你的 RG ($RESOURCE_GROUP):你需要有權限修改 Web App(Contributor)。
- VNet 的 RG ($VNET_RG):你必須至少擁有該 Subnet 的 「Microsoft.Network/virtualNetworks/subnets/join/action」 權限。
白話文:如果你在 VNet 那邊連讀取權都沒有,這條路會斷掉。
4. 區域 (Region) 依然是死穴
雖然 RG 可以跨,但 Region 幾乎不能跨(除非使用特定進階功能):
- 你的 Web App 在
Japan East,VNet 也必須在Japan East。 - 如果 Web App 在
Taiwan North,VNet 也必須在Taiwan North。
5. 總結流程圖
💡 建議操作步驟
- 確認區域:先用
az network vnet show --name $VNET_NAME -g $VNET_RG --query location確認 VNet 的位置。 - 設定委派:確保該 Subnet 已經委派給
Microsoft.Web/serverFarms。 - 執行整合:使用上面的
az webapp vnet-integration add指令。
