設定 App Service 環境搭配強制通道

重要

本文說明隔離式 App Service 方案搭配使用的 App Service 環境 v2 相關資訊。 App Service 環境 v2 將在 2024 年 8 月 31 日淘汰。 有較新版本的 App Service 環境,其更易於使用,並且是在更強大的基礎結構上執行。 若要深入瞭解新版本,請從 App Service 環境簡介開始。 如果您目前使用 App Service 環境 v2,請遵循本文中的步驟來移轉至新版本。

自 2024 年 1 月 29 日起,您無法再使用任何可用的方法建立新的 App Service 環境 v2 資源,包括 ARM/Bicep 範本、Azure 入口網站、Azure CLI 或 REST API。 您必須在 2024 年 8 月 31 日之前移轉至 App Service 環境 v3,以避免資源刪除和資料遺失。

App Service Environment (ASE) 是在客戶的 Azure 虛擬網路之中的 Azure App Service 部署。 許多客戶將其 Azure 虛擬網路設定為內部部署網路 (具備 VPN 或 Azure ExpressRoute 連線) 的擴充。 當您將網際網路繫結流量重新導向至您的 VPN 或虛擬設備時,就會使用強制通道。 虛擬設備通常用來檢查和稽核輸出網路流量。

ASE 有一些外部相依性,App Service 環境網路架構文件會予以說明。 通常所有 ASE 輸出相依性流量都必須都通過與 ASE 一起佈建的 VIP。 如果您變更往返 ASE 的流量路由,但未遵循以下的資訊,您的 ASE 將會停止運作。

在 Azure 虛擬網路中,路由是根據 最長首碼比對 (LPM) 而進行。 如果有多個符合相同 LPM 的路由,則會根據其來源,以下列順序選取路由:

  • 使用者定義的路由 (UDR)
  • BGP 路由 (使用 ExpressRoute 時)
  • 系統路由

若要深入了解虛擬網路中的路由,請閱讀使用者定義的路由和 IP 轉送

如果您想要將 ASE 輸出流量路由傳送至某處,而非直接傳送至網際網路,您有下列選項:

  • 讓 ASE 可以直接存取網際網路
  • 將您的 ASE 子網路設定為略過 BGP 路由
  • 將您的 ASE 子網路設定為使用 Azure SQL 和 Azure 儲存體的服務端點
  • 將您自己的 IP 新增至 ASE Azure SQL 防火牆

讓 App Service Environment 具備網際網路直接存取權

若要讓您的 ASE 能夠直接移至網際網路,即使已使用 ExpressRoute 設定您的 Azure 虛擬網路,您仍可:

  • 將 ExpressRoute 設定為公告 0.0.0.0/0。 根據預設,它會將所有輸出流量路由傳送至內部部署網路。
  • 建立位址首碼為 0.0.0.0/0、下一個躍點類型為網際網路的 UDR,並將它套用至 ASE 子網路。

如果您做了這兩項變更,則源自 App Service Environment 子網路且目的地為網際網路的流量,將不會被強制經由 ExpressRoute 連線傳輸。

如果網路已在內部部署路由流量,則您必須建立子網路以裝載您 ASE,並為其設定 UDR,然後再嘗試部署 ASE。

重要

UDR 中定義的路由必須足夠明確,以優先於 ExpressRoute 組態所通告的任何路由。 前面的範例使用廣泛的 0.0.0.0/0 位址範圍。 因此有可能會不小心由使用更明確位址範圍的路由通告所覆寫。

針對從公用對等互連路徑至私人對等互連路徑的路由進行交叉通告的 ExpressRoute 設定,不支援 App Service Environment。 已設定公用對等互連的 ExpressRoute 設定,會收到來自 Microsoft 的路由通告。 通告中會包含一大組 Microsoft Azure 位址範圍。 如果位址範圍在私人對等互連路徑上交叉通告,來自 App Service Environment 子網路的所有連出網路封包都會路由傳送至客戶的內部部署網路基礎結構。 App Service Environment 預設不支援這種網路流量。 此問題的一個解決方案是停止從公用對等互連路徑至私人對等互連路徑的交叉通告路由。 另一個解決方式是讓 App Service Environment 可以在強制通道設定中運作。

Direct internet access

將您的 ASE 子網路設定為略過 BGP 路由

您可以將您的 ASE 子網路設定為略過所有 BGP 路由。 若已設定為忽略 BGP 路由,ASE 將能夠存取其相依項目,而不會發生任何問題。 不過,您必須建立 UDR,才能讓您的應用程式存取內部部署資源。

若要將您的 ASE 子網路設定為略過 BGP 路由:

  • 如果您還沒有 UDR,請加以建立並將它指派給您的 ASE 子網路。
  • 在 Azure 入口網站中,開啟指派給 ASE 子網路的路由表 UI。 選取設定。 將虛擬網路閘道路由傳播設為「停用」。 按一下 [檔案] 。 關閉該功能的相關資訊位於建立路由表文件中。

將 ASE 子網路設定為忽略所有 BGP 路由之後,您的應用程式便無法再觸達內部部署環境。 若要讓您的應用程式能夠存取內部部署資源,請編輯指派給 ASE 子網路的 UDR,並新增內部部署位址範圍的路由。 下一個躍點類型應該設定為虛擬網路閘道。

使用服務端點設定您的 ASE

若要從您的 ASE 路由傳送所有輸出流量 (移至 Azure SQL 和 Azure 儲存體的流量除外),請執行下列步驟:

  1. 您可以建立路由表並將它指派給 ASC 子網路。 請在 App Service 環境管理位址中尋找符合您區域的位址。 建立這些位址的路由,或使用 AppServiceManagement 服務標籤搭配網際網路的下一個躍點。 這些是必要路由,因為 App Service Environment 輸入環境流量必須從它傳送至的相同位址回覆。

  2. 在您的 ASE 子網路中使用 Azure SQL 和 Azure 儲存體啟用服務端點。 完成此步驟後,您可以使用強制通道設定您的 VNet。

如需關於使用範本部署 ASE 的詳細資訊,請參閱使用範本建立 App Service 環境

服務端點可讓您將多租用戶服務的存取權限制於一組 Azure 虛擬網路和子網路。 您可以在虛擬網路服務端點文件中深入了解服務端點。

當您在資源上啟用服務端點時,所建立的路由具有高於所有其他路由的優先順序。 如果您使用服務端點搭配強制通道 ASE,Azure SQL 和 Azure 儲存體管理流量不會使用強制通道。 其他 ASE 相依性流量會使用強制通道且不能遺失,否則 ASE 會無法正常運作。

透過 Azure SQL 執行個體在子網路上啟用服務端點時,從該子網路連線的所有 Azure SQL 執行個體都必須啟用服務端點。 如果您想要從相同的子網路存取多個 Azure SQL 執行個體,您就無法在一個 Azure SQL 執行個體啟用服務端點,而不要在另一個執行個體上啟用。 Azure 儲存體與 Azure SQL 的運作方式不同。 當您使用 Azure 儲存體啟用服務端點時,您會封鎖您的子網路存取該資源,,但仍可存取其他 Azure 儲存體帳戶 (即使它們未啟用服務端點)。

如果您設定對網路篩選設備使用強制通道,請記住,除了 Azure SQL 和 Azure 儲存體以外,ASE 還具有一些相依性。 如果封鎖對這些相依項目的流量,則 ASE 無法正常運作。

Forced tunnel with service endpoints

將您自己的 IP 新增至 ASE Azure SQL 防火牆

若要從您的 ASE 傳輸所有輸出流量 (移至 Azure 儲存體的流量除外),請執行下列步驟:

  1. 您可以建立路由表並將它指派給 ASC 子網路。 請在 App Service 環境管理位址中尋找符合您區域的位址。 為下一個躍點為網際網路的位址建立路由。 這些是必要路由,因為 App Service Environment 輸入環境流量必須從它傳送至的相同位址回覆。

  2. 在您的 ASE 子網路中使用 Azure 儲存體啟用服務端點

  3. 取得位址,該位址將使用於從您的 App Service Environment 至網際網路的所有輸出流量。 如果您將流量路由傳送至內部部署網路,則這些位址就是您的 NAT 或閘道 IP。 如果您想要透過 NVA 路由傳送 App Service Environment 連出流量,則輸出位址為 NVA 的公用 IP。

  4. 若要設定現有 App Service 環境中的輸出位址: 請移至 resources.azure.com,而後移至 Subscription/<subscription id>/resourceGroups/<ase resource group>/providers/Microsoft.Web/hostingEnvironments/<ase name>。 接著,您就可以看到描述您 App Service Environment 的 JSON。 確定最上方寫的是「讀取/寫入」。 選取編輯。 向下捲動至底部。 將 userWhitelistedIpRanges 值從 null 變更為類似以下這樣。 使用您要設為輸出位址範圍的位址。

    "userWhitelistedIpRanges": ["11.22.33.44/32", "55.66.77.0/24"]
    

    選取頂端的 [PUT]。 此選項會觸發 App Service Environment 上的規模調整作業,並調整防火牆。

若要以輸出位址建立您的 ASE :請依照使用範本建立 App Service Environment中的指示操作並提取適當的範本。 編輯 azuredeploy.json 檔案中的 "resources" 區段 (但不在 "properties" 區塊中),而且納入包含您的值的 userWhitelistedIpRanges 行。

"resources": [
    {
        "apiVersion": "2015-08-01",
        "type": "Microsoft.Web/hostingEnvironments",
        "name": "[parameters('aseName')]",
        "kind": "ASEV2",
        "location": "[parameters('aseLocation')]",
        "properties": {
            "name": "[parameters('aseName')]",
            "location": "[parameters('aseLocation')]",
            "ipSslAddressCount": 0,
            "internalLoadBalancingMode": "[parameters('internalLoadBalancingMode')]",
            "dnsSuffix" : "[parameters('dnsSuffix')]",
            "virtualNetwork": {
                "Id": "[parameters('existingVnetResourceId')]",
                "Subnet": "[parameters('subnetName')]"
            },
            "userWhitelistedIpRanges":  ["11.22.33.44/32", "55.66.77.0/30"]
        }
    }
]

這些變更會將流量直接從 ASE 傳送至 Azure 儲存體,並允許從 ASE 的 VIP 以外的其他位址存取 Azure SQL。

Forced tunnel with SQL allowlist

防止問題發生

如果 ASE 與其相依性之間的通訊已中斷,則 ASE 會變成不良狀態。 如果維持不良狀態太久,則 ASE 會變成暫停狀態。 若要使 ASE 恢復權限,請遵循 ASE 入口網站中的指示操作。

除了中斷通訊以外,您可能會因為造成過久延遲而對 ASE 產生負面影響。 如果您的 ASE 離您的內部部署網路太遠,可能會發生很久的延遲。 舉例來說,跨越海洋或大陸連到您的內部部署網路,都屬於太遠的距離。 內部網路擁塞或輸出頻寬限制,也可能造成延遲。