本文為您介紹如何對Key Management Service(KMS)中的使用者主要金鑰(CMK)進行自動輪轉。
密鑰版本
KMS中的CMK支援多個密鑰版本。每一個密鑰版本是一個獨立產生的密鑰,同一個CMK下的多個密鑰版本在密碼學上互不相關。KMS通過產生一個新的密鑰版本來實現密鑰的自動輪轉。
密鑰版本的類別
CMK的密鑰版本分為以下2種:
- 主要版本(Primary Key Version)
- 主要版本是CMK的活躍加密金鑰(Active Encryption Key)。每個CMK在任何時間點上有且僅有一個主要版本。
- 調用GenerateDataKey、Encrypt等加密API時,KMS使用指定CMK的主要版本對明文進行加密。
- 您可以通過DescribeKey返回的響應查看PrimaryKeyVersion屬性。
- 非主要版本(Non-primary Key Version)
- 非主要版本是CMK的非活躍加密金鑰(Inactive Encryption Key)。每個CMK可以有零到多個非主要版本。
- 非主要版本歷史上曾經是主要版本,在當時被用作活躍加密金鑰。
- 密鑰輪轉產生新的主要版本後,KMS不會刪除或禁用非主要版本,它們需要被用作解密資料。
說明 加密API使用指定CMK的主要版本,解密API使用傳入密文對應的加密金鑰版本。
密鑰版本的產生
您可以通過以下兩種方式產生密鑰版本:
- 建立CMK
通過調用CreateKey建立CMK。如果指定參數Origin為Aliyun_KMS,則KMS會產生初始密鑰版本,並且將其設定為主要版本。
- KMS執行自動輪轉策略
CMK配置自動輪轉策略,配置的策略由KMS定期執行,周期性產生新的密鑰版本。
自動輪轉
配置和查詢輪轉策略
當您調用CreateKey建立CMK時,可以指定CMK的自動輪轉策略,也可以調用UpdateRotationPolicy變更當前的自動輪轉策略。調用時,需配置以下參數:
- EnableAutomaticRotation:是否開啟自動輪轉。
- RotationInterval:自動輪轉的周期。
您可以通過調用DescribeKey查詢所配置的輪轉策略,返回的相關參數為:
- AutomaticRotation:自動輪轉的開啟狀態。詳情請參見主要金鑰狀態對輪轉的影響。
- Disabled:使用者未開啟自動輪轉。
- Enabled:使用者已開啟自動輪轉。
- Suspended:使用者開啟了自動輪轉,但是KMS暫停執行。
- RotationInterval:自動輪轉的周期。
KMS執行策略
如果您指定開啟自動輪轉,則KMS會按照以下方式計算下次輪轉的時間。
<NextRotationTime> = <LastRotationTime> + <RotationInterval>
參數含義如下: LastRotationTime
:產生上一個密鑰版本的時間。您可以通過DescribeKey返回的LastRotationDate
欄位查詢此參數值。NextRotationTime
:KMS會在計算出來的下一次輪轉時間到來之後,執行輪轉任務,建立新的密鑰版本。您可以通過DescribeKey返回的NextRotationDate
欄位查詢此參數值。
重要 更新輪轉策略所指定的輪轉周期,可能會導致KMS計算出來的下次輪轉時間成為過去的某個時間點。這並不影響KMS執行輪轉策略的規則,即在下一次輪轉時間到來之後產生新的密鑰版本。如果更新後的策略指向的下一次輪轉時間已經在目前時間之前,則立即滿足了KMS觸發密鑰輪轉的標準。
輪轉對加密解密的影響
對於密鑰輪轉後的加密請求,KMS會使用目前的版本的密鑰進行加密。對於歷史版本祕密金鑰加密後密文的解密請求,您可以使用歷史版本密鑰進行解密。
對於歷史版本祕密金鑰加密後密文,您可以通過ReEncrypt將資料轉換為目前的版本密鑰進行加密。
主要金鑰狀態對輪轉的影響
只有在啟用狀態的主要金鑰(KeyState為Enabled)才能產生新的密鑰版本。您需要注意以下情形:
- 如果一個主要金鑰處於Disabled或者PendingDeletion狀態,請勿調用UpdateRotationPolicy變更主要金鑰的輪轉策略。
- 如果一個主要金鑰在使用者開啟自動輪轉後,進入到Disabled或者PendingDeletion狀態,則KMS暫停執行自動輪轉。此時通過DescribeKey查看到的輪轉狀態(AutomaticRotation屬性)為Suspended。當主要金鑰重新回到啟用狀態時,之前配置的輪轉策略會重新生效。
不適用範圍
KMS管理的以下類型的密鑰不支援多個版本:
- 雲產品託管密鑰(Service Managed Key):特定雲產品託管在KMS上的、用於加密保護您的資料的預設密鑰。這類密鑰由特定雲產品為使用者代為管理,為您的資料提供最基本的加密保護。
- 使用者內建密鑰(Customer Supplied Key):您匯入到KMS中的密鑰。這類CMK的Origin屬性為External,KMS不負責為使用者產生密鑰材料,無法自動發起輪轉行為。更多資訊,請參見匯入密鑰材料。
因此,以上兩種類型的密鑰不支援以自動或人工的方式進行基於版本的密鑰輪轉。此外,KMS也不支援內建密鑰的多版本功能,原因如下:
- 內建密鑰的持久性和生命週期由使用者強管控,本身就具有較高的管理難度和易錯風險(例如:您需要有雲下的密鑰管理設施,雲上雲下資訊需要同步,雲上刪除密鑰材料沒有任何緩衝期),而多版本帶來的複雜度升級會超線性地升高易錯性,從而帶來資料風險。
- 每個密鑰版本,包括用於加密和解密的主要版本以及僅用於解密的非主要版本,都可能在不同的時間點上不可用(例如:在不同時間點上到期而被KMS刪除,或者到期後被重新分別匯入),導致無法同步主要金鑰和被保護資料的可用性,很難保證系統設計的完整性。