本頁說明如何為 Google Cloud Managed Service for Apache Kafka 叢集設定客戶自行管理的加密金鑰 (CMEK)。
訊息加密總覽
根據預設,Managed Service for Apache Kafka 會使用 Google-owned and Google-managed encryption keys加密 靜態訊息。您不需要另外進行設定。
如要進一步控管用於保護 Managed Service for Apache Kafka 靜態資料的加密金鑰,您可以在建立叢集時設定 CMEK。CMEK 是您擁有的加密金鑰。這些金鑰由 Cloud Key Management Service (Cloud KMS) 管理及儲存。使用 CMEK 設定叢集時,服務會自動使用該金鑰加密所有叢集靜態資料。使用 CMEK 可能會產生額外費用,具體金額視用量模式而定。
與 Managed Service for Apache Kafka 叢集相關聯的 CMEK 是金鑰加密金鑰 (KEK)。KEK 用於加密資料加密金鑰 (DEK)。接著,系統會使用 DEK 讀取和寫入永久磁碟上處於閒置狀態的資料,這些磁碟會附加至代理程式,以及 Cloud Storage 中分層儲存空間的資料。
由於 Managed Service for Apache Kafka 資源屬於區域資源,建議您在與 Kafka 叢集相同的區域中建立 CMEK。
必要角色和權限
代管 Kafka 服務帳戶必須有權使用 CMEK 加密及解密資料。
在 Cloud KMS 金鑰上,將 Cloud KMS 加密編譯金鑰加密者/解密者 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色授予服務帳戶:
gcloud kms keys add-iam-policy-binding KEY \
--keyring=KEY_RING \
--location=LOCATION \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
更改下列內容:
KEY:金鑰名稱。
KEY_RING:金鑰所在的金鑰環名稱。
LOCATION:金鑰環的 Cloud KMS 位置。
PROJECT_NUMBER:包含 Managed Service for Apache Kafka 叢集的Google Cloud 專案專案編號。
如要進一步瞭解如何授予 Cloud KMS 金鑰角色,請參閱「授予資源角色」。
輪替金鑰
您無法變更與叢集相關聯的鍵。您可以建立新的金鑰版本,並將其設為金鑰的主要版本,藉此輪替金鑰。
如果是連結至代理人的磁碟,新的 KEK 必須在代理人重新啟動後才會生效。您可以更新叢集的容量設定,強制執行代理程式的滾動重新啟動。例如,您可以變更叢集 RAM 大小。
所有新的分區區隔檔案都會使用新的主要金鑰版本,寫入分層儲存空間。選取新的主要金鑰版本後,可能會有幾分鐘的延遲。
稽核記錄
當金鑰啟用、停用,或由 Managed Service for Apache Kafka 用於加密及解密訊息時,Cloud KMS 會產生稽核記錄。這有助於偵錯發布或放送資格問題。
Cloud KMS 金鑰 ID 會附加至 Managed Service for Apache Kafka 叢集資源的稽核記錄。Managed Service for Apache Kafka 不會在稽核記錄中納入任何其他 Cloud KMS 相關資訊。
停用並重新啟用 CMEK
停用 CMEK 的方法有兩種。選擇下列其中一種做法:
停用與叢集相關聯的 Cloud KMS 金鑰。這個方法會影響與該金鑰相關聯的所有 Cloud 資源。
使用 Identity and Access Management (IAM),從 Managed Service for Apache Kafka 服務代理人 (
service-${PROJECT_NUMBER}@gcp-sa-managedkafka.iam.gserviceaccount.com) 撤銷 CryptoKey Encrypter/Decrypter 角色。這個方法會影響專案中的所有 Managed Service for Apache Kafka 叢集,以及使用 CMEK 加密的訊息。
雖然這兩項作業都不會立即撤銷存取權,但 IAM 變更通常會更快傳播。
詳情請參閱「Cloud KMS 資源一致性」和「存取權變更傳播」。
如果 Managed Service for Apache Kafka 無法存取 Cloud KMS 金鑰,訊息發布和傳送作業就會失敗並顯示錯誤。如要恢復傳送及發布作業,請還原 Cloud KMS 金鑰的存取權。
Managed Service for Apache Kafka 能夠存取 Cloud KMS 金鑰後,您就能在 12 小時內發布訊息,訊息傳送也會在 2 小時內恢復。
雖然 Cloud KMS 服務中斷不到一分鐘,不太可能大幅中斷發布和傳送作業,但如果 Cloud KMS 服務長時間無法使用,效果就等同於撤銷金鑰。
限制
您無法變更與叢集相關聯的鍵。不過,您可以建立新版本來輪替金鑰。
如果停用非主要金鑰版本,本機磁碟仍會繼續運作,不會有任何變更。每個代理人在重新啟動時,都會下載新的 KEK。不過,Cloud Storage 無法存取使用原始版本加密的主題區隔檔案,因此可能無法從這些區隔檔案取用訊息。您可能無法使用舊資料。
如果停用主要金鑰版本,中介服務就無法將新的區隔檔案寫入分層儲存空間,這會增加本機磁碟使用率。此外,代理程式也無法重新啟動。您可以主動觸發重新啟動,也可以隨時由服務啟動叢集更新。
如果從 Managed Service for Apache Kafka 服務代理程式移除金鑰存取權,行為與停用主要金鑰和非主要金鑰版本時類似。
如果刪除金鑰,系統會排定叢集關機時間,且無法復原。
您無法要求重新加密儲存的靜態資料。CMEK 會做為 KEK 使用,但重新加密需要變更資料加密金鑰。