將 Azure 應用程式閘道和 Web 應用程式防火牆從 V1 移轉至 V2

我們已在 2023 年 4 月 28 日宣佈棄用應用程式閘道 V1 SKU (標準和 WAF)。 V1 SKU 會 2026 年 4 月 28 日淘汰。 如需詳細資訊,請參閱在 2026 年 4 月 28 日前將應用程式閘道從 V1 SKU 移轉至 V2 SKU

相較於 V1,Azure 應用程式閘道和 Web 應用程式防火牆 (WAF) V2 現在提供其他功能,例如自動調整、可用性、區域備援、較高的效能、更快速的作業和改善的輸送量。 此外,所有新功能都是針對 V2 SKU 所發行。 強烈建議您立即建立移轉方案。

V1 閘道不會自動升級為 V2。 使用此移轉指南,以協助您規劃和執行移轉。

移轉有兩個階段:

  1. 移轉設定
  2. 移轉用戶端流量

本文主要協助設定移轉。 用戶端流量移轉會根據環境而不同。 本文提供一些一般建議

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶
  • 現有應用程式閘道 V1 標準。
  • 確定您有最新的 PowerShell 模組,或者您可以在入口網站中使用 Azure Cloud Shell。
  • 如果正在本機執行 PowerShell,也需要執行 Connect-AzAccount,以建立與 Azure 的連線。
  • 請確定 V1 訂用帳戶中沒有具有所提供 AppGW V2 名稱和資源群組名稱的現有應用程式閘道。 這會重寫現有資源。
  • 如果提供公用 IP 位址,則請確定其處於成功狀態。 如果未提供,但提供 AppGWResourceGroupName,則請確定名稱為 AppGWV2Name-IP 的公用 IP 資源不存在於 V1 訂用帳戶中名稱為 AppGWResourceGroupName 的資源群組中。
  • 針對 V1 SKU,需要驗證憑證才能設定與後端伺服器的 TLS 連線。 V2 SKU 需要針對相同的用途上傳受信任的根憑證。 雖然 V1 允許使用自我簽署憑證作為驗證憑證,但如果後端使用自我簽署憑證,V2 會強制產生和上傳自我簽署根憑證
  • 請確定未規劃在移轉期間於 V1 閘道或任何相關聯的資源上執行任何其他作業。

Azure Cloud Shell

Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。

要啟動 Azure Cloud Shell:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Azure Cloud Shell 的「試試看」範例螢幕擷取畫面。
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 啟動 Azure Cloud Shell 的按鈕。
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 顯示 Azure 入口網站中 Cloud Shell 按鈕的螢幕擷取畫面

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

  2. 選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。

  3. 透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。

  4. 選取 Enter 鍵執行程式碼或命令。

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 若要開始使用,請參閱安裝 Azure PowerShell (部分機器翻譯)。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

重要

執行移轉指令碼之前,每次都會執行 Set-AzContext -Subscription <V1 application gateway SubscriptionId> Cmdlet。 這需要將作用中 Azure 內容設定為正確訂用帳戶,因為如果現有資源群組不在目前訂用帳戶內容中,則移轉指令碼可能會將其清除。 這不是移轉指令碼 1.0.11 版和更新版本的必要步驟。

重要

現在已有移轉指令碼 1.0.11 版的新穩定版本可供使用,其中包含重要錯誤 (bug) 修正和更新。使用此版本來避免潛在的問題。

設定移轉

此文件提供 Azure PowerShell 指令碼。 其會執行下列作業,以協助您進行設定:

  • 在您指定的虛擬網路子網路中建立新的 Standard_V2 或 WAF_V2 閘道。
  • 順暢地將與 V1 標準或 WAF 閘道相關聯的設定複製到新建立的 Standard_V2 或 WAF_V2 閘道。

下載指令碼

您可以從 PowerShell 資源庫下載移轉指令碼。有移轉指令碼的新穩定版本 (1.0.11 版) 可供使用,其中包括主要更新和錯誤 (bug) 修正。 建議使用這個穩定版本。

使用指令碼

注意

執行移轉指令碼之前,每次都會執行 Set-AzContext -Subscription <V1 application gateway SubscriptionId> Cmdlet。 這需要將作用中 Azure 內容設定為正確訂用帳戶,因為如果現有資源群組不在目前訂用帳戶內容中,則移轉指令碼可能會將其清除。 這不是移轉指令碼 1.0.11 版和更新版本的必要步驟。

您可以根據本機 PowerShell 環境的設定和喜好設定,選擇兩個選項:

  • 如果您未安裝 Azure Az 模組,或不想解除安裝 Azure Az 模組,最佳選項是使用 Install-Script 選項來執行指令碼。
  • 如果您需要保留 Azure Az 模組,則最好的辦法是下載指令碼並直接執行。

若要判斷您是否已安裝 Azure Az 模組,請執行 Get-InstalledModule -Name az。 如果您沒有看到任何已安裝的 Az 模組,則可使用 Install-Script 方法。

若要使用此選項,您的電腦上不得安裝 Azure Az 模組。 如果已安裝,下列命令就會顯示錯誤。 您可以解除安裝 Azure Az 模組,或者使用另一個選項,手動下載指令碼並加以執行。

使用下列命令來執行指令碼,以取得最新版本:

Install-Script -Name AzureAppGWMigration -Force

此命令也會安裝必要的 Az 模組。

使用指令碼直接安裝

如果您已安裝一些 Azure Az 模組,但無法將其解除安裝 (或不想將其解除安裝),則可以使用指令碼來下載連結中的 [手動下載] 索引標籤,以手動下載指令碼。 指令碼會以原始的 nupkg 檔案形式下載。 若要從此 nupkg 檔案安裝指令碼,請參閱手動下載套件

1.0.11 版是包括主要錯誤 (bug) 修正的移轉指令碼新版本。 建議使用這個穩定版本。

如何檢查所下載指令碼的版本

若要檢查所下載指令碼的版本,步驟如下:

  • 解壓縮 NuGet 套件內容。
  • 開啟資料夾中的 .PS1 檔案,並檢查頂端的 .VERSION,以確認所下載指令碼的版本
<#PSScriptInfo
.VERSION 1.0.10
.GUID be3b84b4-e9c5-46fb-a050-699c68e16119
.AUTHOR Microsoft Corporation
.COMPANYNAME Microsoft Corporation
.COPYRIGHT Microsoft Corporation. All rights reserved.

如何執行指令碼

執行指令碼:

  1. 使用 Connect-AzAccount 連線至 Azure。

  2. 使用 Import-Module Az 匯入 Az 模組。

  3. 執行 Set-AzContext Cmdlet,以將作用中 Azure 內容設定為正確的訂用帳戶。 這是重要步驟,因為如果現有資源群組不在目前訂用帳戶內容中,則移轉指令碼可能會將其清除。

    Set-AzContext -Subscription '<V1 application gateway SubscriptionId>'
    
  4. 執行 Get-Help AzureAppGWMigration.ps1 以檢查必要的參數:

    AzureAppGWMigration.ps1
     -resourceId <V1 application gateway Resource ID>
     -subnetAddressRange <subnet space you want to use>
     -appgwName <string to use to append>
     -AppGWResourceGroupName <resource group name you want to use>
     -sslCertificates <comma-separated SSLCert objects as above>
     -trustedRootCertificates <comma-separated Trusted Root Cert objects as above>
     -privateIpAddress <private IP string>
     -publicIpResourceId <public IP name string>
     -validateMigration -enableAutoScale
    

注意

在移轉期間,請不要在 V1 閘道或任何相關聯的資源上嘗試任何其他作業。

指令碼的參數:

  • resourceId:[String]:必要:此參數是您現有 Standard V1 或 WAF V1 閘道的 Azure 資源識別碼。 若要尋找此字串值,請瀏覽至 Azure 入口網站,選取您的應用程式閘道或 WAF 資源,然後按一下閘道的 [屬性] 連結。 資源識別碼位於該頁面上。

    您也可以執行下列 Azure PowerShell 命令來取得資源識別碼:

    $appgw = Get-AzApplicationGateway -Name <V1 gateway name> -ResourceGroupName <resource group Name>
    $appgw.Id
    
  • subnetAddressRange:[String]:必要:此參數是您已針對包含您新 V2 閘道的新子網路所配置 (或想要配置) 的 IP 位址空間。 必須以 CIDR 標記法來指定位址空間。 例如,10.0.0.0/24。 您不需要事先建立此子網路,但 CIDR 必須是 VNET 位址空間的一部分。 如果子網路不存在,則指令碼會為您建立子網路,而且如果存在,則會使用現有的子網路 (確定子網路是空的,如果有任何項目,則只包含 V2 閘道,而且有足夠的可用 IP)。

  • appgwName: [String]:選用。 這是您指定要作為新 Standard_V2 或 WAF_V2 閘道名稱的字串。 如果未提供此參數,則現有 V1 閘道名稱使用時會附加尾碼 _V2

  • AppGWResourceGroupName:[String]:選用。 您想要建立 V2 應用程式閘道資源的資源群組名稱 (預設值是 <V1-app-gw-rgname>)

注意

請確定 V1 訂用帳戶中沒有具有所提供 AppGW V2 名稱和資源群組名稱的現有應用程式閘道。 這會重寫現有資源。

  • sslCertificates: [PSApplicationGatewaySslCertificate]:選用。 您所建立以代表來自 V1 閘道的 TLS/SSL 憑證的 PSApplicationGatewaySslCertificate 物件以逗號分隔的清單,必須上傳至新的 V2 閘道。 針對為您的標準 V1 或 WAF V1 閘道設定的每個 TLS/SSL 憑證,您可以透過此處所示的 New-AzApplicationGatewaySslCertificate 命令來建立新的 PSApplicationGatewaySslCertificate 物件。 您需要 TLS/SSL 憑證檔案的路徑和密碼。

    只有在您未針對 V1 閘道或 WAF 設定 HTTPS 接聽程式時,此參數才是選用。 如果您至少有設定一個 HTTPS 接聽程式,您必須指定此參數。

    $password = ConvertTo-SecureString <cert-password> -AsPlainText -Force
    $mySslCert1 = New-AzApplicationGatewaySslCertificate -Name "Cert01" `
      -CertificateFile <Cert-File-Path-1> `
      -Password $password
    $mySslCert2 = New-AzApplicationGatewaySslCertificate -Name "Cert02" `
      -CertificateFile <Cert-File-Path-2> `
      -Password $password
    

    您可以在上一個範例中傳入 $mySslCert1, $mySslCert2 (以逗號分隔),作為指令碼中此參數的值。

  • 來自 Keyvault 的 sslCertificates:選用。 您可以下載 Azure Key Vault 中所儲存的憑證,並將其傳遞至移轉指令碼。 若要將憑證下載為 PFX 檔案,請執行下列命令。 這些命令會存取 SecretId,然後將內容儲存為 PFX 檔案。

     $vaultName = ConvertTo-SecureString <kv-name> -AsPlainText -Force
     $certificateName = ConvertTo-SecureString <cert-name> -AsPlainText -Force
     $password = ConvertTo-SecureString <password> -AsPlainText -Force
    
     $pfxSecret = Get-AzKeyVaultSecret -VaultName $vaultName -Name $certificateName -AsPlainText
     $secretByte = [Convert]::FromBase64String($pfxSecret)
     $x509Cert = New-Object Security.Cryptography.X509Certificates.X509Certificate2
     $x509Cert.Import($secretByte, $null, [Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
     $pfxFileByte = $x509Cert.Export([Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $password)
    
     # Write to a file
     [IO.File]::WriteAllBytes("KeyVaultcertificate.pfx", $pfxFileByte)
    

    針對從 Keyvault 下載的每個憑證,您可以透過此處顯示的 New-AzApplicationGatewaySslCertificate 命令來建立新的 PSApplicationGatewaySslCertificate 物件。 您需要 TLS/SSL 憑證檔案的路徑和密碼。

    //Convert the downloaded certificate to SSL object
    $password = ConvertTo-SecureString  <password> -AsPlainText -Force 
    $cert = New-AzApplicationGatewaySSLCertificate -Name <certname> -CertificateFile <Cert-File-Path-1> -Password $password 
    
  • trustedRootCertificates: [PSApplicationGatewayTrustedRootCertificate]:選用。 您建立以代表用於驗證您的後端執行個體來自 v2 閘道的受信任的根憑證 PSApplicationGatewayTrustedRootCertificate 物件以逗號分隔的清單。

    $certFilePath = ".\rootCA.cer"
    $trustedCert = New-AzApplicationGatewayTrustedRootCertificate -Name "trustedCert1" -CertificateFile $certFilePath
    

    若要建立 PSApplicationGatewayTrustedRootCertificate 物件的清單,請參閱 New-AzApplicationGatewayTrustedRootCertificate

  • privateIpAddress: [String]:選用。 您想要與新 V2 閘道相關聯的特定私人 IP 位址。 這必須是來自您為新 V2 閘道配置的相同 VNet。 如果未指定此項目,指令碼會為您的 V2 閘道配置私人 IP 位址。

  • publicIpResourceId: [String]:選用。 您訂用帳戶中要配置給新 V2 閘道的現有公用 IP 位址 (標準 SKU) 資源的 resourceId。 如果提供公用 IP 資源名稱,則請確定其處於成功狀態。 如果未指定此項目,則指令碼會在相同的資源群組中配置新的公用 IP 位址。 名稱是 V2 閘道的名稱,並附加 -IP。 如果提供 AppGWResourceGroupName,而且未提供公用 IP 位址,則請確定名稱為 AppGWV2Name-IP 的公用 IP 資源不存在於 V1 訂用帳戶中名稱為 AppGWResourceGroupName 的資源群組中。

  • validateMigration: [switch]:選用。 使用此參數,以讓指令碼在 V2 閘道建立和設定複本之後執行一些基本設定比較驗證。 預設不會完成驗證。

  • enableAutoScale: [switch]:選用。 使用此參數,以讓指令碼在建立新 V2 閘道後於其上啟用自動調整。 預設會停用自動調整。 您稍後一律可以在新建立的 V2 閘道上手動加以啟用。

  1. 使用適當的參數執行指令碼。 可能需要五到七分鐘才能完成。

    範例

    AzureAppGWMigration.ps1 `
       -resourceId /subscriptions/8b1d0fea-8d57-4975-adfb-308f1f4d12aa/resourceGroups/MyResourceGroup/providers/Microsoft.Network/applicationGateways/myv1appgateway `
       -subnetAddressRange 10.0.0.0/24 `
       -appgwname "MynewV2gw" `
       -AppGWResourceGroupName "MyResourceGroup" `
       -sslCertificates $mySslCert1,$mySslCert2 `
       -trustedRootCertificates $trustedCert `
       -privateIpAddress "10.0.0.1" `
       -publicIpResourceId "/subscriptions/8b1d0fea-8d57-4975-adfb-308f1f4d12aa/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/MyPublicIP" `
       -validateMigration -enableAutoScale
    

警告/限制

  • 新的 V2 閘道具有新的公用和私人 IP 位址。 您無法順暢地將與現有 V1 閘道相關聯的 IP 位址移至 V2。 不過,您可以將現有 (未配置) 的公用或私人 IP 位址配置給新的 V2 閘道。
  • 您必須為 V1 閘道所在的虛擬網路內的另一個子網路提供 IP 位址空間。 此指令碼無法在已有 V1 閘道的子網路中建立 V2 閘道。 如果子網路已有 V2 閘道,則此指令碼可能仍然可運作,但前提是有足夠的 IP 位址空間。
  • 如果您有與 V2 閘道子網路相關聯的網路安全性群組或使用者定義路由,則請確定其符合 NSG 需求UDR 需求,才能成功移轉
  • 應用程式閘道子網路中目前不支援虛擬網路服務端點原則
  • 若要移轉 TLS/SSL 設定,您必須指定在 V1 閘道中使用的所有 TLS/SSL 憑證。
  • 如果您的 V1 閘道已啟用 FIPS 模式,則不會將其移轉至新的 V2 閘道。 V2 中不支援 FIPS 模式。
  • 如果您有僅限私人 IP V1 閘道,則指令碼會為新的 V2 閘道產生私人和公用 IP 位址。 僅限私人 IP V2 閘道目前處於公開預覽狀態。 正式發行之後,客戶可以利用指令碼以將其僅限私人 IP V1 閘道傳輸到僅限私人 IP V2閘道。
  • 應用程式閘道 V2 不支援 NTLM 和 Kerberos 驗證。 指令碼無法偵測閘道是否正在提供這種類型的流量,而且在執行時可能會造成從 V1 到 V2 閘道的重大變更。
  • WAFv2 是使用舊的 WAF 設定模式所建立;需要移轉至 WAF 原則。

流量移轉

首先,再次檢查指令碼是否已使用從您的 V1 閘道移轉的確切設定成功建立新的 V2 閘道。 您可以從 Azure 入口網站驗證此動作。

同時,透過 V2 閘道傳送少量流量作為手動測試。

下列是您目前的應用程式閘道 (標準) 可能會接收用戶端流量的幾個情節,以及我們針對每個情節的建議:

  • 指向與您的標準 V1 或 WAF V1 閘道相關聯的前端 IP 位址 (使用 A 記錄) 的自訂 DNS 區域 (例如,contoso.com)

    您可以更新 DNS 記錄,以指向與 Standard_V2 應用程式閘道相關聯的前端 IP 或 DNS 標籤。 根據 DNS 記錄上所設定的 TTL,要將您的所有用戶端流量移轉至新的 V2 閘道可能需要一段時間。

  • 指向與您 V1 閘道相關聯的 DNS 標籤 (例如:使用 myappgw.eastus.cloudapp.azure.com 的 CNAME 記錄) 的自訂 DNS 區域 (例如,contoso.com)

    您擁有兩種選擇:

    • 如果您在應用程式閘道上使用公用 IP 位址,則可以使用流量管理員設定檔來執行受控制的細微移轉,以增量方式將流量路由 (加權流量路由方法) 至新的 V2 閘道。

      您可以將 V1 和 V2 應用程式閘道的 DNS 標籤新增至流量管理員設定檔,以及對流量管理員網域 (例如 contoso.trafficmanager.net) 建立您的自訂 DNS 記錄的 CNAME (例如,www.contoso.com)。

    • 或者,您可以更新自訂網域 DNS 記錄,以指向新 V2 應用程式閘道的 DNS 標籤。 根據 DNS 記錄上所設定的 TTL,要將您的所有用戶端流量移轉至新的 V2 閘道可能需要一段時間。

  • 您的用戶端會連線到應用程式閘道的前端 IP 位址。

    更新您的用戶端,以使用與新建立的 V2 應用程式閘道相關聯的 IP 位址。 建議您不要直接使用 IP 位址。 請考量使用與應用程式閘道相關聯的 DNS 名稱標籤 (例如,yourgateway.eastus.cloudapp.azure.com),使得您可以透過 CNAME 連至您自己的自訂 DNS 區域 (例如,contoso.com)。

定價考量

應用程式閘道 V1 與 V2 SKU 的定價模式不同。 根據使用量,來收取 V2 費用。 如需定價資訊,請在移轉之前參閱應用程式閘道定價

成本效益指導

V2 SKU 隨附一系列優點,例如效能提升 5 倍、使用金鑰保存庫整合來改善安全性、更快速地更新 WAF_V2 中的安全性規則、WAF 自訂規則、原則關聯和 Bot 保護。 其也提供高可擴縮性、最大化流量路由,以及與 Azure 服務的無縫整合。 這些功能可以改善整體使用者體驗、防止在大流量期間變慢,以及避免昂貴的資料外洩。

根據階層和大小,V1 SKU 中有五個變體 - Standard_Small、Standard_Medium、Standard_Large、WAF_Medium 和 WAF_Large。

SKU V1 固定價格/mo V2 固定價格/mo 建議
標準中型 102.2 179.8 V2 SKU 可處理的要求數目多於 V1 閘道,因此建議將多個 V1 閘道合併成單一 V2 閘道,以將成本最大化。 請確定合併未超過應用程式閘道限制。 建議使用 3:1 合併。
WAF 中型 183.96 262.8 與標準中型相同
標準大型 467.2 179.58 相較於 V1,針對這些變體,在大部分情況下,移至 V2 閘道可以提供更好的價格優勢。
WAF 大型 654.08 262.8 與標準大型相同

注意

此處顯示的計算是根據美國東部,而且適用於 V1 中具有 2 個執行個體的閘道。 V2 中的可變成本是根據使用量最高的 3 個維度中的其中一個:新連線 (50/秒)、持續性連線 (2500 個持續性連線/分鐘)、輸送量 (1 CU 可以處理 2.22 Mbps)。

這裡討論的情節是範例,而且僅供說明。 如需根據您區域的定價資訊,請參閱定價頁面

如需定價的進一步問題,請與您的 CSAM 合作,或與我們的支援小組連絡以取得協助。

常見問題

您可以在這裡找到常見移轉問題

下一步

了解應用程式閘道 V2