KMS CMK削除時のデータ復旧 ── 削除スケジュールのキャンセルと予防策

目次

概要

AWS KMS(Key Management Service)のカスタマーマスターキー(CMK)は、EBSボリュームやS3バケットなど複数のサービスでデータ暗号化に使用されます。CMKが削除されると、そのキーで暗号化されたすべてのデータは復号できなくなり、事実上のデータ損失となります。

たとえば、退職した従業員がCMKの削除をスケジュールしていたケースを考えます。EBSボリュームとS3バケットが同一のCMKで暗号化されている場合、CMKが完全に削除されると両方のデータにアクセスできなくなります。このようなインシデントに対して、どのように対処すべきかを正確に理解しておくことが重要です。

待機期間中であれば CancelKeyDeletion APIで削除をキャンセルできます。しかし、待機期間が過ぎてCMKが完全に削除された後は、AWS Supportに削除されたCMKの復元とデータの復旧を依頼する必要があります。

本記事では、KMS CMKの削除メカニズムと復旧方法を解説し、実際にAWSコンソールでCMKの削除スケジュールとキャンセルの操作を体験します。

KMSの暗号化キーの種類と特徴については、AWS暗号化キーの使い方 – 3種類の特徴と選び方を参照してください。

CMK削除によるデータ損失リスクと復旧フロー(待機期間中のキャンセルと削除後のAWS Support依頼)の全体図
CMK削除によるデータ損失リスクと復旧フロー(待機期間中のキャンセルと削除後のAWS Support依頼)の全体図

この記事のメリット

  • KMS CMKの削除メカニズム(待機期間、PendingDeletion状態)を正確に理解できる
  • CMK削除後に暗号化データが復号不能になる影響範囲(EBS、S3など)を把握できる
  • 待機期間中の CancelKeyDeletion による復旧手順と、削除後のAWS Supportへの依頼方法を区別して理解できる
  • CloudWatch AlarmやSCPを使ったCMK削除の予防策を習得できる
  • SCS試験でCMK削除に関するインシデント対応の問いに正確に答えられるようになる

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

KMS CMKの削除メカニズム

KMS CMKの削除は、誤操作によるデータ損失を防ぐために即時削除ではなく、待機期間を設けた2段階のプロセスで行われます。

CMK削除の2段階プロセス(ScheduleKeyDeletion → 待機期間 → 完全削除)のフロー図
CMK削除の2段階プロセス(ScheduleKeyDeletion → 待機期間 → 完全削除)のフロー図

ScheduleKeyDeletion API

CMKの削除は ScheduleKeyDeletion APIを呼び出すことで開始されます。このAPIでは、7日から30日の間で待機期間(Waiting Period)を指定します。デフォルトは30日です。

aws kms schedule-key-deletion \
    --key-id arn:aws:kms:ap-northeast-1:123456789012:key/xxxx-xxxx-xxxx \
    --pending-window-in-days 7

待機期間中のCMKの状態

削除がスケジュールされると、CMKの状態は Enabled から PendingDeletion に変わります。PendingDeletion 状態のCMKには以下の制約があります。

操作可否説明
データの暗号化(Encrypt)不可キーが無効化されているため使用できない
データの復号(Decrypt)不可キーが無効化されているため使用できない
キーの状態確認(DescribeKey)可能KeyState が PendingDeletion であることを確認できる
削除のキャンセル(CancelKeyDeletion)可能待機期間中に限り、削除をキャンセルできる
キーポリシーの変更不可キーの管理操作も制限される

重要な点として、PendingDeletion 状態になった時点で暗号化・復号の操作は即座に使用不可となります。待機期間の満了を待たずに、暗号化データへのアクセスは失われます。

CMK削除後のデータへの影響

CMKが完全に削除されると、そのキーで暗号化されたすべてのデータは復号できなくなります。

サービス影響
EBSボリュームボリュームのデータを読み取れなくなる。スナップショットからの復元もできない
S3バケットSSE-KMSで暗号化されたオブジェクトをダウンロードできなくなる
RDS暗号化されたデータベースのデータにアクセスできなくなる
EFS暗号化されたファイルシステムのデータを読み取れなくなる

CMKは複数のサービスで共有して使用されることがあるため、1つのCMKの削除が広範囲に影響する可能性があります。

CMKの復元方法

CMKの復元方法は、削除プロセスの段階によって異なります。

待機期間中の場合: CancelKeyDeletion

待機期間中であれば、CancelKeyDeletion APIで削除をキャンセルできます。

aws kms cancel-key-deletion \
    --key-id arn:aws:kms:ap-northeast-1:123456789012:key/xxxx-xxxx-xxxx

キャンセル後、CMKの状態は PendingDeletion から Disabled に変わります。キーを再び使用するには、EnableKey APIで明示的に有効化する必要があります。

aws kms enable-key \
    --key-id arn:aws:kms:ap-northeast-1:123456789012:key/xxxx-xxxx-xxxx

削除後の場合: AWS Supportへの依頼

待機期間が終了してCMKが完全に削除された場合、CancelKeyDeletion は使用できません。この場合は、AWS Supportに削除されたCMKの復元とデータの復旧を依頼します。AWS Supportが対応可能かどうかはケースバイケースですが、これが唯一の復旧手段です。

対処方法の比較

CMK削除に伴うデータ復旧について、考えられる対処方法を比較します。

対処方法有効性説明
AWS Supportに削除されたCMKの復元を依頼する有効CMKが完全に削除された場合の唯一の復旧手段。CMKが復元されれば、EBS・S3の両方のデータを復号できる
AWS Supportに暗号化されたS3データのリカバリを依頼する部分的S3のデータのみの対処であり、EBSボリュームの復旧には対応できない。CMK自体を復元する方が根本的な解決になる
暗号化されたEBSボリュームを別リージョンにコピーする無効CMKが使用不可の状態では、ボリュームのコピー操作自体が失敗する。復号にCMKが必要なため回避策にならない
以前のバッキングキー(キーマテリアル)で復号する無効CMKが削除されるとすべてのバッキングキーも削除される。個別のバッキングキーを使って復号することはできない

最も適切な対処は、AWS SupportにCMK自体の復元を依頼することです。CMKが復元されれば、そのキーで暗号化されたすべてのリソース(EBS、S3など)のデータを復号できるようになります。

予防策

CMKの誤削除や悪意のある削除を防ぐために、以下の予防策を講じることが推奨されます。

1. CMK削除権限の制限

IAMポリシーで kms:ScheduleKeyDeletion アクションを明示的に拒否し、CMKの削除をスケジュールできるユーザーを制限します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyKeyDeletion",
            "Effect": "Deny",
            "Action": "kms:ScheduleKeyDeletion",
            "Resource": "*"
        }
    ]
}

2. CloudWatch Alarmによる削除スケジュール検知

CloudTrailのログをCloudWatch Logsに連携し、ScheduleKeyDeletion イベントが発生した際にアラームを発報する設定を行います。これにより、CMKの削除がスケジュールされた時点で即座に検知し、待機期間中にキャンセルできます。

メトリクスフィルターのパターンは以下の通りです。

{ ($.eventName = "ScheduleKeyDeletion") }

3. SCPによる組織全体での削除禁止

AWS Organizationsを使用している場合、SCP(サービスコントロールポリシー)で kms:ScheduleKeyDeletion を組織全体で禁止できます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyKMSKeyDeletion",
            "Effect": "Deny",
            "Action": "kms:ScheduleKeyDeletion",
            "Resource": "*"
        }
    ]
}

SCPによる制御は、個別のIAMポリシーよりも強力で、組織内のすべてのアカウントに適用されます。

フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

実践

ここでは、KMS CMKの削除スケジュールとキャンセルの操作を体験します。CMKの状態が PendingDeletion になると暗号化・復号ができなくなることを確認し、CancelKeyDeletion で復旧する手順を実施します。さらに、CloudWatch Alarmによる削除スケジュールの検知設定も行います。

前提条件

  • リージョン: ap-northeast-1(東京)
  • 以下のリソースが作成済みであること
リソース種別リソース名用途
KMS CMKlab-cmk(対称暗号化キー)削除スケジュール・キャンセルの操作対象
CloudTrail 証跡(任意の名前)KMS APIイベントの記録用
CloudWatch Logs ロググループ(CloudTrailの配信先)メトリクスフィルター作成用

手順1: CMKの削除をスケジュールする

AWSマネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。

上部の検索バーに KMS と入力し、表示された「Key Management Service」を選択します。

左側ナビゲーションの「カスタマー管理型のキー」を選択します。

キーの一覧から lab-cmk を選択します。

lab-cmk のキー詳細画面(ステータスが「有効」であることを確認)
lab-cmk のキー詳細画面(ステータスが「有効」であることを確認)

「キーのアクション」ドロップダウンから「キーの削除をスケジュール」を選択します。

「キーの削除をスケジュール」画面が開きます。以下を設定します。

  • 待機期間 (日数): 7(7〜30日の範囲で指定できます。ここでは最短の7日で動作確認を行います)
  • 「確認」セクションのチェックボックスにチェックを入れる(待機期間に入力した日数がそのまま文面に反映されます)
キーの削除をスケジュール確認画面(待機期間7日を設定した状態)
キーの削除をスケジュール確認画面(待機期間7日を設定した状態)

「削除をスケジュール」をクリックします。

手順2: 待機期間中のキーの状態を確認する

削除がスケジュールされると、キー一覧に戻ります。lab-cmk のステータスが「削除保留中」に変わっていることを確認します。

lab-cmk を選択して詳細画面を開きます。

lab-cmk の詳細画面(ステータスが「削除保留中」、削除予定日が表示されている状態)
lab-cmk の詳細画面(ステータスが「削除保留中」、削除予定日が表示されている状態)

「一般設定」セクションで以下を確認します。

  • ステータス: 削除保留中(PendingDeletion)
  • スケジュールされた削除日: 現在日時から7日後の日時が表示されている

手順3: 暗号化されたリソースへのアクセス試行

PendingDeletion 状態のCMKで暗号化操作ができないことを確認します。

上部の検索バーに CloudShell と入力し、表示された「CloudShell」を選択します。

CloudShellで以下のコマンドを実行し、PendingDeletion 状態のCMKで暗号化を試みます。<キーID> は lab-cmk のキーIDに置き換えてください。

aws kms encrypt \
    --key-id <キーID> \
    --plaintext "TestData" \
    --region ap-northeast-1

以下のようなエラーが表示されます。

An error occurred (KMSInvalidStateException) when calling the Encrypt operation:
arn:aws:kms:ap-northeast-1:123456789012:key/xxxx-xxxx-xxxx is pending deletion.
CloudShellで暗号化コマンドを実行し、KMSInvalidStateExceptionエラーが表示された画面
CloudShellで暗号化コマンドを実行し、KMSInvalidStateExceptionエラーが表示された画面

このエラーにより、PendingDeletion 状態のCMKでは暗号化操作が拒否されることが確認できます。復号操作(Decrypt)も同様に失敗します。KMSInvalidStateException は「キーの状態が、そのリクエストを受け付けられる状態ではない」ことを表すエラーです。

手順4: CancelKeyDeletionでキー削除をキャンセルする

上部の検索バーに KMS と入力し、表示された「Key Management Service」を選択します。

左側ナビゲーションの「カスタマー管理型のキー」を選択し、lab-cmk を選択します。

「キーのアクション」ドロップダウンから「キーの削除をキャンセル」を選択します。確認ダイアログは表示されず、その場でキャンセルが実行されます。

キーの削除キャンセル後の詳細画面(ステータスが「無効」に変わった状態)
キーの削除キャンセル後の詳細画面(ステータスが「無効」に変わった状態)

キーの状態が「無効」(Disabled)に変わります。削除はキャンセルされましたが、キーはまだ無効な状態です。

手順5: キーが再び使用可能になったことを確認する

キーを再び使用するには、明示的に有効化する必要があります。

lab-cmk の詳細画面で「キーのアクション」ドロップダウンから「有効」を選択します(Disabled のキーではこの項目が「有効」、Enabled のキーでは「無効」と表示されます)。

確認ダイアログは表示されず、ステータスが「有効」(Enabled)に変わります。

lab-cmk の詳細画面(ステータスが「有効」に戻った状態)
lab-cmk の詳細画面(ステータスが「有効」に戻った状態)

CloudShellで再度暗号化を試みます。

aws kms encrypt \
    --key-id <キーID> \
    --plaintext "TestData" \
    --region ap-northeast-1

今度はエラーなく暗号化が成功し、CiphertextBlob が返されることが確認できます。

CloudShellで暗号化コマンドが成功した画面(CiphertextBlobが返されている状態)
CloudShellで暗号化コマンドが成功した画面(CiphertextBlobが返されている状態)

手順6: CloudWatch Alarmでキー削除スケジュールを検知する設定

CMKの削除がスケジュールされた際に即座に検知できるよう、CloudWatch Alarmを設定します。

上部の検索バーに CloudWatch と入力し、表示された「CloudWatch」を選択します。

左側ナビゲーションの「ログ」→「ログ管理」を選択します。

CloudTrailのログが配信されているロググループを選択します。

メトリクスフィルターの作成

ロググループの詳細画面下部にある「メトリクスフィルター」タブを選択し、「メトリクスフィルターを作成」をクリックします。3ステップのウィザードが開きます。

「ステップ 1: パターンを定義」で以下を入力します。

  • フィルターパターン: { ($.eventName = "ScheduleKeyDeletion") }

入力候補のドロップダウンが開いたままだと下の項目が隠れるので、Esc キーか画面の余白をクリックして閉じます。

メトリクスフィルター作成ウィザードのパターン入力画面
メトリクスフィルター作成ウィザードのパターン入力画面

「次へ」をクリックし、「ステップ 2: メトリクスの割り当て」で以下を設定します。

  • フィルター名: KMSKeyDeletionScheduled
  • メトリクス名前空間: CloudTrailMetrics(既存の名前空間がない場合は「新規作成」がオンのまま入力します)
  • メトリクス名: KMSKeyDeletionScheduledCount
  • メトリクス値: 1
  • デフォルト値 – オプション: 0
メトリクスフィルター作成ウィザードのメトリクス割り当て画面
メトリクスフィルター作成ウィザードのメトリクス割り当て画面

「次へ」をクリックし、「ステップ 3: プレビューと作成」で内容を確認して「メトリクスフィルターを作成」をクリックします。

アラームの作成

メトリクスフィルターの一覧に戻ったら、作成した KMSKeyDeletionScheduled の行を選択します(行を選択するまで「アラームを作成」は押せません)。

「アラームを作成」をクリックすると、別タブでアラームの作成ウィザードが開きます。メトリクスは選択したフィルターのものが自動で入っています。

「ステップ1: メトリクスと条件の指定」で以下を設定します。

  • 統計: 合計(デフォルト)
  • 期間: 5 分(デフォルト)
  • しきい値の種類: 静的(デフォルト)
  • アラーム条件: 以上(デフォルトは「より大きい」)
  • しきい値: 1
CloudWatch Alarmの条件設定画面
CloudWatch Alarmの条件設定画面

「次へ」をクリックし、「ステップ2: アクションの設定」で通知を設定します。

  • アラーム状態トリガー: アラーム状態(デフォルト)
  • 次の SNS トピックに通知を送信: 「既存の SNS トピックを選択」で既存のトピックを選ぶか、「新しいトピックの作成」でトピック名と通知先メールアドレスを入力します

「次へ」をクリックし、「ステップ3: アラームの詳細の追加」でアラーム名を設定します。

  • アラーム名: KMSKeyDeletionScheduledAlarm

「次へ」をクリックし、「ステップ4: プレビューと作成」で内容を確認して「アラームの作成」をクリックします。

作成直後はまだメトリクスのデータ点がないため、アラームの状態は「データ不足」と表示されます。

作成されたCloudWatch Alarmの詳細画面(状態としきい値)
作成されたCloudWatch Alarmの詳細画面(状態としきい値)

この設定により、ScheduleKeyDeletion APIが呼び出されると5分以内にアラームが発報され、SNS経由で通知が送信されます。通知を受けたら、待機期間中に CancelKeyDeletion を実行してCMKの削除をキャンセルできます。

まとめ

KMS CMKの削除は、暗号化データへのアクセスを永久に失うリスクがあるため、適切な対処と予防策が重要です。

状況対処方法結果
待機期間中(7-30日)CancelKeyDeletion APIで削除をキャンセルキーは Disabled 状態になる。EnableKey で再有効化が必要
待機期間終了後(CMK削除済み)AWS Supportに削除されたCMKの復元を依頼CMKが復元されれば、暗号化データを再び復号できる
予防策IAMポリシー / SCP で ScheduleKeyDeletion を拒否権限のないユーザーによる削除スケジュールを防止
検知策CloudWatch Alarm で ScheduleKeyDeletion を検知削除がスケジュールされた時点で即座に通知を受けられる

CMK削除のインシデント対応で最も重要なポイントは以下の通りです。

  • PendingDeletion 状態になった時点で暗号化・復号は即座に使用不可になる
  • 待機期間中であれば CancelKeyDeletion で復旧できる
  • CMKが完全に削除された場合は、AWS SupportにCMK自体の復元を依頼する(S3やEBS個別のデータリカバリではなく、CMKの復元が根本的な解決策)
  • CloudWatch AlarmやSCPによる予防策を事前に設定しておくことで、インシデント自体を防止できる

参照先

フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次