如何使用 Azure Resource Manager 範本建立 ILB ASEv1

重要

本文是關於 v1 App Service 環境。 App Service 環境 v1 將於 2024 年 8 月 31 日淘汰。 有一個新版本的 App Service 環境,更容易使用,並在更強大的基礎結構上執行。 若要深入瞭解新版本,請從 App Service 環境 簡介開始。 如果您目前使用 App Service 環境 v1,請依照本文中的步驟移轉至新版本。

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

概觀

您可以使用虛擬網路內部位址而不是公用VIP來建立 App Service 環境。 此內部位址是由稱為內部負載平衡器 (ILB) 的 Azure 元件所提供。 您可以使用 Azure 入口網站 建立 ILB ASE。 您也可以透過 Azure Resource Manager 範本,使用自動化來建立它。 本文將逐步解說使用 Azure Resource Manager 範本建立 ILB ASE 所需的步驟和語法。

自動化建立 ILB ASE 有三個步驟:

  1. 首先,基底 ASE 會使用內部負載平衡器位址而不是公用 VIP 在虛擬網路中建立。 在此步驟中,根域名會指派給 ILB ASE。
  2. 建立 ILB ASE 之後,會上傳 TLS/SSL 憑證。
  3. 上傳的 TLS/SSL 憑證會明確指派給 ILB ASE 作為其「預設」TLS/SSL 憑證。 當應用程式使用指派給 ASE 的通用根域進行尋址時,此 TLS/SSL 憑證將用於 ILB ASE 上應用程式的 TLS 流量(例如 https://someapp.mycustomrootcomain.com

建立基底 ILB ASE

您可以在這裡取得 Azure Resource Manager 範本及其相關聯的參數檔案範例。

azuredeploy.parameters.json檔案中的大部分參數都常見於建立 ILB ASE 和系結至公用 VIP 的 ASE。 下列清單會呼叫特殊附注的參數,或建立 ILB ASE 時的唯一參數:

  • internalLoadBalancingMode:決定控件和數據埠的公開方式。
    • 3 表示埠 80/443 上的 HTTP/HTTPS 流量,以及 ASE 上的 FTP 服務所接聽的控制/數據通道埠,都會繫結至 ILB 配置的虛擬網路內部位址。
    • 2 表示只有 FTP 服務相關埠(控制和數據通道)會系結至 ILB 位址,而 HTTP/HTTPS 流量會保留在公用 VIP 上。
    • 0 表示所有流量都會系結至公用VIP,讓ASE外部。
  • dnsSuffix:此參數會定義將指派給 ASE 的預設根域。 在 Azure App 服務 的公用變化中,所有 Web 應用程式的預設根域都會 azurewebsites.net。 不過,由於 ILB ASE 是客戶的虛擬網路內部,因此使用公用服務的預設根域並無意義。 相反地,ILB ASE 應該有一個適合在公司內部虛擬網路內使用的預設根域。 例如,假設的 Contoso Corporation 可能會針對只能在 Contoso 虛擬網路內解析和存取的應用程式,使用預設的 internal.contoso.com 根域
  • ipSslAddressCount:此參數會自動預設為 azuredeploy.json 檔案中的 0 值,因為 ILB ASE 只有單一 ILB 位址。 ILB ASE 沒有明確的IP-SSL位址,因此ILB ASE的IP-SSL位址池必須設定為零,否則會發生布建錯誤。

azuredeploy.parameters.json檔案填入 ILB ASE 之後,就可以使用下列 PowerShell 代碼段來建立 ILB ASE。 變更檔案路徑,以符合 Azure Resource Manager 範本檔案位於您電腦上的位置。 也請記得為 Azure Resource Manager 部署名稱和資源組名提供您自己的值。

$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"

New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath

提交 Azure Resource Manager 樣本之後,需要數小時的時間才能建立 ILB ASE。 建立完成之後,ILB ASE 會顯示在入口網站 UX 中,以及觸發部署之訂用帳戶的 App Service 環境 清單。

上傳和設定「預設」TLS/SSL 憑證

建立 ILB ASE 之後,TLS/SSL 憑證應該與 ASE 相關聯,作為建立應用程式 TLS/SSL 連線的「預設」TLS/SSL 憑證。 繼續假設的 Contoso Corporation 範例,如果 ASE 的預設 DNS 後綴是 internal.contoso.com,則https://some-random-app.internal.contoso.com聯機會要求對 *.internal.contoso.com 有效的 TLS/SSL 憑證。

有不同的方式可以取得有效的 TLS/SSL 憑證,包括內部 CA、從外部簽發者購買憑證,以及使用自我簽署憑證。 不論 TLS/SSL 憑證的來源為何,都必須正確設定下列憑證屬性:

  • 主旨:此屬性必須設定為 *.your-root-domain-here.com
  • 主體別名:此屬性必須同時包含 *.your-root-domain-here.com 和 *.scm.your-root-domain-here.com。 第二個專案的原因是,使用表單 的位址來建立與每個應用程式相關聯的S/Kudu 網站的 TLS 連線 your-app-name.scm.your-root-domain-here.com

有了有效的 TLS/SSL 憑證,需要另外兩個步驟。 TLS/SSL 憑證必須轉換/儲存為 .pfx 檔案。 請記住,.pfx 檔案必須包含所有中繼和跟證書,也必須使用密碼來保護。

然後,產生的 .pfx 檔案必須轉換成 base64 字串串,因為 TLS/SSL 憑證會使用 Azure Resource Manager 範本上傳。 由於 Azure Resource Manager 樣本是文字檔,所以 .pfx 檔案必須轉換成 base64 字串,才能將其納入為範本的參數。

下列 PowerShell 代碼段顯示產生自我簽署憑證、將憑證導出為 .pfx 檔案、將 .pfx 檔案轉換成 base64 編碼字元串,然後將 base64 編碼字元串儲存至個別檔案的範例。 Base64 編碼的 PowerShell 程式代碼是從 PowerShell 腳本部落格改編而來

$certificate = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "*.internal.contoso.com","*.scm.internal.contoso.com"

$certThumbprint = "cert:\localMachine\my\" + $certificate.Thumbprint
$password = ConvertTo-SecureString -String "CHANGETHISPASSWORD" -Force -AsPlainText

$fileName = "exportedcert.pfx"
Export-PfxCertificate -cert $certThumbprint -FilePath $fileName -Password $password     

$fileContentBytes = get-content -encoding byte $fileName
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$fileContentEncoded | set-content ($fileName + ".b64")

成功產生 TLS/SSL 憑證並轉換成 base64 編碼字串之後,即可使用用來設定預設 TLS/SSL 憑證的 Azure Resource Manager 範例

azuredeploy.parameters.json檔案中的參數如下所列:

  • appServiceEnvironmentName:正在設定的 ILB ASE 名稱。
  • existingAseLocation:包含部署 ILB ASE 之 Azure 區域的文字字串。 例如:「美國中南部」。。
  • pfxBlobString:.pfx 檔案的 based64 編碼字串表示。 使用稍早所示的代碼段,您可以複製 「exportedcert.pfx.b64」 中包含的字串,並將其貼入為 pfxBlobString 屬性的值
  • password:用來保護 .pfx 檔案的密碼。
  • certificateThumbprint:憑證的指紋。 如果您從 PowerShell 擷取此值(例如 ,從先前的代碼段$certThumbprint ),您可以使用此值。 不過,如果您從 Windows 憑證對話框複製值,請記得移除多餘的空格。 certificateThumbprint 看起來應該像這樣:AF3143EB61D43F6727842115BB7F17BBCECAECAE
  • certificateName:您自己選擇用來識別憑證的易記字元串標識符。 此名稱會作為代表 TLS/SSL 憑證之 Microsoft.Web/certificates 實體之唯一 Azure Resource Manager 標識符的一部分。 名稱 結尾必須是 下列後綴:_yourASENameHere_InternalLoadBalancingASE。 入口網站會使用此後綴作為憑證用於保護已啟用 ILB 的 ASE 的指標。

azuredeploy.parameters.json的縮寫範例如下所示:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "appServiceEnvironmentName": {
            "value": "yourASENameHere"
        },
        "existingAseLocation": {
            "value": "East US 2"
        },
        "pfxBlobString": {
            "value": "MIIKcAIBAz...snip...snip...pkCAgfQ"
        },
        "password": {
            "value": "PASSWORDGOESHERE"
        },
        "certificateThumbprint": {
            "value": "AF3143EB61D43F6727842115BB7F17BBCECAECAE"
        },
        "certificateName": {
            "value": "DefaultCertificateFor_yourASENameHere_InternalLoadBalancingASE"
        }
    }
}

填入azuredeploy.parameters.json檔案之後,可以使用下列 PowerShell 代碼段來設定預設 TLS/SSL 憑證。 變更檔案路徑,以符合 Azure Resource Manager 範本檔案位於您電腦上的位置。 也請記得為 Azure Resource Manager 部署名稱和資源組名提供您自己的值。

$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"

New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath

提交 Azure Resource Manager 範本之後,每個 ASE 前端大約需要 40 分鐘才能套用變更。 例如,使用兩個前端的預設大小 ASE,範本大約需要 1 小時 20 分鐘才能完成。 當範本執行時,ASE 將無法調整。

範本完成後,可以透過 HTTPS 存取 ILB ASE 上的應用程式,並使用預設 TLS/SSL 憑證來保護連線。 當 ILB ASE 上的應用程式使用應用程式名稱加上預設主機名的組合來尋址時,將會使用預設 TLS/SSL 憑證。 例如, https://mycustomapp.internal.contoso.com 會針對 *.internal.contoso.com 使用預設 TLS/SSL 憑證。

不過,就像在公用多租使用者服務上執行的應用程式一樣,開發人員也可以為個別應用程式設定自定義主機名,然後為個別應用程式設定唯一的 SNI TLS/SSL 憑證系結。

開始使用

若要開始使用 App Service 環境,請參閱 App Service 環境 簡介

注意

如果您想要在註冊 Azure 帳戶前先開始使用 Azure App Service,請前往試用應用程式服務,您可以在應用程式服務中立即建立暫時的入門 Web 應用程式。 無需信用卡,也無需簽定合約。