什麼是 Azure Cosmos DB 客戶管理金鑰 (CMK)?
在當今數據驅動的時代,企業對於資料的保護與隱私要求日益嚴苛。特別是對於使用AI 應用程式資料庫和雲端資料庫的企業而言,確保資料在儲存時的安全性至關重要。Azure Cosmos DB 預設會使用由 Microsoft 管理的金鑰(服務管理金鑰)對所有儲存的資料(待用資料)進行加密,提供了一層基礎的保護。然而,對於需要更高層級控制權與合規性的組織,Azure 提供了「客戶管理金鑰」(Customer-Managed Keys, CMK) 功能。
簡單來說,客戶管理金鑰 (CMK) 賦予您對資料加密金鑰的完全控制權。這把「金鑰」儲存在您自己的 Azure Key Vault 中,由您全權管理其生命週期,包括建立、輪替、停用與撤銷存取權。Azure Cosmos DB 僅在需要存取您的資料時,才會向您的 Key Vault 請求使用金鑰的權限,而 Microsoft 永遠無法直接看到或存取您的金鑰。
CMK vs. 服務管理金鑰:核心差異比較
選擇使用客戶管理金鑰 (CMK) 還是服務管理金鑰 (Service-Managed Keys),是企業在規劃 資料保護策略 時的關鍵決策。這兩種模式在金鑰管理、控制權、責任歸屬及合規性方面存在顯著差異。以下透過表格進行詳細比較,助您釐清何者更符合您的業務需求。
| 比較項目 | 客戶管理金鑰 (CMK) | 服務管理金鑰 (Service-Managed Keys) |
|---|---|---|
| 金鑰所有權與控制權 | 由客戶完全擁有及控制,儲存於客戶的 Azure Key Vault。 | 由 Microsoft 代表客戶管理,儲存於內部金鑰庫。 |
| 金鑰管理責任 | 客戶需負責金鑰的建立、輪替、備份及存取權限設定。 | Microsoft 負責所有金鑰的生命週期管理,客戶無需介入。 |
| 安全性與合規性 | 提供最高層級的控制,滿足嚴格的行業規範(如 HIPAA, GDPR),可隨時撤銷存取權以保護資料。 | 符合多數基礎安全標準,但控制權限較低。 |
| 實作複雜度 | 設定較為複雜,需要整合 Azure Key Vault 並管理存取原則。 | 預設啟用,無需任何額外設定,使用上最為便捷。 |
| 適用情境 | 金融、醫療、政府等對資料安全與合規性有極高要求的產業,以及需要實現職責分離的企業。 | 一般應用程式、開發測試環境,或對金鑰管理沒有特殊要求的專案。 |
為何企業需要使用 CMK 提升數據隱私與合規性
採用 CMK 不僅僅是技術上的選擇,更是企業治理與風險控管策略的一環。以下是企業應考慮使用 CMK 的幾個核心理由:
核心要點:
- 增強的資料安全性: CMK 提供了雙重加密。除了 Azure 平台預設的加密層外,您的資料還會使用您自己的金鑰再次加密。這意味著即使發生極端情況,未經授權方也無法解密您的資料。
- 滿足嚴格的合規要求: 許多行業法規(如金融業的 PCI DSS、醫療保健的 HIPAA)要求組織對其加密金鑰擁有絕對的控制權。使用 CMK 是證明您符合這些規範的有力證據。
- 實現職責分離 (Separation of Duties): 在企業內部,資料庫管理員與安全管理員的職責應明確區分。透過 CMK,資料庫管理員可以管理 Cosmos DB,但無法存取加密金鑰;而安全管理員則掌管 Azure Key Vault 中的金鑰,但無法直接碰觸資料庫內容。
- 即時撤銷存取權限: 當偵測到潛在安全威脅或需要立即切斷對資料的存取時,您只需在 Azure Key Vault 中停用或刪除金鑰,Azure Cosmos DB 將立即無法存取對應的資料,實現快速的「加密銷毀」(Crypto-Shredding)。
實戰演練:設定 Azure Cosmos DB 客戶管理金鑰的完整步驟
為您的 NoSQL 資料庫 或 MongoDB 相容資料庫 啟用客戶管理金鑰,需要謹慎的規劃與設定。以下將引導您完成整個流程,確保您的資料從一開始就受到最高級別的保護。
重要提示: 客戶管理金鑰功能必須在建立新的 Azure Cosmos DB 帳戶時進行設定。目前尚無法在現有的帳戶上直接啟用此功能。若要為現有資料庫啟用CMK,您需要建立一個新的已啟用CMK的帳戶,並將資料進行遷移。
前置作業:準備您的 Azure Key Vault 執行個體
在設定 Cosmos DB 之前,您必須先擁有一個設定正確的 Azure Key Vault。這是儲存與管理您加密金鑰的核心組件。
第一步:建立 Azure Key Vault
若您尚未擁有 Key Vault,請先在 Azure 入口網站中建立一個。選擇與您的 Cosmos DB 帳戶相同的地理區域,以獲得最佳效能。
第二步:啟用關鍵安全設定
為了保護您的金鑰不會被意外刪除,必須在 Key Vault 的屬性中啟用「虛刪除 (Soft Delete)」和「清除保護 (Purge Protection)」。這兩項設定是使用 CMK 的強制性要求。
第三步:設定存取原則
您需要設定 Key Vault 的存取原則,授予 Azure Cosmos DB 服務主體 (Service Principal) 存取金鑰的權限。具體來說,需要授予 `Get`、`Unwrap Key` 和 `Wrap Key` 這三項金鑰權限。
第四步:建立或匯入金鑰
在 Key Vault 中產生一個新的 RSA 金鑰,或匯入您現有的金鑰。建議使用 2048 位元或更高強度的金鑰。請妥善記錄此金鑰的 URI,後續設定中將會用到。
步驟詳解:在新的 Cosmos DB 帳戶上啟用客戶管理金鑰
完成 Key Vault 的準備工作後,就可以開始建立啟用 CMK 的 Azure Cosmos DB 帳戶了。
- 建立新的 Cosmos DB 帳戶: 在 Azure 入口網站中,選擇建立一個新的 Azure Cosmos DB 帳戶。
- 選擇加密設定: 在「基本」設定頁籤完成後,進入「加密 (Encryption)」頁籤。在此處,您會看到資料加密的選項。
- 指定金鑰來源: 預設選項為「服務管理的金鑰」。請將其更改為「客戶管理的金鑰 (Customer-managed key)」。
- 提供金鑰 URI: 選擇您先前準備好的 Azure Key Vault,並從中選取要使用的金鑰及其版本。您也可以直接貼上金鑰的 URI。
- 身份驗證設定: 選擇用於驗證的身份類型。通常建議使用「系統指派的受控識別 (System Assigned Managed Identity)」,Azure 會自動為您的 Cosmos DB 帳戶建立並管理一個身份。
- 完成建立: 確認所有設定無誤後,繼續完成帳戶的建立流程。Azure 會在背景驗證對 Key Vault 的存取權限,並完成帳戶佈建。
設定金鑰輪替與管理策略
金鑰的生命週期管理是 資料安全性 的重要環節。定期輪替金鑰可以有效降低金鑰洩漏帶來的風險。
- 手動輪替: 您可以在 Azure Key Vault 中建立新版本的金鑰,然後回到 Cosmos DB 帳戶的「加密」設定中,將其更新為使用新版本的金鑰。
- 自動輪替: 為了簡化管理,您可以在設定 CMK 時不指定具體的金鑰版本。如此一來,當您在 Key Vault 中輪替金鑰(即建立新版本並將其設為作用中)時,Azure Cosmos DB 會在約一小時內自動偵測並開始使用最新的金鑰版本,實現無縫的金鑰管理。
客戶管理金鑰的加密機制與安全性最佳實踐
啟用 CMK 不僅僅是勾選一個選項,更需要搭配完善的存取控制與監控機制,才能發揮其最大效益,打造真正可靠的 企業級可靠性。
深入了解待用資料加密 (Encryption at Rest) 的雙重保護
Azure Cosmos DB 的 待用資料加密 採用了信封加密 (Envelope Encryption) 的模式。您的資料首先會被一個獨特的資料加密金鑰 (DEK) 加密。而在啟用 CMK 後,這個 DEK 又會被您儲存在 Key Vault 中的客戶管理金鑰 (KEK) 再次加密。這個過程形成了雙重加密保護層:
資料 -> [由 DEK 加密] -> 加密的資料
DEK -> [由 KEK (您的CMK) 加密] -> 加密的 DEK
當需要讀取資料時,Cosmos DB 必須先使用您的 KEK 解密 DEK,然後才能用 DEK 解密實際資料。這確保了如果沒有您的金鑰,任何人都無法讀取底層資料。
結合 Azure RBAC:精細化金鑰存取權限管理
為了強化安全性,應嚴格遵循最小權限原則。利用 Azure 的角色型存取控制 (RBAC) 來管理對 Azure Key Vault 的存取權限至關重要。例如:
- Key Vault 加密服務加密使用者: 將此角色指派給 Azure Cosmos DB 的受控識別,使其僅擁有執行加密/解密操作所需的權限。
- Key Vault 管理員: 將此角色僅授予極少數負責金鑰生命週期的安全管理人員。
- 開發人員與資料庫管理員: 這些角色不應被授予任何直接存取 Key Vault 金鑰的權限,從而實現職責分離。
監控與稽核:確保金鑰存取的安全透明
所有對 Azure Key Vault 的操作,包括每一次 Cosmos DB 使用金鑰的請求,都應被詳細記錄。啟用 Key Vault 的診斷記錄,並將其傳送到 Azure Monitor Log Analytics 工作區。您可以設定警示規則,在偵測到異常活動(例如,非預期的金鑰存取、權限變更)時立即收到通知,確保整個 金鑰管理 流程的透明與可追溯性。
結論
在雲端原生開發的趨勢下,資料安全已成為企業不可忽視的核心議題。Azure Cosmos DB 的客戶管理金鑰 (CMK) 功能,為需要絕對資料控制權和遵循嚴格合規標準的企業提供了一個強大而靈活的解決方案。通過將加密金鑰的所有權交還給客戶,並與 Azure Key Vault 緊密整合,CMK 不僅實現了雙重加密的強大保護,更透過 RBAC 和詳細的稽核日誌,構建了一套完整的資料治理框架。雖然啟用 CMK 需要更精細的規劃與管理,但它所帶來的安全性、合規性與信任度提升,對於保護企業最寶貴的數位資產而言,是絕對值得的投資。
FAQ 常見問題列表
1. 啟用客戶管理金鑰會影響資料庫效能嗎?
啟用 CMK 對資料庫的讀寫延遲影響極小,因為 Azure Cosmos DB 會快取已解密的資料加密金鑰 (DEK) 一段時間,無需每次操作都請求 Key Vault。然而,由於涉及額外的金鑰包裝/解包操作,請求單位 (RU) 的消耗可能會略微增加約 5-10%。因此,在進行容量規劃時應將此因素納入考量。
2. 如果我的 Azure Key Vault 中的金鑰遺失或被刪除會發生什麼事?
這是一個極其嚴重的狀況。如果金鑰被永久刪除(即清除了虛刪除的備份),所有使用該金鑰加密的資料將永久無法存取。這就是為什麼 Azure 強制要求在使用 CMK 前必須啟用 Key Vault 的「虛刪除」和「清除保護」功能,以防止意外或惡意的金鑰刪除。
3. 我可以在現有的 Cosmos DB 帳戶上啟用客戶管理金鑰嗎?
不行。截至目前,客戶管理金鑰必須在建立新的 Azure Cosmos DB 帳戶時進行設定。對於現有帳戶,您需要建立一個新的、已啟用 CMK 的帳戶,然後使用 Azure Data Factory、Cosmos DB 桌面資料遷移工具或自訂指令碼等方式,將資料從舊帳戶遷移到新帳戶。
4. 金鑰輪替會導致服務中斷嗎?
不會。Azure Cosmos DB 的金鑰輪替過程是無縫的,不會對您的應用程式造成任何停機時間。當您在 Key Vault 中輪替金鑰時,Cosmos DB 會在背景平滑地過渡到使用新的金鑰版本來加密新的資料,同時仍能使用舊版本的金鑰來解密舊資料,確保服務的企業級可靠性與連續性。
*本文內容僅代表作者個人觀點,僅供參考,不構成任何專業建議。




