關於客戶自行管理的加密金鑰 (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。

Redis 適用的 Memorystore 會使用 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 的要求傳送至 Cloud KMS,後者會儲存 KEK。Cloud KMS 會傳回解密的 DEK。

哪些資料會使用 CMEK 加密?

CMEK 會加密儲存在永久儲存空間中的下列客戶資料類型:

  • 備份:您可以透過備份將資料還原至特定時間點,以及匯出並分析資料。備份也適用於災難復原、資料遷移、資料共用和法規遵循情境。
  • 持續性: Memorystore for Redis 支援 Redis 資料庫 (RDB) 持續性,可讓您將資料快照儲存至持久儲存空間。
  • 與安全防護功能相關的中繼資料,例如 AUTH 和傳輸中加密。 詳情請參閱「關於 Redis AUTH」和「關於傳輸中資料加密機制」。

CMEK 元件

以下各節將說明構成 CMEK 架構的服務帳戶、加密金鑰、金鑰版本和機構政策規定與行為。

服務帳戶

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

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

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

金鑰

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

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

對於金鑰的資源 ID,CMEK 使用下列格式:

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

如要進一步瞭解如何找出現有金鑰的資源 ID,請參閱「取得 Cloud KMS 資源 ID」。

在 Google Cloud 控制台中,暫停的執行個體會在「Instances」(執行個體) 頁面上顯示紅色驚嘆號工具提示。將滑鼠游標懸停在工具提示上,就會顯示 No state 狀態。金鑰可供存取後,Memorystore for Redis 會自動恢復執行個體。

外部金鑰

您可以將外部金鑰納入 CMEK 策略。如要這麼做,請使用 Cloud External Key Manager (Cloud EKM),透過您管理的外部金鑰加密 Google Cloud 中的資料。

使用 Cloud EKM 金鑰時,Google 無法控管外部代管金鑰的供應情形。如果您在建立執行個體時沒有金鑰,Memorystore for Redis 就不會建立執行個體。此外,如果您在建立執行個體後,外部金鑰在任何時間點無法使用,Memorystore for Redis 就會暫停執行個體,直到存取權恢復為止。

如要進一步瞭解使用外部金鑰的注意事項,請參閱「注意事項」。

金鑰版本

Cloud KMS 會將您用來加密及解密資料的加密編譯金鑰實質儲存在金鑰版本中。單一金鑰可包含多個金鑰版本。每次輪替金鑰時,系統都會建立金鑰版本。

以下章節說明執行個體及其受保護資料在重要生命週期事件 (例如停用、銷毀、啟用或還原金鑰版本) 期間的行為。這些章節也會說明更換 Cloud KMS 金鑰的影響、提供手動重新加密資料的指引,以及詳細說明如何匯入或匯出已啟用 CMEK 的執行個體資料。

停用或刪除 CMEK 金鑰版本

您可能需要永久禁止存取以 CMEK 加密的資料,例如補救資料外洩事件時。如要達到這種高保障資料銷毀 (也稱為加密銷毀),請銷毀金鑰版本。如要進一步瞭解如何刪除金鑰版本,請參閱「刪除與還原金鑰版本」。

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

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

  • Google Cloud 控制台:在「Instances」(執行個體) 頁面上,執行個體旁會顯示紅色驚嘆號工具提示。將游標懸停在工具提示上時,會顯示「沒有狀態」狀態。
  • gcloud CLI:使用 gcloud redis instances describe 指令。檢查 state 欄位;已停權的執行個體不會顯示 READY 或 REPAIRING 狀態。

取代受保護的 Cloud KMS 金鑰

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

更換受保護的金鑰會對資源造成以下影響:

  • 備份:Memorystore for Redis 會將備份匯出至 Cloud Storage。 因此,匯出資料的加密方式是由目的地 bucket 的加密設定 (而非執行個體的 CMEK) 控制。
  • 持續性:下次執行個體重新啟動或發生維護事件時,系統會使用新金鑰。
  • 主要快取:更換這個金鑰不會有任何影響。CMEK 不會加密記憶體中的資料,因為這類資料不屬於靜態資料。

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

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

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

如要確保匯出的資料仍受 CMEK 保護,請先在目標 Cloud Storage bucket 上設定 CMEK,再將資料匯出至該 bucket。如果資料已儲存在啟用 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:使用這項限制,限制可供 CMEK 保護措施使用的 Cloud KMS 金鑰。如果您設定這項限制,使用 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 定價」一文。

限制

使用 CMEK 搭配 Memorystore for Redis 時,須遵守下列限制:

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

後續步驟