本頁面說明客戶管理的加密金鑰 (CMEK) 如何與 Memorystore for Redis 搭配運作。如要立即使用這項功能,請參閱「使用客戶管理的加密金鑰 (CMEK)」。
是否適合使用 CMEK?
客戶自行管理的加密金鑰適用於擁有機密或受管制資料的機構,這些機構需要自行管理加密金鑰。
Google 管理的加密技術與客戶管理的加密技術
CMEK 功能可讓您將自有的加密編譯金鑰用於 Memorystore for Redis 中的靜態資料。新增客戶自行管理的加密金鑰後,Memorystore 會在每次發出 API 呼叫時使用您的金鑰存取資料。
Memorystore 會使用 Google 代管的資料加密金鑰 (DEK) 和金鑰加密金鑰 (KEK) 來加密 Memorystore for Redis。加密層級分為兩種:
- DEK 會加密資料。
- KEK 會將 DEK 加密。
Memorystore 例項會在 PD 上儲存加密的 DEK 和加密資料,而 Google 會管理 Google KEK。使用客戶自行管理的加密金鑰,您可以建立包裝 Google KEK 的金鑰。您可以使用客戶管理的加密金鑰建立、撤銷及刪除 KEK。
客戶自行管理的加密金鑰可透過 Cloud Key Management Service API 進行管理。
下圖顯示使用預設 Google 加密功能和客戶管理的加密金鑰時,Memorystore 執行個體中的靜態資料加密功能如何運作。
不使用 CMEK
使用 CMEK
解密使用客戶代管加密金鑰封裝的資料時,Memorystore 會使用 KEK 解密 DEK,並使用未加密的 DEK 解密靜態資料。
Memorystore 何時會與 CMEK 金鑰互動?
作業 | 說明 |
---|---|
建立執行個體 | 在建立執行個體時,您可以將執行個體設為使用客戶自行管理的加密金鑰。 |
執行個體更新 | 在啟用 CMEK 的執行個體更新期間,Memorystore 會檢查 CMEK 金鑰。 |
使用 CMEK 加密哪些資料?
CMEK 會加密下列類型的資料:
關於服務帳戶
使用 CMEK 建立執行個體時,必須將 cloudkms.cryptoKeyEncrypterDecrypter 角色授予 Memorystore 服務帳戶,其格式如下:
service-[PROJECT_NUMBER]@cloud-redis.iam.gserviceaccount.com
授予這項權限後,服務帳戶就能向 Cloud KMS 要求金鑰存取權。
如需服務帳戶的權限授予操作說明,請參閱「授予服務帳戶金鑰存取權」。
關於鍵
在 Cloud KMS 中,您必須使用採用對稱加密/解密演算法的加密編譯金鑰建立密鑰圈。建立新的 Memorystore 執行個體時,請選取這個金鑰來加密執行個體。您可以為金鑰和 Memorystore 例項建立一個專案,也可以為每個項目建立不同的專案。
CMEK 可用於所有 Memorystore 執行個體位置。金鑰和密鑰圈區域必須與 Memorystore for Redis 執行個體位於相同的地區。多區域或全域金鑰不適用。如果區域不相符,建立 Memorystore 執行個體的要求就會失敗。
Memorystore 的 CMEK 與 Cloud External Key Manager (Cloud EKM) 相容。
客戶自行管理的加密金鑰使用以下格式:
projects/[CMEK_ENABLED_PROJECT]/locations/[REGION]/keyRings/[RING_NAME]/cryptoKeys/[KEYNAME]
如果 Memorystore 無法存取目前使用的任何金鑰版本 (例如您停用金鑰版本),Memorystore 會立即關閉執行個體。在 Google Cloud 控制台中,已暫停的執行個體會在「Instances」頁面上顯示紅色驚嘆號工具提示。將滑鼠游標懸停在工具提示上時,畫面上會顯示「No state」。當可再次存取金鑰時,Memorystore 會自動恢復執行個體。
如何讓 CMEK 加密資料永久無法存取?
在某些情況下,您可能會想要永久銷毀使用 CMEK 加密的資料。如要執行這項操作,您必須銷毀客戶管理的加密金鑰版本。您無法銷毀金鑰環或金鑰,但可以銷毀金鑰的金鑰版本。
如何在啟用 CMEK 的執行個體中匯出及匯入資料?
如果您希望在匯入或匯出期間,資料仍能透過客戶管理的金鑰加密,請務必先在 Cloud Storage 值區中設定客戶管理的加密金鑰,再將資料匯出至該值區。
如果資料先前儲存在啟用 CMK 的 Memorystore 例項中,則匯入新 Memorystore 例項的資料不受任何特殊要求或限制。
刪除/停用 CMEK 金鑰版本的行為
如要確保沒有人能存取執行個體的資料,您可以停用客戶管理加密金鑰的主鍵版本。這樣一來,系統就能立即關閉執行個體。此外,如果任何正在使用的客戶管理加密金鑰遭到停用/銷毀,Memorystore 會立即關閉執行個體。這包括 Memorystore 執行個體仍在使用的任何舊金鑰版本。您可以使用 gcloud 或 Google Cloud 主控台,查看執行個體是否已遭到停用:
在 Google Cloud 控制台中,如果執行個體遭到停用,您會在「Memorystore for Redis」執行個體頁面中,看到執行個體旁的紅色提示工具提示通知。當滑鼠游標懸停在工具提示上時,工具提示會顯示「No state」。
就 gcloud 而言,如果您執行 gcloud redis instances describe
,但在執行個體中繼資料中未看到 state: READY
、state: REPAIRING
或任何其他狀態,表示執行個體已遭停用。
重新啟用/還原正在使用的 CMEK 金鑰版本
重新啟用/還原使用中的 CMEK 金鑰版本後,執行個體就會解除隱藏狀態。
限制
下列限制適用於在 Memorystore 中使用客戶自行管理的加密金鑰:
- 您無法在現有的 Memorystore 執行個體上啟用客戶管理的加密金鑰。
- 金鑰、鑰匙圈和 Memorystore 執行個體的地區必須相同。
- 您必須為金鑰使用對稱式加密/解密演算法。
- Cloud KMS 加密和解密頻率會受到配額的限制。
CMEK 組織政策
Memorystore for Redis 支援機構政策限制,可用於 CMEK 保護機制。
政策可限制用於 CMEK 保護措施的 Cloud KMS 金鑰。
如果 Memorystore for Redis API 位於限制條件
constraints/gcp.restrictNonCmekServices
下的服務Deny
政策清單中,則會在未受 CMEK 保護的執行個體中建立 Memorystore for Redis 失敗。設定
constraints/gcp.restrictCmekCryptoKeyProjects
後,Memorystore for Redis 會建立受 CMEK 保護的執行個體,這些執行個體會使用來自允許專案、資料夾或機構的金鑰加密。
如要進一步瞭解如何設定 CMEK 組織政策,請參閱「CMEK 組織政策」。