使用金鑰保存庫憑證的 TLS 終止
Azure Key Vault 是平台管理的祕密存放區,可讓您用來保護祕密、金鑰和 TLS/SSL 憑證。 Azure 應用程式閘道支援與 Key Vault 整合,以使用連結到 HTTPS 所支援接聽程式的伺服器憑證。 此支援僅限於應用程式閘道 的 v2 SKU。
應用程式閘道提供兩種 TLS 終止模型:
- 提供附加至接聽程式的 TLS/SSL 憑證。 此模型是將 TLS/SSL 憑證傳遞至應用程式閘道以執行 TLS 終止的傳統方式。
- 當您建立已啟用 HTTPS 的接聽程式時,請提供現有 Key Vault 憑證或祕密的參考。
應用程式閘道與 Key Vault 整合提供許多優點,包括:
- 更高的安全性,因為 TLS/SSL 憑證不直接由應用程式開發小組處理。 整合可讓個別的安全性小組:
- 設定應用程式閘道。
- 控制應用程式閘道生命週期。
- 授權選取的應用程式閘道存取 Key Vault 中儲存的憑證。
- 支援將現有的憑證匯入 Key Vault。 或者,使用 Key Vault API,與任何受信任的 Key Vault 合作夥伴一起建立和管理新憑證。
- 支援自動更新 Key Vault 中儲存的憑證。
支援的憑證
應用程式閘道目前僅支援軟體驗證的憑證。 不支援硬體安全性模組 (HSM) 驗證的憑證。
應用程式閘道設定為使用 Key Vault 憑證之後,其執行個體會從 Key Vault 擷取憑證,並安裝在本機以執行 TLS 終止。 執行個體每隔四小時輪詢一次 Key Vault,以擷取更新版的憑證 (如果存在)。 如果找到更新的憑證,系統會自動輪替與 HTTPS 接聽程式相關聯的 TLS/SSL 憑證。
提示
應用程式閘道只要發生變更,就會強制檢查 Key Vault,以查看是否有任何新版本憑證, 其中包括 (但不限於) 前端 IP 設定、接聽程式、規則、後端集區、資源標籤等的變更。 找到更新的憑證後,就會立即出示新的憑證。
應用程式閘道使用 Key Vault 中的祕密識別碼來參考憑證。 針對 Azure PowerShell、Azure CLI 或 Azure Resource Manager,強烈建議您使用未指定版本的祕密識別碼。 這樣一來,如果 Key Vault 中有較新的版本,應用程式閘道便會自動輪換憑證。 https://myvault.vault.azure.net/secrets/mysecret/
是沒有版本的祕密 URI 範例。 您可以參考下一節中提供的 PowerShell 步驟。
Azure 入口網站僅支援 Key Vault 憑證,而不是祕密。 應用程式閘道仍支援從 Key Vault 參考祕密,但僅限透過 PowerShell、Azure CLI、API 和 Azure Resource Manager 範本 (ARM 範本) 等非入口網站資源。 Key Vault 憑證必須具有可導出的私密金鑰,應用程式閘道才能使用它們。
支援其他 Azure 訂用帳戶中的 Key Vault 參考,但必須透過 ARM 範本、Azure PowerShell、CLI、Bicep 等設定。應用程式閘道目前不支援透過 Azure 入口網站跨訂用帳戶設定金鑰保存庫。
Key Vault 中的憑證設定
針對 TLS 終止,應用程式閘道僅支援個人資訊交換 (PFX) 格式的憑證。 您可以匯入現有的憑證,或在 Key Vault 中建立新的憑證。 為了避免任何失敗,請確定 Key Vault 中的憑證狀態設定為 [已啟用]。
整合的運作方式
應用程式閘道與 Key Vault 整合是三步驟的設定程序:
注意
Azure 應用程式閘道與 Key Vault 整合支援保存庫存取原則和 Azure 角色型存取控制權限模型。
取得使用者指派的受控識別
應用程式閘道使用受控識別來代表您從 Key Vault 擷取憑證。
您可以建立新的使用者指派受控識別,或透過整合來重複使用現有的受控識別。 若要建立新的使用者指派受控識別,請參閱使用 Azure 入口網站建立使用者指派的受控識別。
將使用者指派的受控識別委派給 Key Vault
定義存取原則,以將使用者指派的受控識別用於 Key Vault:
在 Azure 入口網站中,移至 [Key Vault]。
選取包含憑證的 Key Vault。
如果您使用權限模型保存庫存取原則:選取 [存取原則],選取 [+ 新增存取原則],選取 [取得] 作為 [祕密權限],然後在 [選取主體] 中選擇使用者指派的受控識別。 然後選取儲存。
如果您使用 Azure 角色型存取控制,請遵循指派受控識別對資源的存取權一文,將 Azure Key Vault 的 Key Vault 祕密使用者角色指派給使用者指派的受控識別。
確認防火牆對 Key Vault 權限
自 2021 年 3 月 15 日起,Key Vault 利用使用者受控識別向 Azure Key Vault 進行驗證,承認應用程式閘道是受信任的服務。 您可以使用服務端點,並對 Key Vault 的防火牆啟用信任的服務選項,在 Azure 中建立安全的網路界限。 您可以拒絕存取從所有網路至 Key Vault 的流量 (包括網際網路流量),但仍可在您的訂用帳戶下讓應用程式閘道資源存取 Key Vault。
當您使用受限制的 Key Vault 時,請使用下列步驟來設定應用程式閘道使用防火牆和虛擬網路:
提示
如果 Key Vault 已啟用私人端點,則不需要步驟 1-3。 應用程式閘道可以使用私人 IP 位址來存取 Key Vault。
重要
如果使用私人端點來存取 Key Vault,您必須將 privatelink.vaultcore.azure.net 私人 DNS 區域連結至包含所參考 Key Vault 對應記錄的虛擬網路,其中包含應用程式閘道。 自訂 DNS 伺服器可以繼續用於虛擬網路,而不是使用 Azure DNS 提供的解析器,不過私人 DNS 區域還是必須仍然連結至虛擬網路。
在 Azure 入口網站的 Key Vault 中,選取 [網路]。
在 [防火牆與虛擬網路] 索引標籤上,選取 [選取的網路]。
針對 [虛擬網路],選取 [+ 新增現有的虛擬網路],然後為您的應用程式閘道執行個體新增虛擬網路和子網路。 如果出現提示,請確定已取消核取 [不要現在設定 'Microsoft.KeyVault' 服務端點] 核取方塊,以確保在子網路上啟用
Microsoft.KeyVault
服務端點。選取 [是] 以允許信任的服務略過 Key Vault 的防火牆。
注意
如果您使用 Azure CLI 或 PowerShell 來透過 ARM 範本,或透過從 Azure 入口網站部署的 Azure 應用程式,以部署應用程式閘道執行個體,則 SSL 憑證會在 Key Vault 中儲存為 Base64 編碼的 PFX 檔案。 您必須完成使用 Azure Key Vault 在部署期間傳遞安全參數值中的步驟。
將 enabledForTemplateDeployment
設定為 true
尤其重要。 憑證不一定有密碼。 如果憑證有密碼,下列範例針對應用程式閘道的 ARM 範本設定,顯示 properties
中的 sslCertificates
項目可能的設定。
"sslCertificates": [
{
"name": "appGwSslCertificate",
"properties": {
"data": "[parameters('appGatewaySSLCertificateData')]",
"password": "[parameters('appGatewaySSLCertificatePassword')]"
}
}
]
appGatewaySSLCertificateData
和 appGatewaySSLCertificatePassword
的值是從 Key Vault 中查閱而得,如使用動態識別碼參考祕密中所述。 從 parameters('secretName')
往回追蹤參考,以了解怎麼查閱。 如果憑證無密碼,請省略 password
項目。
設定應用程式閘道接聽程式
Key Vault 權限保存庫存取原則模型
在 Azure 入口網站中瀏覽至應用程式閘道,然後選取 [接聽程式] 索引標籤。選取 [新增接聽程式] (或選取現有的接聽程式),並指定 [HTTPS] 作為通訊協定。
在 [選擇憑證] 下,選取 [新建],然後在 [Https 設定] 下選取 [從 Key Vault 選擇憑證]。
在 [憑證名稱] 中,針對要在 Key Vault 中參考的憑證輸入易記名稱。 選取您的 [受控識別]、[Key Vault] 和 [憑證]。
選取之後,選取 [新增] (如果是建立) 或 [儲存] (如果是編輯),將參考的 Key Vault 憑證套用至接聽程式。
Key Vault Azure 角色型存取控制權限模型
應用程式閘道支援透過角色型存取控制權限模型在 Key Vault 中參考憑證。 參考 Key Vault 的最初幾個步驟必須透過 ARM 範本、Bicep、CLI 或 PowerShell 來完成。
注意
不支援透過入口網站來指定遵從角色型存取控制權限模型的 Azure Key Vault 憑證。
在此範例中,我們使用 PowerShell 來參考新的 Key Vault 祕密。
# Get the Application Gateway we want to modify
$appgw = Get-AzApplicationGateway -Name MyApplicationGateway -ResourceGroupName MyResourceGroup
# Specify the resource id to the user assigned managed identity - This can be found by going to the properties of the managed identity
Set-AzApplicationGatewayIdentity -ApplicationGateway $appgw -UserAssignedIdentityId "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyManagedIdentity"
# Get the secret ID from Key Vault
$secret = Get-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "CertificateName"
$secretId = $secret.Id.Replace($secret.Version, "") # Remove the secret version so Application Gateway uses the latest version in future syncs
# Specify the secret ID from Key Vault
Add-AzApplicationGatewaySslCertificate -KeyVaultSecretId $secretId -ApplicationGateway $appgw -Name $secret.Name
# Commit the changes to the Application Gateway
Set-AzApplicationGateway -ApplicationGateway $appgw
執行命令之後,即可在 Azure 入口網站中瀏覽至應用程式閘道,然後選取 [接聽程式] 索引標籤。按一下 [新增接聽程式] (或選取現有的接聽程式),並將 [通訊協定] 指定為 [HTTPS]。
在 [選擇憑證] 下,選取先前步驟中命名的憑證。 選取之後,選取 [新增] (如果是建立) 或 [儲存] (如果是編輯),將參考的 Key Vault 憑證套用至接聽程式。
調查並解決 Key Vault 錯誤
注意
在變更或撤銷對 Key Vault 資源的存取權時,請務必考慮對應用程式閘道資源造成的任何影響。 如果應用程式閘道無法存取相關聯的金鑰保存庫,或在其中找不到憑證物件,則應用程式閘道會自動將該接聽程式設定為停用狀態。
您可以檢視應用程式閘道的資源健康狀態,以識別此使用者驅動事件。 深入了解。
Azure 應用程式閘道不但每隔四小時輪詢一次 Key Vault 上是否有更新的憑證版本。 還會記錄任何錯誤,並與 Azure Advisor 整合,以指出任何設定錯誤,並提供修正建議。
- 登入 Azure 入口網站
- 選取 [Advisor]
- 從左側功能表中選取 [營運卓越] 類別。
- 如果閘道遇到此問題,您會看到標題為解決應用程式閘道的 Azure Key Vault 問題的建議。 請確定已從上方下拉式選項中選取正確的訂用帳戶。
- 選取以檢視錯誤詳細資料、相關聯的金鑰保存庫資源和疑難排解指南,以修正確切的問題。
透過 Azure Advisor 或資源健康狀態來識別這類事件,您可以快速解決 Key Vault 的任何設定問題。 強烈建議您利用 Azure Advisor 和資源健康狀態警示,以隨時獲知偵測到問題。
若為 Advisor 警示,請在顯示的建議類型中使用 [解決應用程式閘道的 Azure Key Vault 問題]:
您可以設定資源健康情況警示,如下所示: