このトピックでは、Key Management Service (KMS) で顧客マスターキー (CMK) の自動ローテーションを設定する方法について説明します。
キーバージョン
CMKには複数のキーバージョンがあります。 各キーバージョンは、独立して生成されたキーを指します。 同じCMKのキーバージョンは、互いに暗号化関係を持たない。 KMSは、新しいキーバージョンを生成することでCMKを自動的にローテーションします。
タイプのキーバージョン
キーバージョンは次のタイプに分類されます。
主キーバージョン
CMK のプライマリキーバージョンとは、有効な暗号化キーを指します。 各CMKには、任意の時点でプライマリキーバージョンが1つだけあります。
GenerateDataKeyやEncryptなどの暗号化操作を呼び出すと、KMSは指定されたCMKのプライマリキーバージョンを使用してプレーンテキストを暗号化します。
DescribeKey操作を呼び出して、PrimaryKeyVersion属性を照会できます。
非主キーバージョン
CMKの非プライマリキーバージョンは、非アクティブな暗号化キーです。 各CMKは、ゼロから多数の非プライマリキーバージョンを持つことができます。
各非プライマリキーバージョンはプライマリキーバージョンであり、過去にはアクティブな暗号化キーとして機能していました。
新しいプライマリキーバージョンが作成された場合、データの復号化に使用する必要があるため、KMSは非プライマリキーバージョンを削除または無効にしません。
暗号化操作を呼び出すと、指定されたCMKの主キーバージョンが使用されます。 復号化操作を呼び出すと、暗号化に使用されたキーバージョンが使用されます。
キーバージョンの生成
次のいずれかの方法でキーバージョンを生成できます。
CMK を作成します。
CreateKey操作を呼び出して、CMKを作成できます。 [オリジン] パラメーターを Aliyun_KMS に設定すると 、KMS は最初のキーバージョンを生成して主キーバージョンとして設定します。
自動ローテーションポリシーを実行します。
CMKの自動ローテーションポリシーを設定すると、KMSは定期的にポリシーを実行してキーバージョンを生成します。
自動回転
自動ローテーションポリシーの設定とクエリ
CreateKey操作を呼び出してCMKを作成するときに、CMKの自動ローテーションポリシーを指定できます。 UpdateRotationPolicyを呼び出して、現在の自動ローテーションポリシーを更新できます。 操作を呼び出すときは、次のパラメーターを設定する必要があります。
EnableAutomaticRotation :自動ローテーションを有効にするかどうかを指定します。
RotationInterval: 自動ローテーションの間隔。
DescribeKey操作を呼び出して、設定された自動ローテーションポリシーを表示できます。 次のパラメーターが返されます。
AutomaticRotation:自動ローテーションが有効かどうかを示します。 詳細については、「CMKステータスの自動ローテーションへの影響」をご参照ください。
無効: 自動ローテーションが無効であることを示します。
有効: 自動ローテーションが有効であることを示します。
Suspended: 自動ローテーションが有効であるにもかかわらず、KMSが自動ローテーションの実行を中断することを示します。
RotationInterval: 自動ローテーションの間隔。
自動ローテーションポリシーの実行
自動ローテーションが有効になっている場合、KMSは次の式を使用して次のローテーションの時間を計算します。
<NextRotationTime> = <LastRotationTime> + <RotationInterval>説明:
LastRotationTime: 最後のキーバージョンが作成された時刻。 DescribeKey操作を呼び出し、LastRotationDateパラメーターをチェックして時刻を取得できます。NextRotationTime: KMSが次のローテーションタスクを実行してキーバージョンを作成する時刻。 DescribeKey操作を呼び出し、NextRotationDateパラメーターをチェックして時刻を取得できます。
自動ローテーションポリシーのRotationIntervalパラメーターを更新すると、NextRotationTimeの値が過去の時点になる可能性があります。 自動ローテーションポリシーの実行には影響しません。 新しいキーバージョンは定期的に生成されます。 この状況が発生した場合、KMSはすぐに自動ローテーションポリシーを実行します。
暗号化と復号化に対する自動ローテーションの影響
CMKがローテーションされた後、KMSはCMKの現在のバージョンを使用してデータを暗号化します。 CMKの履歴バージョンを使用して暗号化されたデータの場合、履歴バージョンのみを使用してデータを復号化できます。
ReEncrypt操作を呼び出して、CMKの履歴バージョンを使用して暗号化された暗号文を復号し、取得した平文データを現在のバージョンのCMKを使用して暗号化できます。
自動ローテーションに対するCMKステータスの影響
新しいキーバージョンは、有効なCMKに対してのみ作成できます。 CMKを有効にするには、KeyStateパラメーターをEnabledに設定します。 以下の点にご注意ください。
CMKのステータスが [無効] または [削除保留中] の場合は、UpdateRotationPolicy操作を呼び出して自動ローテーションポリシーを更新しないでください。
CMKの自動ローテーションを有効にした後、CMKが [無効] または [削除待ち] 状態になると、KMSは自動ローテーションの実行を中断します。 この場合、DescribeKey操作を呼び出すと、AutomaticRotationパラメーターの戻り値はSuspendedになります。 CMKが再び有効状態になると、自動ローテーションポリシーがアクティブになります。
制限事項
次のキーは、複数のキーバージョンをサポートしていません。
サービス管理キー: 特定のクラウドサービス用にKMSによって管理されるデフォルトキー。 これらのキーはクラウドサービスのユーザーに属し、ユーザーデータの基本的な暗号化保護を提供するために使用されます。
Bring Your Own Key (BYOK) に基づくキー: KMSにインポートしたキー。 これらのキーのOrigin属性はEXTERNALです。 KMSは、キーマテリアルを生成したり、これらのキーのローテーションタスクを開始しません。 詳細については、「キーマテリアルのインポート」をご参照ください。
これら2つのタイプのキーは、バージョンベースの手動または自動キー回転をサポートしていません。 BYOKベースのキーには、次の理由により、KMSで複数のバージョンがありません。
ユーザーは、BYOKベースのキーの永続性とライフサイクルを強力に制御できます。 これは、キーの管理を困難にし、エラーを起こしやすい。 たとえば、オンプレミスのキー管理機能が必要であり、オンプレミスの機能とクラウドの間でデータを同期する必要があり、クラウドでのキーマテリアルの削除に猶予期間は提供されません。 BYOKベースのキーの複数のバージョンを維持する複雑さは、キー管理をはるかに危険なものにします。
プライマリキーバージョンと非プライマリキーバージョンの両方が、異なる時点で利用できなくなる場合があります。 たとえば、キーバージョンがKMSによって削除されたり、有効期限が切れたときに再度インポートされたりすると、CMKが同期されず、暗号化されたデータが正しいCMKを使用して復号化されない場合があります。 これはシステムの完全性に影響します。