關於客戶自行管理的加密金鑰 (CMEK)

本文說明如何為 Memorystore for Redis 執行個體,在 Cloud Key Management Service (Cloud KMS) 中使用客戶自行管理的加密金鑰 (CMEK)。這份文件也說明永久儲存空間中加密的資料,以及執行個體在金鑰生命週期事件期間的行為。

CMEK 可讓您控管用於保護所儲存資料的加密金鑰。在 Cloud KMS 中管理自己的金鑰,可進一步控管金鑰存取權、輪替和使用情形,有助於滿足嚴格的法規遵循和監管規定。

導入 CMEK 可為備份和持續性檔案等永久資料提供額外一層安全防護,並進一步控管這些資料。您只能在新執行個體上啟用 CMEK。您無法將 CMEK 套用至現有執行個體。

哪些人適合使用 CMEK?

CMEK 適用於擁有機密或管制資料,且需要控管自身加密金鑰的機構。如要進一步瞭解是否要使用 CMEK 加密這項資料,請參閱「決定是否要使用 CMEK」。

客戶自行管理的加密金鑰

您可以使用 CMEK,透過加密編譯金鑰保護執行個體中儲存的資料。為加密這項資料,Memorystore for Redis 會使用 Google 管理的資料加密金鑰 (DEK) 和客戶管理的金鑰加密金鑰 (KEK)。

加密等級如下:

  • DEK 加密:DEK 會加密 Memorystore for Redis 中的資料。
  • KEK 加密:KEK 會加密 DEK。

Memorystore for Redis 會使用 KEK 加密 DEK,並使用 DEK 加密儲存的資料。如果您使用 CMEK,就能管理執行個體中用於加密 DEK 的 KEK。

下圖說明執行個體如何使用 CMEK 加密資料。上傳至 Google 儲存基礎架構的資料會分成多個區塊,每個區塊都會以專屬的 DEK 加密。Cloud KMS 會提供 KEK 來加密 DEK,而 Google 的儲存基礎架構會將加密的資料區塊和加密的 DEK 分散到整個系統。

資料會上傳至 Google 的儲存基礎架構,並分成多個區塊。每個區塊都會以專屬的 DEK 加密。然後使用從 Cloud KMS 擷取的 KEK 加密 DEK。加密區塊和加密 DEK 會分散在儲存基礎架構中。

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

以 DEK 加密資料區塊,並與加密的 DEK 一併儲存。系統會將解密 DEK 的要求傳送至 Cloud KMS,該服務會儲存 KEK。Cloud KMS 會傳回已解密的 DEK。

Memorystore 何時會與 CMEK 互動?

作業 說明
建立執行個體 建立執行個體時,請將其設定為使用 CMEK。
執行個體更新 更新已啟用 CMEK 的執行個體時,Memorystore for Redis 會檢查 CMEK。

哪些資料會使用 CMEK 加密?

CMEK 會加密下列類型的資料:

  • 儲存在永久儲存空間的客戶資料。
  • 與安全防護功能相關的中繼資料,例如 AUTH傳輸中加密

關於服務帳戶

使用 CMEK 建立執行個體時,您必須將 cloudkms.cryptoKeyEncrypterDecrypter 角色授予 Memorystore for Redis 服務帳戶,該帳戶的格式如下:

  service-PROJECT_NUMBER@cloud-redis.iam.gserviceaccount.com
  

授予這項權限後,服務帳戶就能向 Cloud KMS 要求金鑰存取權。

如需將這項權限授予服務帳戶的操作說明,請參閱授予 Memorystore for Redis 服務帳戶金鑰存取權

關於金鑰

在 Cloud KMS 中,您需要建立金鑰環,並使用對稱式加密演算法建立加密編譯金鑰。建立 Memorystore for Redis 執行個體時,請選取這個金鑰來加密執行個體。您可以為金鑰和執行個體建立一個專案,也可以分別建立專案。

所有 Memorystore for Redis 執行個體位置都提供 CMEK。您必須在要建立執行個體的相同區域中,建立金鑰環和金鑰。多區域或全域金鑰不適用。如果區域或位置不符,建立執行個體的要求就會失敗。

CMEK 會使用下列格式的金鑰資源 ID:

projects/CMEK_ENABLED_PROJECT/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

如果 Memorystore for Redis 無法存取任何正在使用的金鑰版本 (例如您停用所有金鑰版本),Memorystore for Redis 就會關閉執行個體。在 Google Cloud 控制台中,暫停的執行個體會在「Instances」(執行個體) 頁面上顯示紅色驚嘆號工具提示。將滑鼠游標懸停在工具提示上,就會顯示 No state 狀態。金鑰可供存取後,Memorystore for Redis 會自動恢復執行個體。

外部金鑰

您可以使用 Cloud External Key Manager (Cloud EKM),透過您管理的外部金鑰加密Google Cloud 中的資料。

使用 Cloud EKM 金鑰時,Google 無法控管外部代管金鑰的供應情形。如果在建立執行個體時無法使用金鑰,系統就不會建立執行個體。

如要進一步瞭解使用外部金鑰時的注意事項,請參閱 Cloud External Key Manager

如何永久禁止存取以 CMEK 加密的資料?

您可能需要永久禁止存取以 CMEK 加密的資料。如要這麼做,請刪除金鑰版本。如要進一步瞭解如何刪除金鑰版本,請參閱「刪除與還原金鑰版本」一文。

如何匯入或匯出已啟用 CMEK 的執行個體資料?

如要在匯出資料時,讓資料保持以 CMEK 加密,請先在 Cloud Storage 值區設定 CMEK,再將資料匯出至該值區。

如果資料儲存在已啟用 CMEK 的執行個體上,則將資料匯入新執行個體時,沒有特殊規定或限制。

CMEK 金鑰版本的行為

本節說明停用、刪除、輪替、啟用及還原金鑰版本時會發生什麼情況。

停用或刪除 CMEK 金鑰版本

如要確保執行個體無法存取任何資料,請停用主要金鑰版本。這會關閉執行個體。此外,如果停用或毀損任何正在使用的 CMEK,Memorystore for Redis 就會關閉執行個體。包括執行個體使用的任何舊金鑰版本。

如要查看 Memorystore for Redis 是否暫停執行個體,請使用下列任一介面:

  • Google Cloud 控制台:在「Instances」(執行個體) 頁面中,執行個體旁會顯示紅色驚嘆號工具提示。將滑鼠游標懸停在工具提示上,就會顯示 No state 狀態。
  • gcloud CLI:使用 gcloud redis instances describe 指令。確認執行個體中繼資料中沒有 state: READYstate: REPAIRING 或任何其他狀態。

手動重新加密受 CMEK 保護的資料

Memorystore for Redis 不支援隨選重新包裝現有靜態資料。您無法手動觸發程序,使用新的金鑰版本重新加密現有備份或作用中的持續性檔案。不過,您可以使用新金鑰版本加密新寫入的資料。

更換受保護的 KMS 金鑰

如果您以其他 KMS 金鑰或新的主要金鑰版本取代受保護的 KMS 金鑰,Memorystore for Redis 只會將這項變更套用至日後的作業。

取代受保護的 KMS 金鑰會對資源造成以下影響:

  • 備份:Memorystore for Redis 會將備份匯出至 Cloud Storage 儲存空間,Cloud Storage 加密金鑰會控管用於加密資料的金鑰。
  • 持續性:下次執行個體重新啟動或發生維護事件時,系統會使用新的 KMS 金鑰。
  • 主要快取:更換這個金鑰不會造成任何影響。CMEK 不會加密記憶體中的資料,因為這類資料不屬於靜態資料。

啟用或還原主要 CMEK 金鑰版本

如果啟用或還原主要金鑰版本,Memorystore for Redis 就不會再隱藏執行個體。

組織政策限制

Memorystore for Redis 支援 CMEK 的機構政策限制。使用這些限制條件,即可對執行個體強制執行 CMEK 保護措施,並限制可用於這項保護措施的 Cloud KMS 金鑰。

您可以設定下列組織政策限制:

  • constraints/gcp.restrictNonCmekServices:使用這項限制,為執行個體強制執行 CMEK 保護措施。如果 Memorystore for Redis API 位於這項限制的 Deny 政策服務清單中,您就無法建立未受 CMEK 保護的執行個體。
  • constraints/gcp.restrictCmekCryptoKeyProjects:使用這項限制,限制可使用哪些 Cloud KMS 金鑰進行 CMEK 保護。如果您設定這項限制,使用 CMEK 加密的執行個體就必須使用允許的專案、資料夾或機構中的金鑰。

由於 Memorystore for Redis 和 Memorystore for Redis Cluster 共用同一個端點 (redis.googleapis.com),因此您無法在 Memorystore for Redis Cluster 中,針對執行個體獨立強制執行 CMEK。

如要進一步瞭解 Google 為 Memorystore for Redis 管理的 CMEK 相關機構政策限制,請參閱「機構政策限制」。

定價

Memorystore for Redis 會對啟用 CMEK 的執行個體收費,與其他執行個體相同,不會產生額外費用。詳情請參閱 Memorystore for Redis 定價

您可以使用 Cloud KMS API 管理 CMEK。 使用 CMEK 建立執行個體時,Memorystore 會定期使用金鑰加密資料。

當 Memorystore for Redis 使用金鑰時,系統會透過 Cloud KMS 向您收取金鑰費用,以及加密和解密作業的費用。詳情請參閱 Cloud KMS 定價

限制

搭配使用客戶管理加密金鑰與 Memorystore for Redis 時,有以下限制:

  • 您無法在現有執行個體上啟用 CMEK。
  • 金鑰、金鑰環和執行個體必須位於相同區域。
  • 您必須使用金鑰的對稱式加密演算法。
  • Cloud KMS 加密和解密作業的速率會受到配額限制。

後續步驟