簡介
Google 規模的資料儲存與加密作業,需要針對加密的資料將集中式加密編譯金鑰管理服務與多層金鑰搭配使用。「信封式加密」就是這樣一種多層金鑰,會使用一個金鑰加密另一個金鑰。
您可以在「應用程式層」(負責向使用者顯示資料) 與「儲存空間層」(提供資料實體儲存空間) 加密資料。
根據預設,在儲存空間層, Google Cloud 會使用信封式加密加密靜態儲存的客戶內容,並使用 Google 的內部金鑰管理服務做為中央金鑰庫。如果您要自行儲存及加密資料,可以在應用程式層使用 Cloud Key Management Service 做為中央金鑰庫,而這正是本主題的重點。
Cloud KMS 會將金鑰儲存在「金鑰階層」中以方便使用,並由 Identity and Access Management 管理該金鑰階層中資源的存取權。以下顯示 Cloud KMS 金鑰階層的主要層級:
如要進一步瞭解金鑰階層,請參閱物件階層一文。
資料加密金鑰
用來加密資料本身的金鑰,稱為「資料加密金鑰」(DEK)。
以下是管理 DEK 的最佳做法:
- 在本機產生 DEK。
- 在儲存時,請務必確保靜態加密 DEK。
- 為方面存取,請將 DEK 儲存在其加密資料的附近位置。
- 在您每次寫入資料時產生新的 DEK。這表示您不需要輪替 DEK。
- 請勿使用相同的 DEK 加密兩個不同使用者的資料。
- 在 Galois 計數器模式 (GCM) 下,使用諸如 256 位元進階加密標準 (AES) 的高強度演算法。
金鑰加密金鑰
DEK 由「金鑰加密金鑰」(KEK) 加密 (也稱為「包裝」)。使用一個金鑰加密另一個金鑰的程序稱為「信封式加密」。
以下是管理 KEK 的最佳做法:
集中儲存 KEK。
根據用途設定加密的 DEK 精細程度。例如,請考慮需要多個 DEK 加密工作負載資料區塊的工作負載。您可以使用單一 KEK 包裝負責該工作負載加密的所有 DEK。
定期及在可疑事件之後輪替金鑰。詳情請參閱金鑰輪替一文。
平衡 DEK 與 KEK
若您擁有的 KEK 數量少於 DEK,且使用集中式金鑰管理服務,就能更輕鬆地管理一定規模的資料儲存與加密作業。集中式金鑰服務也可讓您更輕鬆地稽核及限制資料存取權。
根據您的情況以及要加密的資料量,您可以選擇使用類似模型。單一 KEK 可用來保護許多 DEK:這個模型允許每個個別資料物件都擁有自己的 DEK,而不會大量增加儲存在集中式金鑰管理服務中的資料量。
Cloud Key Management Service 旨在管理 KEK,因此 Encrypt
與 Decrypt
函式的資料輸入大小上限為 64 KiB。但是,如果您知道的資料不會達到這一限制,可以使用 Cloud KMS 直接加密與解密資料。
如何使用信封式加密來加密資料
加密資料的程序包括在本機產生 DEK、使用 DEK 加密資料、使用 KEK 包裝 DEK,然後儲存加密的資料與經過包裝的 DEK。KEK 一律會留在 Cloud KMS 中。
如要使用信封式加密來加密資料,請執行下列操作:
在本機產生 DEK。您可以使用諸如 OpenSSL 的開放原始碼程式庫執行這項操作,進而指定加密類型與密碼以產生金鑰。您也可以根據需要指定要使用的 salt 與摘要。
在本機使用這個 DEK 加密資料。
例如,您可以如加密訊息範例所示使用 OpenSSL。做為最佳做法,請在 Galois 計數器模式 (GCM) 下使用 256 位元進階加密標準 (AES-256) 加密。
在 Cloud KMS 中產生新金鑰,或使用現有金鑰,來做為 KEK 使用。使用此金鑰加密 (包裝) DEK。
儲存加密的資料與經過包裝的 DEK。
如何使用信封式加密來解密資料
解密資料的程序包括擷取加密的資料與經過封裝的 DEK、識別已包裝 DEK 的 KEK、使用 KEK 將 DEK 解除包裝,然後使用解除包裝的 DEK 解密資料。KEK 永遠不會離開 Cloud KMS。
如要使用信封式加密來解密資料,請執行下列操作:
擷取加密的資料與經過包裝的 DEK。
使用儲存在 Cloud KMS 中的金鑰為加密的 DEK 解除包裝。
使用明文 DEK 對加密的資料進行解密。如要像之前一樣使用 OpenSSL,請參閱解密訊息範例。
如需使用信封加密功能加密及解密的程式碼範例,請參閱「使用 Tink 和 Cloud KMS 進行用戶端加密」。
與 Google Cloud 服務整合
數種 Google Cloud 產品已與 Cloud KMS 整合,可支援客戶代管的加密金鑰 (CMEK) 功能。Cloud KMS 的 CMEK 可為資料提供多一層保護、讓您控制加密金鑰,並利用 Cloud KMS 的金鑰管理優點。如需支援 CMEK 的產品完整清單,請參閱「將 Cloud KMS 與其他服務搭配使用」。
Google Cloud 服務的其他選項
如果資料儲存在不支援 CMEK 的 Google Cloud 產品中,您可以實作自己的應用程式層加密。這需要如上所述實作您自己的信封式加密,使您將在本機加密的資料儲存在 Google Cloud中。您也可以藉由此方法使用 Cloud KMS 加密您儲存在其他雲端服務供應商或內部部署中的資料。
除了支援 CMEK 以外,下列產品也支援客戶提供的加密金鑰 (CSEK) 功能。
產品 | CSEK 主題 |
---|---|
Cloud Storage | 客戶提供的加密金鑰 |
Compute Engine | 使用客戶提供的加密金鑰來為磁碟加密 |
使用 CSEK 時,您可以提供自有的 AES-256 金鑰做為 KEK,而您的金鑰會保護用於保護資料的 DEK。您的 CSEK 金鑰會透過 Cloud KMS 金鑰,以額外的保護層受到保護。
您現在可以將金鑰匯入 Cloud KMS,這樣一來,您就能匯入金鑰,並搭配支援 CMEK 的服務使用,而非仰賴 CSEK。