1

語境

我下面的存儲桶Storing Secrets GCP的指示後數據unencryption。在上傳到存儲桶之前,KMS用於file encryption谷歌的密鑰管理系統:主要的旋轉

由於數據加密發生在Google的存儲之外,所以我對於密鑰輪換的一個方面有些困惑。

方案

讓我們考慮一個特定的場景:

  1. 在2017-01- 我創建了一個鑰匙環和一個關鍵A(這實際上是A_ver1因爲密鑰版本)。此外,密鑰輪換政策設置爲觸發輪換每年
  2. 在2017-01- 我運行一個命令some_file.txtA_ver1加密: curl -s -X POST "https://cloudkms.googleapis.com/v1/projects/my-project/<...>" \ -d "{\"plaintext\":\"<...SOME_FILE_CONTENT...>\"}" \ -H "Authorization:Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json"
  3. 我立即將加密結果保存到存儲桶中作爲some_file.txt.encrypted
  4. 我什麼都不做,並且在 -01-01發生鑰匙旋轉。 據我所知A_ver1被禁用,A_ver2生成並激活。 這兩個事件準準模擬地發生。
  5. 2018-06 -01我意識到我需要取消加密some_file.txt.encrypted。我下載的文件,然後試圖運行一個命令使用A_ver2來解密方法的文件...

問題

問題1:這是怎麼回事,當我嘗試解密方法的文件發生如果使用早期版本A_ver1加密,則爲A_ver2

問題2:如果解密失敗,我應該怎麼做,以防止它呢?

回答

3

在您的方案中,步驟4中的旋轉描述不太正確。當您旋轉CryptoKey時,會生成一個新的CryptoKeyVersion並將其作爲CryptoKey的主版本,但舊版本沒有任何反應。也就是說,對於您的場景,A_ver1仍處於啓用狀態,但另一個已啓用的版本A_ver2是主要版本。

回答您的問題,

問題1:當您嘗試解密文件,你並不需要指定CryptoKeyVersion,只有密碼鍵;該服務將爲您獲得正確的版本。如果您嘗試解密已使用現在禁用(或銷燬)的CryptoKeyVersion加密的文件,則解密呼叫將失敗。

問題2:這取決於您正在優化的內容。例如,如果您正在使用循環來限制使用任何一個版本進行加密的數據量,那麼您可能不想禁用舊版本,並長時間保留這些版本。您可能只想要禁用大量版本以外的密鑰版本。在這種情況下,您可以跟蹤您爲特定數據片段使用的密鑰版本,並重新加密所有受影響的數據。

+0

謝謝瑪雅回答**兩個問題的深入。 –

4

舊版本在旋轉時不會自動禁用。

問題1:當您使用特定的CryptoKey進行解密時,服務器會選擇正確的版本(在Decrypt document中提到)。只要版本沒有被禁用,它仍然可用。

問題2:在您的特定情況下,由於使用舊版本,解密不會失敗。

Key rotation提到了您期望的行爲,並且正如它注意到實施策略,使用新版本重新加密數據並禁用舊版本,可能會非常棘手。

如果您有任何其他問題,請讓我知道。