將 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。 使用此移轉指南,以協助您規劃和執行移轉。
移轉有兩個階段:
- 移轉設定
- 移轉用戶端流量
本文主要協助設定移轉。 用戶端流量移轉會根據環境而不同。 本文提供一些一般建議。
必要條件
- 具有有效訂用帳戶的 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 中。 | |
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 | |
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 |
若要使用 Azure Cloud Shell:
啟動 Cloud Shell。
選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。
透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。
選取 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
方法。
使用 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.
- 請務必使用 PowerShell 資源庫中的最新穩定版本
如何執行指令碼
執行指令碼:
使用
Connect-AzAccount
連線至 Azure。使用
Import-Module Az
匯入 Az 模組。執行
Set-AzContext
Cmdlet,以將作用中 Azure 內容設定為正確的訂用帳戶。 這是重要步驟,因為如果現有資源群組不在目前訂用帳戶內容中,則移轉指令碼可能會將其清除。Set-AzContext -Subscription '<V1 application gateway SubscriptionId>'
執行
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 閘道上手動加以啟用。
使用適當的參數執行指令碼。 可能需要五到七分鐘才能完成。
範例
AzureAppGWMigration.ps1 ` -resourceId /subscriptions/aaaa0000-bb11-2222-33cc-444444dddddd/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/aaaa0000-bb11-2222-33cc-444444dddddd/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 合作,或與我們的支援小組連絡以取得協助。
常見問題
您可以在這裡找到常見移轉問題