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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS KMS keys ローテーション

カスタマーマネージドキーの新しい暗号化マテリアルを作成するには、新しい KMS キーを作成し、アプリケーションまたはエイリアスを変更して新しい KMS キーを使用します。または、既存の KMS キーの自動キーローテーションを有効にすることができます。

KMS キーの自動キーローテーションを有効にすると、AWS KMS は KMS キーの新しい暗号化マテリアルを毎年生成します。AWS KMS に古い暗号化マテリアルはすべて永続的に保存されるため、KMS キーで暗号化されたすべてのデータを復号することができます。AWS KMS は KMS キーが削除されるまで、ローテーションされたキーマテリアルを削除しません。Amazon CloudWatch および で KMS キーのキーマテリアルのローテーションを追跡できます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 の料金表」を参照してください。

注記

AWS Cost Explorer Service を使用して、キーストレージ料金の内訳を表示できます。例えば、[使用タイプ]$REGION-KMS-Keys を指定し、データを [API オペレーション] でグループ化することによって、ビューをフィルターし、現在のローテションされた KMS キーとして課金されたキーの合計料金を表示できます。

過去の期間のレガシー Unknown API オペレーションのインスタンスが引き続き表示される場合があります。

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

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

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

KMS キーをローテーションする理由

暗号化のベストプラクティスでは、AWS KMS が生成するデータキーなどのデータを直接暗号化するキーの広範な再利用を推奨していません。256 ビットデータキーが数百万のメッセージを暗号化すると、キーが枯渇し、微小なパターンを含む暗号文を生成し始める可能性があり、ずる賢い人物が悪用して、キーの中のビットが発見される可能性があります。このキーの枯渇を回避するには、データキーを 1 回または数回だけ使用することをお勧めします。こうすることによって、キーマテリアルが効果的にローテーションされます。

ただし、KMS キーは、ラップキー (キー暗号化キーとも呼ばれます) として最もよく使用されます。データを暗号化する代わりに、ラップキーはデータを暗号化するデータキーを暗号化します。そのため、これらはデータキーよりもはるかに使用頻度が低く、キーが枯渇するほど多数回再利用されることはほとんどありません。

このように枯渇するリスクは極めて低いものの、ビジネスルールや契約、政府の規制により、KMS キーのローテーションが必要になる場合があります。KMS キーをローテーションせざるを得ない場合は、自動キーローテーション (これがサポートされている場合) または手動キーローテーション (自動キーローテーションがサポートされていない場合) を使用することをお勧めします。

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

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

キーマテリアルの管理

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

キーマテリアルの使用

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

ローテーション日

AWS KMS は、ローテーションが有効になってから 1 年 (約 365 日) 後にキーマテリアルをローテーションし、その後は毎年 (約 365 日間隔で) ローテーションします。

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

自動キーローテーションは、カスタマーマネージドキーではオプションであり、いつでも有効化および無効化できるため、ローテーション日は、ローテーションの最終有効化日によって異なります。その日付は、キーの有効期間にわたって多数回変更できます。

たとえば、2022 年 1 月 1 日にカスタマーマネージドキーを作成し、2022 年 3 月 15 日に自動キーローテーションを有効にすると、AWS KMS は、2023 年 3 月 15 日、2024 年 3 月 15 日、その後は 365 日ごとにキーマテリアルをローテーションします。

以下は特殊なケースです。

  • キーローテーションの無効化 — 任意の時点で自動キーローテーションを無効にすると、KMS キーは、ローテーションが無効になったときに使用していたバージョンのキーマテリアルを使用し続けます。自動キーローテーションを再び有効にすると、AWS KMS は、新たにローテーションを有効にした日から 1 年後にキーマテリアルをローテーションして、その後は毎年 (約 365 日間隔で) ローテーションします。

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

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

AWS マネージドキー

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

AWS マネージドキー のキーマテリアルは、作成日から 1 年後に最初にローテーションされ、その後は毎年 (最後のローテーションから約 365 日間隔で) ローテーションされます。

注記

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 はそのキーマテリアルをすべてのレプリカキーに自動的にコピーします。詳細については、「マルチリージョンキーをローテーションする」を参照してください。

AWS サービス

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

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

AWS マネージドキーまたはカスタマーマネージドキー のキーマテリアルAWS KMSを自動的にローテーションすると、 KMS CMK Rotationイベントが Amazon EventBridge に、 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 キーの自動キーローテーションを有効にします。DisableKeyRotation オペレーションによって無効になります。これらのオペレーションで 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 キーを手動で更新すると、アプリケーションの KMS キー ID または キーの ARN へのリファレンスも更新する必要があります。KMS キーにわかりやすい名前を関連付けられるエイリアスが、このプロセスを容易にします。エイリアスを使用して、アプリケーションの KMS キーを参照します。続いて、アプリケーションが使用する KMS キーを変更するには、アプリケーションのコードを編集する代わりに、エイリアスのターゲット KMS キーを変更します。詳細については、「アプリケーションでのエイリアスの使用」を参照してください。

注記

手動でローテーションされた KMS キーの最新バージョンを指すエイリアスはDescribeKey、、Encrypt 、、、GenerateMacおよび Sign GenerateDataKey GenerateDataKeyPairオペレーションに適しています。エイリアスは、 DisableKeyや などの KMS キーを管理するオペレーションでは許可されませんScheduleKeyDeletion

手動で更新された対称暗号化 KMS キーに対する Decrypt オペレーションを呼び出すときは、コマンドの KeyId パラメータを省略します。暗号文を暗号化した KMS キーを、AWS KMS が自動的に使用します。

非対称 KMS キーを使用して Decryptまたは Verify を呼び出す場合、または HMAC KMS キーVerifyMacを使用して を呼び出す場合は、 KeyIdパラメータが必要です。キーが手動で更新された場合など、暗号化オペレーションを実行する KMS キーをもはや指していないエイリアスが、KeyId パラメータの値になっている場合には、これらのリクエストは失敗します。このエラーを回避するには、オペレーションごとに正しい KMS キーを追跡して、指定する必要があります。

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

$ aws kms list-aliases --query 'Aliases[?AliasName==`alias/TestKey`]' { "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 --query 'Aliases[?AliasName==`alias/TestKey`]' { "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 }, ] }