本文說明如何在 Memorystore for Redis Cluster 的叢集中,使用 Cloud Key Management Service (Cloud KMS) 中的客戶自行管理的加密金鑰 (CMEK)。這份文件也說明瞭哪些資料會以加密形式儲存在永久儲存空間,以及叢集在重要生命週期事件期間的行為。
CMEK 可讓您控管用於保護所儲存資料的加密金鑰。在 Cloud KMS 中管理自己的金鑰,可進一步控管金鑰存取權、輪替和使用情形,有助於滿足嚴格的法規遵循和監管規定。
導入 CMEK 可為備份和持續性檔案等永久資料提供額外一層安全防護,並進一步控管這些資料。您只能在新叢集上啟用 CMEK。您無法將 CMEK 套用至現有叢集。
哪些人適合使用 CMEK?
CMEK 適用於擁有機密或管制資料,且需要控管自身加密金鑰的機構。如要進一步瞭解是否要使用 CMEK 加密這項資料,請參閱「決定是否要使用 CMEK」。
客戶自行管理的加密金鑰
您可以使用 CMEK,透過加密金鑰保護叢集中儲存的資料。如要加密這項資料,Memorystore for Redis Cluster 會使用 Google 代管的資料加密金鑰 (DEK) 和客戶自行管理的金鑰加密金鑰 (KEK)。
加密等級如下:
- DEK 加密:DEK 會加密 Memorystore for Redis Cluster 中的資料。
- KEK 加密:KEK 會加密 DEK。
Memorystore for Redis Cluster 會使用 KEK 加密 DEK,並使用 DEK 加密儲存的資料。如果您使用 CMEK,可以管理叢集中用來加密 DEK 的 KEK。
下圖顯示叢集如何使用 CMEK 加密資料。上傳至 Google 儲存基礎架構的資料會分成多個區塊,每個區塊都會以專屬的 DEK 加密。Cloud KMS 會提供 KEK 來加密 DEK,而 Google 的儲存基礎架構會將加密的資料區塊和加密的 DEK 分散到整個系統。

下圖顯示 Memorystore for Redis Cluster 如何解密以 CMEK 加密的資料。如要存取這項加密資料,Memorystore for Redis Cluster 會向管理 KEK 的 Cloud KMS 傳送要求,解密 DEK。接著,Cloud KMS 會傳回解密的 DEK,叢集會使用該 DEK 解密儲存的資料。

哪些資料會使用 CMEK 加密?
CMEK 會加密儲存在永久儲存空間中的下列類型客戶資料:
- 備份:您可以透過備份將資料還原至特定時間點,以及匯出並分析資料。備份也適用於災難復原、資料遷移、資料共用和法規遵循情境。
- 持續性:
Memorystore for Redis Cluster 支援兩種持續性:
- RDB 持續性:Redis 資料庫 (RDB) 功能可將資料快照儲存至持久儲存空間,保護您的資料。
- AOF 持久性:這項功能會優先考量資料耐用性。它會將每項寫入指令記錄到名為「僅限附加檔案 (AOF)」的記錄檔,以持久儲存資料。如果發生系統故障或重新啟動,伺服器會依序重播 AOF 檔案指令,以還原資料。
- 與安全性功能相關的中繼資料,例如基本權杖式驗證和傳輸中加密。詳情請參閱「透過基本的權杖型驗證機制確保叢集存取安全」和「關於傳輸中加密」。
CMEK 元件
以下各節說明構成 CMEK 架構的服務帳戶、加密金鑰、金鑰版本和機構政策需求與行為。
服務帳戶
如要建立啟用 CMEK 的叢集,您必須將 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色授予 Memorystore for Redis 叢集服務帳戶,該帳戶的格式如下:
service-PROJECT_NUMBER@cloud-redis.iam.gserviceaccount.com
授予這項權限後,服務帳戶就能向 Cloud KMS 要求金鑰存取權。
金鑰
在 Cloud KMS 中,您需要建立金鑰環,然後建立使用對稱加密演算法的加密編譯金鑰。建立叢集時,您可以選取這個金鑰來加密叢集。您可以為金鑰和叢集建立一個專案,也可以分別建立專案。
CMEK 適用於所有叢集位置。您必須在要建立叢集的區域中,建立金鑰環和金鑰。如果是多區域叢集,您必須將金鑰環和金鑰設為與叢集相同的位置。如果區域或位置不相符,建立叢集的要求就會失敗。
CMEK 會使用下列格式的金鑰資源 ID:
projects/CMEK_ENABLED_PROJECT/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
如要進一步瞭解如何找出現有金鑰的資源 ID,請參閱「取得 Cloud KMS 資源 ID」。
外部金鑰
您可以將外部金鑰納入 CMEK 策略。如要這麼做,請使用 Cloud External Key Manager (Cloud EKM),透過您管理的外部金鑰加密 Google Cloud 中的資料。
使用 Cloud EKM 金鑰時,Google 無法控管外部代管金鑰的供應情形。如果在建立叢集時沒有可用的金鑰,Memorystore for Redis Cluster 就不會建立叢集。此外,如果外部金鑰在您建立叢集後無法使用,Memorystore for Redis Cluster 會停用備份和持續性功能,但一般的記憶體內快取作業仍會繼續處理流量。
如要進一步瞭解使用外部金鑰的注意事項,請參閱注意事項。
金鑰版本
Cloud KMS 會將您用來加密及解密資料的加密編譯金鑰內容,儲存在金鑰版本中。單一金鑰可包含多個金鑰版本。每次輪替金鑰時,系統都會建立金鑰版本。
以下章節說明叢集及其受保護資料在金鑰生命週期事件 (例如停用、銷毀、輪替、啟用或還原金鑰版本) 期間的行為。此外,這些章節也會說明撤銷或替換 Cloud KMS 金鑰存取權的影響,並提供手動重新加密資料的指南。
停用或刪除 CMEK 金鑰版本
您可能需要永久禁止存取以 CMEK 加密的資料,例如在補救資料外洩事件時。如要達到這種高保證資料刪除 (也稱為加密銷毀),請刪除金鑰版本。如要進一步瞭解如何刪除金鑰版本,請參閱「刪除與還原金鑰版本」。
如果您停用或銷毀主要金鑰版本,備份和持續性作業會受到下列條件限制。
備份
刪除主要金鑰版本後,叢集備份會受到下列限制:
- 無法建立隨選或自動備份。不過,如果您啟用舊版金鑰,就能存取使用該版本金鑰建立的備份。
- 您必須啟用或還原主要金鑰版本,才能更新或重新啟用自動備份功能。詳情請參閱「啟用或還原主要 CMEK 金鑰版本」。
保留設定
銷毀主要金鑰版本時,叢集的持續性會受到下列限制:
- 如果您將叢集設為使用持續性,當金鑰版本無法使用時,Memorystore for Redis Cluster 會停用持續性。您不再需要支付持續性費用。
- Memorystore for Redis Cluster 不會使用 CMEK 將新資料排清至永久儲存空間。
- Memorystore for Redis Cluster 無法讀取永久儲存空間中的現有資料。
- 您必須先啟用或還原主要金鑰版本,才能更新或重新啟用持續性。
如果您啟用主要金鑰版本,但停用或銷毀舊金鑰版本,則備份和持續性會受到下列情況影響:
- 您可以建立備份。不過,如果備份是使用已停用或刪除的舊版金鑰加密,您就無法存取備份。
- 如果啟用常駐模式,這項模式就會維持啟用狀態。如果用於持續性的舊版金鑰遭到停用或刪除,Memorystore for Redis Cluster 會執行類似維護作業的更新,並使用主要金鑰版本重新加密資料。
撤銷 Cloud KMS 金鑰的存取權
如果您停用金鑰或移除金鑰的 IAM 權限,撤銷對有效 Cloud KMS 金鑰的存取權,Memorystore for Redis Cluster 會優先確保主要快取的可用性。記憶體內快取作業會繼續提供流量。
不過,備份和持續性功能已停用。Memorystore for Redis Cluster 會立即停止將新資料寫入磁碟,也不會將客戶加密磁碟中的資料讀取至記憶體。
輪替主要 CMEK 金鑰版本
如果您輪替主要金鑰版本並建立新的主要金鑰版本,備份和持續性作業會受到下列條件限制:
- 系統會使用 CMEK 的最新主要金鑰版本加密新備份。
- 現有備份不會重新加密。
- 如要維持節點狀態,節點不會採取任何動作。節點會繼續使用舊版金鑰,直到下一次維護事件為止。
手動重新加密受 CMEK 保護的資料
Memorystore for Redis Cluster 不支援隨選重新加密儲存的資料。 您無法手動觸發程序,使用新的金鑰版本重新加密現有備份或作用中的持續性檔案。不過,您可以使用新版金鑰加密新寫入的資料。
如果您輪替金鑰,且必須強制叢集使用新的金鑰版本,則備份和持續性作業會受到下列條件限制:
備份
您無法重新加密現有備份。如果法規要求所有資料都必須使用最新金鑰加密,請建立使用這個金鑰的備份,然後手動刪除現有備份。您也可以將備份匯出至 Cloud Storage bucket,這樣系統就會使用 Cloud Storage 加密金鑰。
保留設定
如要強制叢集使用新的 Cloud KMS 金鑰,可以在叢集上執行模擬維護作業。完成這項作業後,Memorystore for Redis Cluster 就能使用更新後的主要金鑰版本寫入持續性資料。
取代受保護的 Cloud KMS 金鑰
如果您以其他金鑰或新的主要金鑰版本取代受保護的 Cloud KMS 金鑰,Memorystore for Redis Cluster 只會將這項變更套用至日後的作業。
更換受保護的金鑰會對資源造成以下影響:
- 備份:後續所有備份都會使用新金鑰加密。 現有備份會保留原始金鑰。
- 持續性:下次叢集重新啟動或發生維護事件時,系統會使用新金鑰。
- 主要快取:更換這個金鑰不會造成任何影響。CMEK 不會加密記憶體中的資料,因為這類資料不屬於儲存資料。
啟用或還原主要 CMEK 金鑰版本
如果您啟用或還原主要金鑰版本,備份和持續性作業會受到下列條件限制:
- 您可以再次建立隨選和自動備份。
- Memorystore for Redis Cluster 會執行類似於維護作業的更新,並重新啟用持久性。
組織政策限制
Memorystore for Redis Cluster 支援 CMEK 的機構政策限制。使用這些限制條件,即可對叢集強制執行 CMEK 保護措施,並限制可用於這項保護措施的 Cloud KMS 金鑰。
您可以設定下列組織政策限制:
constraints/gcp.restrictNonCmekServices:使用這項限制,為叢集強制執行 CMEK 保護。如果Memorystore for Redis Cluster API 位於這項限制的Deny服務政策清單中,您就無法建立非 CMEK 保護的叢集。constraints/gcp.restrictCmekCryptoKeyProjects:使用這項限制,限制可使用哪些 Cloud KMS 金鑰進行 CMEK 保護。如果設定這項限制,使用 CMEK 加密的叢集就必須使用允許的專案、資料夾或機構中的金鑰。
由於 Memorystore for Redis Cluster 和 Memorystore for Redis 共用同一個端點 (redis.googleapis.com),您無法針對叢集強制執行 CMEK,與 Memorystore for Redis 執行個體無關。
如要進一步瞭解 Google 為 Memorystore for Redis Cluster 管理的 CMEK 相關機構政策限制,請參閱「機構政策限制」。
定價
Memorystore for Redis Cluster 會對啟用 CMEK 的叢集計費,與其他叢集相同,不會產生額外費用。詳情請參閱 Memorystore for Redis Cluster 定價。
您可以使用 Cloud KMS API 管理 CMEK。 使用 CMEK 建立叢集時,Memorystore 會定期使用金鑰加密資料。
當 Memorystore for Redis Cluster 使用金鑰時,系統會透過 Cloud KMS 向您收取金鑰費用,以及加密和解密作業的費用。詳情請參閱 Cloud KMS 定價。
限制
將 CMEK 與 Memorystore for Redis Cluster 搭配使用時,有以下限制:
- 您無法在現有叢集上啟用 CMEK。
- 金鑰、金鑰環和叢集必須位於相同區域。
- 您必須使用金鑰的對稱式加密演算法。
- Cloud KMS 加密和解密作業的速率會受到配額限制。
後續步驟
- 進一步瞭解 CMEK。
- 瞭解如何使用 CMEK 提升資料安全性。
- 進一步瞭解備份。
- 進一步瞭解持續性。