集中式設定
雲端原生應用程式不同於在單一執行個體內執行所有項目的整合型應用程式,是由分散於虛擬機器、容器和地理區域的獨立服務所組成。 管理數十個相互依存服務的組態設定可能會具有挑戰性。 跨不同位置的組態設定複本很容易出錯,且難以管理。 集中式組態是分散式雲端原生應用程式的關鍵需求。
如第 1 章所述,十二要素應用程式建議需要嚴謹區隔程式碼和組態。 組態必須儲存於應用程式外部,並視需要讀取。 將組態值儲存為程式碼中的常數或常值是違規行為。 相同應用程式的許多服務通常會使用相同組態值。 此外,我們還必須跨多個環境支援相同的值,例如開發、測試和生產環境。 最佳做法是將它們儲存在集中式組態存放區中。
Azure 雲端可提供數個絕佳的選項。
Azure 應用程式設定
Azure 應用程式組態是完全受控的 Azure 服務,其會將非祕密組態設定儲存在安全的集中式位置內。 並可在多個服務和應用程式之間共用預存值。
此服務很容易使用,並提供數項優點:
- 彈性的機碼值表示法和對應
- 使用 Azure 標籤進行標記
- 可用於管理的專用 UI
- 敏感性資訊加密
- 查詢和批次擷取
Azure 應用程式組態會將對機碼值設定進行的變更保留七天。 時間點快照集功能可讓您重新建構設定的歷程記錄,甚至復原失敗的部署。
應用程式組態會自動快取每個設定,以避免過度呼叫組態存放區。 重新整理作業會等到設定的快取值到期再更新該設定,即使其值在設定存放區中有所變更也是一樣。 預設的快取到期時間為 30 秒。 您可以覆寫到期時間。
應用程式組態會加密傳輸和待用中的所有組態值。 金鑰名稱和標籤會作為用來擷取設定資料的索引,且不會加密。
雖然應用程式組態可提供強化的安全性,但 Azure Key Vault 仍是儲存應用程式祕密的最佳位置。 Key Vault 會提供硬體層級加密、細微存取原則和管理作業,例如憑證輪替。 您可以建立應用程式組態值,其參考儲存在金鑰保存庫中的祕密。
Azure Key Vault
金鑰保存庫是可安全儲存及存取祕密的受控服務。 祕密是指任何需受到嚴密存取控制的項目,例如 API 金鑰、密碼或憑證。 保存庫是祕密的邏輯群組。
Key Vault 可大幅降低不小心洩露祕密的風險。 使用 Key Vault 時,應用程式開發人員便不再需要將安全性資訊儲存在其應用程式中。 此做法不需要將此資訊儲存在您的程式碼中。 例如,應用程式可能需要連線到資料庫。 您可以在 Key Vault 中妥善儲存連接字串,而不用在應用程式的程式碼中儲存連接字串。
您的應用程式可以使用 URI 安全地存取其所需的資訊。 這些 URI 可讓應用程式擷取特定版本的祕密。 您不需要撰寫自訂程式碼來保護 Key Vault 中儲存的任何祕密資訊。
存取金鑰保存庫需要適當的呼叫端驗證和授權。 一般而言,每個雲端原生微服務都會使用 ClientId/ClientSecret 組合。 請務必將這些認證保留在原始檔控制之外。 最佳做法是在應用程式的環境中設定它們。 您可以使用金鑰保存庫 FlexVolume,直接存取 AKS 中的金鑰保存庫。
eShop 中的組態
eShopOnContainers 應用程式包含每個微服務的本機應用程式設定檔。 這些檔案會簽入原始檔控制,但不包含生產祕密,例如連接字串或 API 金鑰。 在生產環境中,個別設定可能會以個別服務環境變數覆寫。 在環境變數中插入祕密是裝載應用程式的常見做法,但不會提供中央組態存放區。 若要支援組態設定的集中式管理,每個微服務都應包含一個設定,可用以切換使用本機設定或 Azure Key Vault 設定。