將應用程式祕密部署到 Service Fabric 受控叢集

密碼可以是任何機密資訊,例如儲存體連接字串、密碼或其他不會以純文字處理的值。 建議您使用 Azure Key Vault 來管理 Service Fabric 受控叢集的金鑰和祕密,並在這篇文章中加以運用。 不過,應用程式中的密碼「使用」 是由平台驗證,讓應用程式可部署至裝載在任何位置的叢集。

管理服務組態設定的建議方式是透過服務設定套件進行。 組態套件會有各種版本,並可透過含有健全狀況驗證和自動復原的受控輪流升級來進行升級。 這是慣用的全域組態,因為可以減少全域服務中斷的機會。 加密的密碼也不例外。 Service Fabric 具有內建的功能,可使用憑證加密來加密或解密組態套件 Settings.xml 檔案中的值。

下圖說明 Service Fabric 應用程式中密碼管理的基本流程︰

秘密管理概觀

此流程有四個主要步驟︰

  1. 取得資料編密憑證。
  2. 在叢集中安裝憑證。
  3. 在部署應用程式時以憑證來加密密碼的值,並將其插入服務的 Settings.xml 組態檔。
  4. 藉由以相同的編密憑證進行解密,從 Settings.xml 讀取加密的值。

Azure Key Vault 在此是當做憑證的安全儲存位置,以及讓憑證安裝在 Azure 中 Service Fabric 受控叢集節點上的方法。

如需如何實作應用程式祕密的範例,請參閱管理應用程式祕密

此外,我們也支援 KeyVaultReference。 Service Fabric KeyVaultReference 支援讓您只須參考 Key Vault 中儲存的祕密 URL,即可將祕密輕鬆部署至應用程式

建立資料加密憑證

若要建立您自己的金鑰保存庫和設定憑證,請使用 Azure CLI、PowerShell、入口網站等,依照 Azure Key Vault 中的指示進行。

注意

Key Vault「必須經啟用為可供範本部署使用」,才能讓計算資源提供者從其中取得憑證,然後將其安裝在叢集節點上。

在叢集中安裝憑證

此憑證必須安裝在叢集中的每個節點上,Service Fabric 受控叢集有助於簡化這項工作。 受控叢集服務可以將特定版本的祕密推送至節點,以協助安裝不常變更的祕密,例如將私人根 CA 安裝至節點。 針對大部分的生產工作負載,我們建議使用 KeyVault 延伸模組。 金鑰保存庫 VM 延伸模組可自動重新整理在 Azure 金鑰保存庫中儲存的憑證與靜態版本。

針對受控叢集,您需要三個值,兩個來自 Azure Key Vault,另一個則是您決定用於節點上本地存放區名稱的值。

參數:

  • Source Vault:這是
    • 例如:/subscriptions/{subscriptionid}/resourceGroups/myrg1/providers/Microsoft.KeyVault/vaults/mykeyvault1
  • Certificate URL:這是完整的 金鑰保存庫 秘密標識符,不區分大小寫且不可變
  • Certificate Store:這是將放置憑證之節點上的本地憑證存放區
    • 節點上的憑證存放區名稱,例如:「MY」

Service Fabric 受控叢集支援兩種方法,可將特定版本的祕密新增至節點。

  1. 初始叢集建立期間的入口網站只會將上面的值插入此區域中:

入口網站秘密輸入

  1. 在建立期間或任何時間的 Azure Resource Manager
{
  "apiVersion": "2021-05-01",
  "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
  "properties": {
    "vmSecrets": [
      {
        "sourceVault": {
          "id": "/subscriptions/{subscriptionid}/resourceGroups/myrg1/providers/Microsoft.KeyVault/vaults/mykeyvault1"
        },
        "vaultCertificates": [
          {
            "certificateStore": "MY",
            "certificateUrl": "https://mykeyvault1.vault.azure.net/certificates/{certificatename}/{secret-version}"
          }
        ]
      }
    ]
  }
}