AWS KMS keys ローテーション - AWS Key Management Service

AWS KMS keys ローテーション

暗号化のベストプラクティスでは、暗号化キーの広範な再利用を推奨していません。KMS キーの新しい暗号化マテリアルを作成するには、新しい KMS キーを作成し、アプリケーションまたはエイリアスを変更して新しい KMS キーを使用します。または、既存の KMS キーの自動キーローテーションを有効にすることができます。

KMS キーの自動キーローテーションを有効にすると、AWS KMS は KMS キーの新しい暗号化マテリアルを毎年生成します。AWS KMS に古い暗号化マテリアルはすべて永続的に保存されるため、KMS キーで暗号化されたすべてのデータを復号することができます。AWS KMS は KMS キーが削除されるまで、ローテーションされたキーマテリアルを削除しません。KMS キーのキーマテリアルに関するローテーションの追跡は、Amazon CloudWatch とAWS CloudTrail で実行することができます。

データの暗号化にローテーションされた KMS キーを使用する場合、AWS KMS は現在のキーマテリアルを使用します。暗号化テキストの復号化にローテーションされた KMS キーを使用する場合、AWS KMS はそのテキストの暗号化に使用されたキーマテリアルのバージョンを使用します。キーマテリアルの特定のバージョンをリクエストすることはできません。AWS KMS は適切なキーマテリアルを使用して復号化を透過的に実行するため、ローテーションされた KMS キーは、コードを変更することなくアプリケーションおよび AWS のサービスで安全に使用することができます。

ただし、自動キーローテーションは、KMS キーで保護されるデータには効果がありません。自動ローテーションは KMS キーが生成したデータキーのローテーションや KMS キーで保護されたデータの再暗号化を実行せず、漏洩したデータキーの影響を軽減しません。

AWS KMS が自動キーローテーションをサポートするのは、AWS KMS が作成するキーマテリアルを持つ対称暗号化 KMS キーのみです。カスタマーマネージド KMS キーについては、自動ローテーションはオプションになります。AWS KMS は常に、AWS マネージド KMS キーのキーマテリアルのローテーションを毎年実行します。AWS 所有の KMS キーのローテーションはそれぞれ異なります。

注記

AWS マネージドキー のローテーション間隔は 2022 年 5 月に変更されました。詳細については、「AWS マネージドキー」を参照してください。

キーローテーションは、暗号化操作で使用される暗号化シークレットであるキーマテリアルのみを変更します。KMS キーは、そのキーマテリアルの変更の有無や回数に関わらず、同じ論理リソースのままです。次のイメージに示されているように、KMS キーのプロパティは変更されまません。

自動キーローテーションには次の利点があります。

  • キー IDキー ARN、リージョン、ポリシー、アクセス許可などの KMS キーのプロパティは、キーがローテーションされても変更されません。

  • KMS キーのキー ID またはキー ARN を参照するアプリケーションまたはエイリアスを変更する必要はありません。

  • キーマテリアルのローテーションは、どの AWS のサービスでの KMS キーの使用にも影響しません。

  • キーローテーションを有効にすると、AWS KMS によって KMS キーが毎年自動的にローテーションされます。更新を覚えている、またはスケジュールする必要はありません。

新しい KMS キーを作成し、元の KMS キーの代わりに使用することを決定することができます。これには、既存の KMS キーでキーマテリアルをローテーションするのと同じ効果があり、多くの場合、手動キーローテーションを使用します。キーローテーションのスケジュールを制御する場合は、手動ローテーションすることをお勧めします。これは、非対称 KMS キーHMAC KMS キーカスタムキーストア内の KMS キー、およびインポートされたキーマテリアルを持つ KMS キーなど、自動キーローテーションの対象にならない KMS キーをローテーションする手段も提供します。

キーローテーションと料金

AWS KMS では、KMS キー用に維持されるキーマテリアルの各バージョンに対して月額料金が発生します。詳細については、「AWS Key Management Service の料金」を参照してください。

キーローテーションとクォータ

各 KMS キーは、キーリソースのクォータを計算するときに、ローテーションされたキーマテリアルのバージョン数に関係なく、1 つのキーとしてカウントされます。

キーマテリアルとローテーションの詳細については、AWS Key Management Service 暗号化の詳細を参照してください。

キーの自動ローテーションの仕組み

AWS KMS のキーローテーションは、透過的で使いやすいように設計された暗号化のベストプラクティスです。AWS KMS は、カスタマーマネージドキーに対してのみ、オプションの自動キーローテーションをサポートします。

キーマテリアルの管理

AWS KMS は、キーローテーションが無効になっている場合でも、KMS キーのすべてのキーマテリアルを保持します。AWS KMS は KMS キーが削除されたときにのみ、キーマテリアルを削除します。

キーマテリアルの使用

データの暗号化にローテーションされた KMS キーを使用する場合、AWS KMS は現在のキーマテリアルを使用します。暗号化テキストの復号にローテーションされた KMS キーを使用する場合、AWS KMS は暗号化に使用したものと同じバージョンのキーマテリアルを使用します。キーマテリアルの特定のバージョンをリクエストすることはできません。

キーマネージャーの相違点

自動キーローテーションオプションは、キーマネージャ応じて異なります。

カスタマーマネージドキー

自動キーローテーションは、カスタマーマネージドキーに対してデフォルトで無効になっていますが、認可されたユーザーが有効化または無効化することができます。自動キーローテーションを有効化 (または再有効化) すると、AWS KMS は、有効にした日から 1 年 (約 365 日) 後に KMS キーを自動的にローテーションして、その後も毎年ローテーションを実行します。

AWS マネージドキー

AWS KMS は、AWS マネージドキーのローテーションを毎年 (約 365 日) 実行します。AWS マネージドキーのキーローテーションを有効化または無効化することはできません。

注記

2022 年 5 月、AWS KMS は AWS マネージドキー のローテーションスケジュールを 3 年 (約 1,095 日) ごとから毎年 (約 365 日) に変更しました。

新しい AWS マネージドキーは、その作成日から 1 年後に自動的にローテーションされ、それ以降はほぼ 1 年ごとにローテーションされます。

既存の AWS マネージドキーは、直近のローテーションから 1 年後にローテーションされ、その後毎年ローテーションされます。

AWS 所有のキー

AWS 所有のキーのキーローテーションを有効化または無効化することはできません。AWS 所有のキー のキーローテーション戦略は、キーを作成および管理する AWS サービスによって決定されます。詳細については、サービスのユーザーガイドまたはデベロッパーガイドの「保管時の暗号化 」トピックを参照してください。

サポートされない KMS キータイプ

自動キーローテーションがサポートされるのは、AWS KMS が生成するキーマテリアルを持つ対称暗号化 KMS キー (オリジン = AWS_KMS) のみです。

自動キーローテーションは、次のタイプの KMS キーではサポートされませんが、これらの KMS キーは手動でローテーションできます。

マルチリージョンキー

自動キーローテーションをマルチリージョンキーで有効および無効にできます。プロパティはプライマリキーにのみ設定します。AWS KMS がキーを同期すると、プライマリキーからレプリカキーにプロパティ設定がコピーされます。プライマリキーのキーマテリアルをローテーションさせると、AWS KMS はそのキーマテリアルをすべてのレプリカキーに自動的にコピーします。詳細については、「マルチリージョンキーをローテーションする」を参照してください。

無効にされた KMS キー

KMS キーが無効になっている間、AWS KMS は KMS キーをローテーションしません。ただし、キーローテーションのステータスは変更されず、KMS キーが無効の間は変更することができません。KMS キーが再有効化され、そのキーマテリアルが 1 年以上前のものである場合、AWS KMS はそれを直ちにローテーションしてから、その後毎年ローテーションします。キーマテリアルが 1 年未満のものである場合、AWS KMS は元のキーローテーションのスケジュールを再開します。

削除保留中の KMS キー

KMS キーが削除保留中の場合、AWS KMS はローテーションを実行しません。キーローテーションのステータスは false に設定されています。削除が保留中の場合は変更することができません。削除をキャンセルすると、以前のキーローテーションのステータスが元に戻ります。キーマテリアルが 1 年以上前のものである場合、AWS KMS はそれを直ちにローテーションしてから、その後毎年ローテーションします。キーマテリアルが 1 年未満のものである場合、AWS KMS は元のキーローテーションのスケジュールを再開します。

AWS のサービス

AWS サービスのサーバー側の暗号化に使用するカスタマーマネージドキーで、自動キーローテーションを有効にできます。年間ローテーションは透過的で、AWS のサービスと互換性があります。

キーローテーションのモニタリング

AWS KMS が AWS マネージドキー またはカスタマーマネージドキーのキーマテリアルを自動的にローテーションすると、KMS CMK Rotation イベントが Amazon CloudWatch Events に書き込まれ、RotateKey イベントが AWS CloudTrail ログに書き込まれます。これらのレコードを使用して、KMS キーがローテーションされたことを確認できます。

結果整合性

自動キーローテーションは、他の AWS KMS 管理オペレーションと同じ結果整合性の影響下にあります。新しいキーマテリアルが AWS KMS 全体で使用可能になるまで、若干の遅延が生じることがあります。ただし、キーマテリアルのローテーションにより、暗号化オペレーションが中断または遅延することはありません。新しいキーマテリアルが AWS KMS 全体で使用可能になるまで、現在のキーマテリアルが暗号化オペレーションで使用されます。マルチリージョンキーのキーマテリアルが自動的にローテーションされると、関連するマルチリージョンキーを持つすべてのリージョンで新しいキーマテリアルが使用可能になるまで、AWS KMS は現在のキーマテリアルを使用します。

キーの自動ローテーションを有効または無効にする方法

認可されたユーザーが AWS KMS コンソールまたは AWS KMS API を使用して、自動キーローテーションを有効化または無効化し、キーローテーションステータスを表示することができます。

自動キーローテーションを有効にすると、AWS KMS は、有効にした日から 1 年後に KMS キーのキーマテリアルをローテーションし、その後毎年ローテーションします。

キーローテーションの有効化と無効化 (コンソール)

  1. AWS Management Console にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョン を変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。(AWS マネージドキー のローテーションを有効化または無効化することはできません。これらのローテーションは毎年自動的に行われます。)

  4. KMS キーのエイリアスまたは キー ID を選択します。

  5. [キーローテーション] タブを選択します。

    [Key rotation] (キーローテーション) タブは、マルチリージョンの対称暗号化 KMS キーなど、AWS KMS が生成したキーマテリアルを持つ対称暗号化 KMS キー ([Origin] (オリジン) が [AWS_KMS]) の詳細ページにのみ表示されます。

    非対称 KMS キー、HMAC KMS キー、インポートされたキーマテリアルを持つ KMS キー、またはカスタムキーストア内の KMS キーを自動的にローテーションすることはできません。ただし、手動でローテーションすることはできます。

  6. [Automatically rotate this KMS key every year] (この KMS キーを毎年自動的にローテーションする) チェックボックスをオンまたはオフにします。

    注記

    KMS キーが無効または削除保留中の場合は [Automatically rotate this KMS key every year] (この KMS キーを毎年自動的にローテーションする) のチェックボックスはオフになっています。これを変更することはできません。KMS キーを有効にするか削除をキャンセルすると、キーローテーションのステータスが復元されます。詳細については、「キーの自動ローテーションの仕組み」および「AWS KMS キーのキーステータス」を参照してください。

  7. [Save] を選択します。

キーローテーションを有効化および無効化する (AWS KMS API)

AWS Key Management Service (AWS KMS) API を使用して、自動キーローテーションを有効および無効にし、すべてのカスタマーマネージドキーの現在のローテーションステータスを表示できます。以下の例では AWS Command Line Interface (AWS CLI) を使用していますが、サポートされている任意のプログラミング言語を使用できます。

EnableKeyRotation オペレーションでは、指定された KMS キーの自動キーローテーションが有効になります。Dis ableKeyRotation オペレーションによって無効になります。これらのオペレーションで KMS キーを識別するには、そのキー ID またはキー ARN を使用します。デフォルトでは、カスタマーマネージドキーのキーローテーションは無効になっています。

以下の例は、指定された対称暗号化 KMS キーでキーローテーションを有効にし、GetKeyRotationStatus オペレーションを使用して結果を表示します。それから、キーローテーションを無効にし、再度、GetKeyRotationStatus を使用して変更を確認します。

$ aws kms enable-key-rotation --key-id 1234abcd-12ab-34cd-56ef-1234567890ab $ aws kms get-key-rotation-status --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyRotationEnabled": true } $ aws kms disable-key-rotation --key-id 1234abcd-12ab-34cd-56ef-1234567890ab $ aws kms get-key-rotation-status --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyRotationEnabled": false }

手動でのキーローテーション

自動キーローテーションを有効にする代わりに、新しい KMS キーを作成して、現在の KMS キーの代わりに使用することができます。新しい KMS キーが現在の KMS キーと異なる暗号化マテリアルを持つ場合、新しい KMS キーを使用すると、既存の KMS キーでキーマテリアルを変更するのと同じ効果があります。1 つの KMS キーを別のものと置き換えるプロセスは、手動キーローテーションと呼ばれます。

ローテーションの頻度をコントロールできるように、手動でキーをローテーションする方がよい場合があります。これは、非対称 KMS キー、カスタムキーストア内の HMAC KMS キー、およびインポートされたキーマテリアルを持つKMS キーなど、自動キーローテーションの対称ではない KMS キーに適したソリューションでもあります。

注記

新しい KMS キーの使用を開始する際は、元の KMS キーを有効なままにすることで、AWS KMS が元の KMS キーによって暗号化されたデータを復号できることに注意してください。

新しい KMS キーは現在の KMS キーとは別のリソースであるため、異なるキー ID と ARN を持っています。KMS キーを変更すると、アプリケーションの KMS キー ID または ARN へのリファレンスを更新する必要があります。エイリアスは KMS キーにわかりやすい名前を関連付けることで、このプロセスを容易にします。エイリアスを使用して、アプリケーションの KMS キーを参照します。続いて、アプリケーションが使用する KMS キーを変更するには、エイリアスのターゲット KMS キーを変更します。詳細については、「アプリケーションでのエイリアスの使用」を参照してください。

エイリアスのターゲット KMS キーを更新するには、UpdateAlias オペレーションを AWS KMS API で使用します。例えば、このコマンドでは、新しい KMS キーを指すように TestKey エイリアスを更新します。オペレーションは出力を返さないため、この例では ListAliases オペレーションを使用して、エイリアスが異なる KMS キーと関連付けられ、LastUpdatedDate フィールドが更新されたことを示します。

$ aws kms list-aliases { "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/TestKey", "AliasName": "alias/TestKey", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1521097200.123, "LastUpdatedDate": 1521097200.123 }, ] } $ aws kms update-alias --alias-name alias/TestKey --target-key-id 0987dcba-09fe-87dc-65ba-ab0987654321 $ aws kms list-aliases { "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/TestKey", "AliasName": "alias/TestKey", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1521097200.123, "LastUpdatedDate": 1604958290.722 }, ] }