Cloud KMS 簡介
在大規模環境下管理加密金鑰是安全領域中最困難的任務之一。Cloud Key Management Service (KMS) 是 Google Cloud 提供的託管解決方案,用於建立、使用、輪替及銷毀金鑰。
對於 專業雲端安全工程師 (PSE) 而言,Cloud KMS 是「靜態資料加密 (Encryption at Rest)」的基石。您必須了解金鑰的結構以及如何管理其生命週期,以滿足合規性和安全性要求。
白話文解釋
比喻一:銀行保管箱大樓
把 Cloud KMS 的資源層級想成一間高度保全的銀行。Project 是這間銀行的分行,Location(例如 us-central1、global)是金庫所在的樓層,Key Ring 是按部門分類的一整間保管箱機房,Key(CryptoKey)是其中一個特定的保管箱,每一個 Key Version 則是這個保管箱歷年來裝過的不同把鎖。當您「rotate」金鑰時,並不會把舊鎖丟掉——只是停止用舊鎖封裝新內容,因為早期存放物品的客戶仍需要用舊鎖才能取回東西。銷毀一個版本就像把鎖跟鑰匙磨成粉末:一旦 24 小時的恢復期過了,當初用那把鎖封裝的所有東西就再也讀不出來。
比喻二:飯店的總控鑰匙 vs. 房卡
Envelope encryption 就像飯店管理鑰匙的方式。每個房間都有一張獨特的 房卡,每次退房後重新編碼——這就是 資料加密金鑰 (DEK),存放在房門旁邊(也就是和資料放在一起)。飯店不會把上千張房卡都堆在櫃台,而是只保管一把 總控鑰匙,可以重新編程任何一張房卡的控制台——這就是在 Cloud KMS 中管理的 金鑰加密金鑰 (KEK)。KEK 永遠不離開前台辦公室(HSM)。若某張房卡遺失,只需重新編程那一間房;若懷疑總控鑰匙外洩,就 rotate KEK 並重新封裝所有房卡。
比喻三:藥局的管制藥品櫃
KMS IAM 中的 職責分離 (Separation of Duties) 就像醫院藥局。Cloud KMS Admin 是負責下單、貼標、報廢藥品(管理 key ring、建立金鑰、輪替、排程銷毀)的藥師,但絕對不能直接把藥品交給病人。CryptoKey Encrypter/Decrypter 是可以投藥(執行 encrypt/decrypt)的護理師,但無權新增或銷毀庫存。Viewer 則是只看庫存清單的稽核員。若一個人同時握有藥師與護理師的角色,他就可以偷偷建立金鑰、用它解密 PII、然後銷毀證據——這正是 CMEK 治理要防堵的稽核破口。
理解金鑰層級
Google Cloud 使用一種階層式的加密方法,稱為封套加密 (Envelope Encryption)。
三個層級:
- 資料加密金鑰 (DEK): 用於加密實際資料(例如檔案或資料庫中的某一行)的金鑰。DEK 會與加密後的資料儲存在一起。
- 金鑰加密金鑰 (KEK): 用於加密(封裝)DEK 的金鑰。這就是您在 Cloud KMS 中管理的金鑰。
- KMS 主金鑰 (根金鑰): Google 內部用來加密 KMS 服務本身的內部金鑰。
封套加密 (Envelope Encryption) 是指先使用資料加密金鑰 (DEK) 加密資料,然後再使用金鑰加密金鑰 (KEK) 來加密該 DEK 的做法。
軟體 vs. 硬體 (HSM) 保護層級
在 KMS 中建立金鑰時,您需要選擇保護層級 (Protection Level):
- 軟體 (Software): 金鑰儲存在安全的軟體模組中。這最具成本效益,適用於大多數情境。
- 硬體 (HSM): 金鑰儲存在經過 FIPS 140-2 第 3 級 認證的硬體安全模組 (Hardware Security Module) 中。金鑰素材絕不會以明文形式離開 HSM。
- 外部 (Cloud EKM): 金鑰儲存在 Google Cloud 外部的外部金鑰管理員中。
金鑰的 Protection Level 不可變更——建立後無法把 SOFTWARE 金鑰轉換為 HSM 或 EXTERNAL。若日後合規要求改用 HSM 後盾金鑰,必須建立新的 key ring/key 並指定 protectionLevel=HSM,重新封裝或重新加密資料,再把舊的 SOFTWARE 版本排程銷毀。對於受規範的工作負載(PCI DSS、FedRAMP High),請從第一天就使用 HSM,並以 gcloud kms keys create --protection-level=hsm 建立,避免後續昂貴的重新加密遷移。
金鑰輪替:自動與手動
輪替是建立新金鑰版本 (Key Version) 的過程。
- 自動輪替: 您設定一個排程(例如每 90 天)。KMS 會自動建立新的主版本。
- 手動輪替: 您立即觸發輪替(例如懷疑金鑰已外洩)。
當您輪替金鑰時,舊版本不會被刪除。它們仍然可以用來解密以前使用這些版本加密的資料。新的加密請求將使用新的「主 (Primary)」版本。
金鑰版本管理與銷毀
KMS 中的每個金鑰都擁有一個或多個金鑰版本。
- 主版本 (Primary Version): 用於執行新加密操作的版本。
- 排定銷毀 (Scheduled for Destruction): 當您刪除一個金鑰版本時,它會進入「恢復期」(預設為 24 小時,但可自訂)。在此期間,您可以「恢復」該版本。一旦恢復期結束,金鑰素材將被永久銷毀。
Cloud KMS 金鑰版本狀態遵循嚴格的生命週期:ENABLED → DISABLED → DESTROY_SCHEDULED → DESTROYED。從 ENABLED 可以 disable(可逆)或 destroy(進入 DESTROY_SCHEDULED,期間為 1–120 天,預設 24 小時)。從 DESTROY_SCHEDULED 可呼叫 restore 回到 DISABLED——絕對不會直接回到 ENABLED。一旦進入 DESTROYED 即為終態,金鑰素材無法復原。也要記住:IMPORT_FAILED 與 PENDING_IMPORT 只會出現在透過 Import Job(BYOK)建立的版本上,而 PENDING_GENERATION 則在 KMS 正在產生非對稱或 HSM 金鑰素材時短暫出現。
Cloud KMS 的 IAM 權限
KMS 透過特定的角色遵循最低權限原則:
- Cloud KMS 管理員 (Cloud KMS Admin): 管理金鑰環和金鑰(建立/輪替/刪除)。不能使用金鑰進行加密/解密。
- Cloud KMS 加密金鑰加密者/解密者 (CryptoKey Encrypter/Decrypter): 可以使用金鑰來保護資料。不能管理金鑰本身。
- Cloud KMS 檢視者 (Cloud KMS Viewer): 可以查看元數據,但不能使用或管理金鑰。
務必將 KMS 管理員角色與加密者/解密者角色分開,以防止單一管理員同時具備管理權限和存取敏感資料的權限(職責分離)。
多區域 vs. 區域金鑰環
- 區域 (Regional): 金鑰儲存在特定區域(如
us-central1)。對於位於同一區域的資源,效能最高。 - 多區域 (Multi-regional): 金鑰儲存在多個區域(如
us)。提供更高的可用性,且為多區域 GCS 儲存桶的必要條件。 - 全域 (Global): 一個特殊的地理位置,應謹慎使用,因為它可能會引入延遲。
在 Cloud Audit Logs 中稽核金鑰使用情況
每次使用金鑰(加密、解密、簽名)時,都會在 Cloud Audit Logs 中產生一條記錄(如果啟用了資料存取記錄)。
- 記錄內容包含: 誰使用了金鑰、何時使用以及針對哪個資源。
- 合規性關鍵: 證明金鑰僅由獲授權的身分存取。
對稱金鑰 vs. 非對稱金鑰
- 對稱金鑰 (AES-256): 使用相同的金鑰進行加密和解密。速度較快,用於大多數靜態資料保護(GCS、BigQuery)。
- 非對稱金鑰 (RSA/EC): 使用公開金鑰進行加密/驗證,使用私密金鑰進行解密/簽名。用於數位簽章和外部身份整合。
金鑰生命週期管理最佳實踐
- 使用專用專案: 將 KMS 金鑰環儲存在一個獨立的「安全專案」中,將其與應用程式專案隔離。
- 啟用自動輪替: 縮小金鑰外洩可能造成的影響範圍 (Blast Radius)。
- 監控銷毀操作: 為任何
Destroy操作設定告警。 - 強制執行 CMEK: 使用組織政策 (Organization Policy) 確保服務僅使用客戶管理的加密金鑰。
如果您銷毀了一個金鑰版本且恢復期已過,使用該版本加密的任何資料都將永久無法讀取。Google Cloud 中沒有任何「後門」或主恢復金鑰。
PSE 考試情境
情境 1:金鑰外洩後的恢復
「一名開發人員不小心將服務帳戶金鑰提交到了公開的 GitHub 儲存庫。該服務帳戶擁有某個 KMS 金鑰的加密/解密權限。安全工程師應該怎麼做?」 解答: 1. 立即撤銷該服務帳戶的 IAM 權限。 2. 手動輪替該 KMS 金鑰以建立新版本。 3. 使用新的主版本重新加密最敏感的資料。
情境 2:職責分離
「合規稽核員要求建立加密金鑰的人不應該是可以使用金鑰的人。您如何實作?」 解答: 將 Cloud KMS 管理員角色分配給安全管理員,並將 Cloud KMS 加密金鑰加密者/解密者角色分配給應用程式服務帳戶。確保雙方都不具備對方的角色。
總結檢查表
- 繪製 DEK -> KEK -> Root 的加密層級圖。
- 解釋軟體保護與 HSM 硬體保護之間的差異。
- 描述金鑰輪替期間舊版本的狀態。
- 識別實作「職責分離」所需的 IAM 角色。
- 列出安全銷毀金鑰版本的步驟。