共用方式為


集中式組態

小提示

此內容摘錄自適用於 Azure 的電子書《架構雲端原生 .NET 應用程式》,該書可在 .NET Docs 上閱讀,或以 PDF 格式免費下載並離線閱讀。

Azure 電子書的雲端原生 .NET 應用程式封面縮圖。

不同於在單一實例內執行所有專案的整合型應用程式,雲端原生應用程式是由分散於虛擬機、容器和地理區域的獨立服務所組成。 管理數十個相互依存服務的組態設定可能會很困難。 跨不同位置的組態設定複本容易出錯且難以管理。 集中式設定是分散式雲端原生應用程式的重要需求。

第 1 章所述,Twelve-Factor 應用程式建議需要嚴格區分程式代碼和設定。 組態必須儲存在應用程式外部,並且根據需要讀入。 將組態值儲存為程序代碼中的常數或常值是違規。 相同應用程式的許多服務通常會使用相同的組態值。 此外,我們必須跨多個環境支援相同的值,例如開發、測試和生產環境。 最佳做法是將它們儲存在集中式組態存放區中。

Azure 雲端提供數個絕佳的選項。

Azure 應用程式組態

Azure 應用程式組態 是完全受控的 Azure 服務,會將非秘密組態設定儲存在安全的集中式位置。 預存值可以在多個服務和應用程式之間共用。

服務很容易使用,並提供數個優點:

  • 靈活索引鍵/值表示和映射
  • 使用 Azure 標籤
  • 用於管理的專用UI
  • 機密資訊的加密
  • 查詢和批次擷取

Azure 應用程式組態會維護對索引鍵/值設定所做的變更七天。 時間點快照集功能可讓您重新建構設定的歷程記錄,甚至復原失敗的部署。

應用程式組態會自動快取每個設定,以避免對組態存放區進行過多呼叫。 重新整理操作會等到設定的快取值到期後才更新該設定,即使其值在組態存放區中已經變更也是如此。 默認快取到期時間為30秒。 您可以覆寫到期時間。

App Configuration 會加密在傳輸和儲存時的所有設定值。 密鑰名稱和標籤會作為擷取組態數據的索引,且不會加密。

雖然應用程式組態提供強化的安全性,但 Azure Key Vault 仍然是儲存應用程式秘密的最佳位置。 Key Vault 可提供硬體層級的加密、精細的存取原則,以及憑證輪替之類的管理作業。 您可以建立應用程式組態值,以參考儲存在 Key Vault 中的秘密。

Azure 金鑰保管庫

Key Vault 是受控服務,可安全地儲存和存取秘密。 秘密是您想要嚴格控制存取權的任何專案,例如 API 金鑰、密碼或憑證。 保存庫是秘密的邏輯群組。

Key Vault 可大幅降低不小心洩露祕密的風險。 使用 Key Vault 時,應用程式開發人員不再需要將安全性資訊儲存在其應用程式中。 這種做法不需要將此資訊儲存在您的程式代碼內。 例如,應用程式可能需要連線到資料庫。 您可以在 Key Vault 中妥善儲存連接字串,而不用在應用程式的程式碼中儲存連接字串。

您的應用程式可以使用 URI 安全地存取其所需的資訊。 這些 URI 可讓應用程式擷取特定版本的祕密。 您不需要撰寫自訂程式碼來保護 Key Vault 中儲存的任何祕密資訊。

存取 Key Vault 需要適當的呼叫端驗證和授權。 一般而言,每個雲端原生微服務都會使用 ClientId/ClientSecret 組合。 務必將這些憑證保留在版本控制之外。 最佳做法是在應用程式的環境中設定它們。 您可以使用 Key Vault FlexVolume,從 AKS 直接存取 Key Vault。

eShop 中的設定

eShopOnContainers 應用程式包含每個微服務的本機應用程式配置檔。 這些檔案會提交到原始碼控制中,但不包含機密資訊,例如連接字串、API 金鑰等。 在生產環境中,個別設定可能會以個別服務環境變數覆寫。 在環境變數中插入秘密是裝載應用程式的常見作法,但不提供集中組態存放區。 為了支援組態設定的集中式管理,每個微服務都包含一個設定,可在其使用本機設定或 Azure Key Vault 設定之間切換。

參考資料