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

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

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

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

移轉有兩個階段:

  1. 移轉組態
  2. 移轉用戶端流量

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

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶
  • 現有的 應用程式閘道 V1 Standard。
  • 請確定您有最新的 PowerShell 模組,或者您可以在入口網站中使用 Azure Cloud Shell。
  • 如果正在本機執行 PowerShell,也需要執行 Connect-AzAccount,以建立與 Azure 的連線。
  • 請確定 V1 訂用帳戶中沒有提供 AppGW V2 名稱和資源組名的現有應用程式閘道。 這會重寫現有的資源。
  • 如果提供公用IP位址,請確定其處於成功狀態。 如果未提供,且提供 AppGWResourceGroupName,請確定名稱為 AppGWV2Name-IP 的公用 IP 資源不存在於 V1 訂用帳戶中名稱為 AppGWResourceGroupName 的資源群組中。
  • 請確定 V1 閘道或任何相關聯的資源在移轉期間不會規劃任何其他作業。

Azure Cloud Shell

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

要啟動 Azure Cloud Shell:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Screenshot that shows an example of Try It for Azure Cloud Shell.
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 Button to launch Azure Cloud Shell.
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 Screenshot that shows the Cloud Shell button in the Azure portal

若要使用 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 版可供使用,其中包含重要的錯誤修正和更新。使用此版本來避免潛在的問題。

組態移轉

本檔提供 Azure PowerShell 腳本。 它會執行下列作業來協助您進行設定:

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

下載腳本

您可以從 PowerShell 資源庫 下載移轉腳本。有新的穩定版本 (版本 1.0.11) 的移轉腳本可供使用,其中包括重大更新和錯誤修正。 建議使用此穩定版本。

使用腳本

注意

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 版是包含主要錯誤修正的新版本移轉腳本。 建議使用此穩定版本。

如何檢查所下載腳本的版本

若要檢查下載文稿的版本,步驟如下:

  • 擷取 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:[字串]:必要:此參數是現有標準 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 金鑰保存庫 中的憑證,並將其傳遞至移轉腳本。 若要將憑證下載為 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]: 選擇性。 PSApplicationGatewayTrustedRootCertificate 物件的逗號分隔清單,用來代表 來自 v2 網關之後端實例驗證的受信任跟證書

    $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 原則。

流量移轉

首先,請仔細檢查腳本已成功建立新的 V2 閘道,並透過 V1 閘道移轉的確切設定。 您可以從 Azure 入口網站 確認這一點。

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

以下是您目前應用程式閘道 (Standard) 可能會接收用戶端流量的一些案例,以及我們針對每個流量的建議:

  • 指向與標準 V1 或 WAF V1 閘道相關聯之前端 IP 位址的自定義 DNS 區域(例如,contoso.com)。

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

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

    您擁有兩種選擇:

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

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

    • 或者,您可以更新自定義網域 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 針對這些變體,在大部分情況下,移至 V2 閘道可提供相較於 V1 更好的價格優勢。
WAF 大型 654.08 262.8 與標準大型相同

注意

此處顯示的計算是以美國東部和 V1 中具有 2 個實例的閘道為基礎。 V2 中的可變成本是以最高使用量的 3 個維度之一為基礎:新聯機 (50/秒)、持續性聯機 (2500 個持續性聯機/分鐘)、輸送量 (1 CU 可以處理 2.22 Mbps)。

此處所述的案例是範例,僅供說明之用。 如需根據您的區域定價資訊,請參閱 定價頁面

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

常見問題

如需移轉的常見問題,請參閱 這裡

下一步

瞭解 應用程式閘道 V2