本文上次更新於 2025 年 2 月,內容反映截至撰文時的情況。我們會持續改善客戶保護措施,因此 Google 的安全性政策和系統未來可能會改變。
客戶提供的加密金鑰 (CSEK) 是 Cloud Storage 和 Compute Engine 的功能。如果您提供自己的加密金鑰,Google 會使用您的金鑰來保護 Google 所產生用於加密和解密資料的金鑰。
本文說明 CSEK 的運作方式,以及Google Cloud如何保護 CSEK。
CSEK 如何搭配 Cloud Storage 使用
在 Cloud Storage 中使用 CSEK 時,下列金鑰會納入包裝程序:
- 原始 CSEK:您必須在 API 呼叫中提供原始 CSEK。原始 CSEK 金鑰會從 Google Front End (GFE) 傳輸到儲存系統的記憶體。並在 Cloud Storage 中做為資料的金鑰加密金鑰 (KEK) 使用。
- 包裝的區塊金鑰:原始 CSEK 用於包裝包裝的區塊金鑰。
- 原始區塊金鑰:已包裝的區塊金鑰會包裝記憶體中的原始區塊金鑰。 原始區塊金鑰是用來加密儲存在儲存系統中的資料區塊,並在 Cloud Storage 中做為資料的資料加密金鑰 (DEK) 使用。
下圖顯示金鑰包裝程序。
下表說明這些鍵。
鍵 | 儲存位置 | 用途 | 可存取的期限 |
---|---|---|---|
原始 CSEK |
儲存系統記憶體 |
保護已包裝的區塊金鑰。 |
到客戶要求的作業 (例如 |
已包裝的區塊金鑰 |
儲存裝置 |
保護靜態儲存的原始區塊金鑰。 |
到 Storage 物件遭刪除為止。 |
原始區塊金鑰 |
儲存裝置的記憶體 |
保護您讀取或寫入磁碟的資料。 |
到客戶要求的作業完成為止 |
CSEK 與 Compute Engine 的搭配運作方式
在 Compute Engine 中使用 CSEK 時,下列金鑰會納入包裝程序:
- 原始 CSEK:您必須在 API 呼叫中提供原始 CSEK 或 RSA 包裝金鑰。CSEK 會從 GFE 傳輸到內部叢集管理員的前端。叢集管理員是在 Google 的實際工作環境基礎架構中,以叢集管理員身分執行的一組程序,負責實作用於管理磁碟和 VM 執行個體等 Compute Engine 資源的邏輯。
- Google 擁有的非對稱包裝金鑰:如果以 RSA 包裝的金鑰做為 CSEK,系統會使用 Google 擁有的非對稱包裝金鑰將其解除包裝。
CSEK 衍生金鑰:原始 CSEK 會與永久磁碟的密碼編譯 Nonce 結合,產生 CSEK 衍生金鑰。這組金鑰會在 Compute Engine 中做為資料的 KEK 使用。在叢集管理員前端,CSEK 和 CSEK 衍生金鑰都只會保存在叢集管理員記憶體裡。啟用自動重新啟動功能時,叢集管理員記憶體會使用 CSEK 衍生金鑰,將儲存在叢集管理員執行個體中繼資料和執行個體管理員中繼資料內的已包裝磁碟金鑰解除包裝 (這類中繼資料與執行個體中繼資料不同)。
原始磁碟金鑰:CSEK 衍生金鑰是用來在建立磁碟時包裝原始磁碟金鑰,以及在存取磁碟時將原始磁碟金鑰解除包裝。系統會發生下列事件:
- 如果已啟用自動重新啟動功能,叢集管理員會在 VM 的效期內保留已包裝的磁碟金鑰,以便在當機時重新啟動 VM。已包裝的磁碟金鑰是以 Google 擁有的對稱包裝金鑰包裝,包裝金鑰的權限僅供 Compute Engine 使用。如果自動重新啟動功能已關閉,系統會使用「Google Cloud」一節所述的刪除程序,刪除已包裝的磁碟金鑰。
- 如果已啟用即時遷移功能,原始磁碟金鑰可直接從舊的 VM 執行個體記憶體傳送到新的 VM 執行個體記憶體,而不必由執行個體管理員或叢集管理員處理金鑰複本。
原始磁碟金鑰會傳送至叢集管理員 (CM)、執行個體管理員和 VM 的記憶體。這類金鑰會在 Compute Engine 中做為資料的 DEK 使用。
下圖顯示金鑰包裝的運作方式。
鍵 | 保管位置 | 用途 | 可存取的期限 |
---|---|---|---|
原始 CSEK |
叢集管理員前端 |
加入密碼編譯 Nonce 來產生 CSEK 衍生金鑰。 |
到客戶要求的作業 (例如 |
以公開金鑰包裝的 CSEK (如果使用了 RSA 金鑰包裝) |
叢集管理員前端 |
先以 Google 擁有的非對稱金鑰解除包裝,再產生 CSEK 衍生金鑰。 |
到客戶要求的作業完成為止。 |
Google 擁有的非對稱金鑰 (如果使用了 RSA 金鑰包裝) |
Keystore |
將 RSA 包裝金鑰解除包裝。 |
無限期。 |
CSEK 衍生金鑰 |
叢集管理員前端 |
包裝磁碟金鑰。 |
到金鑰包裝或解除包裝作業完成為止。 |
Google 包裝的磁碟金鑰 (使用自動重新啟動功能時) |
叢集管理員前端 |
為連接至運作中執行個體的磁碟保護靜態儲存的磁碟金鑰。 在 VM 記憶體遺失時 (例如主機當機) 重新啟動執行個體。 |
到 VM 停止或遭刪除為止。 |
原始磁碟金鑰 |
虛擬機器監視器 (VMM) 記憶體、叢集管理員記憶體 |
在磁碟中讀取/寫入資料、即時遷移 VM,以及執行直接升級 |
到 VM 停止或遭刪除為止 |
Google 包裝的 CSEK 衍生金鑰 |
叢集管理員資料庫 |
作業失敗時重新啟動作業。 |
到客戶要求的作業完成為止 |
客戶提供之加密金鑰 (CSEK) 的保護方式
本節說明客戶提供的加密金鑰在磁碟中、在 Google Cloud 基礎架構中移動時,以及在記憶體中的保護方式。
原始 CSEK、CSEK 衍生金鑰和原始磁碟金鑰一律不會在未加密的情況下儲存在磁碟中。原始磁碟金鑰在儲存前會先以 CSEK 衍生金鑰包裝,如果使用了自動重新啟動功能則會先以 Google 金鑰包裝。Google 不會將您的金鑰永久儲存在自家伺服器中。
每項服務都會使用基礎架構提供的存取權管理功能,明確指定要允許哪些服務和自己進行通訊。該服務可以設定許可清單,在當中加入允許的服務帳戶身分,這樣 Google Cloud基礎架構就會自動強制執行這項存取限制條件。詳情請參閱服務身分、完整性和隔離功能。
這套基礎架構也為網路上的 RPC 資料提供密碼編譯隱私權及完整性。服務可以為每個基礎架構 RPC 分別設定所需的密碼編譯保護等級,且客戶提供的加密金鑰也會啟用這些設定。詳情請參閱「工作負載間通訊加密」。
金鑰內容存放在各種系統的記憶體中,包括叢集管理員記憶體和 VMM 記憶體。這些系統記憶體只有在例外情況下 (例如發生事件) 才可存取,並且是由存取控制清單 (ACL) 管理。這些系統已停用記憶體傾印,或是會在記憶體傾印中自動掃描金鑰內容。如要瞭解這些工作的保護措施,請參閱「Google 如何保護生產服務」。