

KMSのカスタマー管理キーはCLIでも即削除できない
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
KMSのカスタマー管理キーを消そうとしたらマネジメントコンソールでは「削除をスケジュール」しか出てこない。CLIならバシッと消せるのでは?と思って調べたけど、結論としてCLIでもAPIでも即時削除はできなかった。
結論
- キー削除のAPIは
ScheduleKeyDeletionだけで、待機期間は 最短7日・最長30日(省略時は30日) - CLI(
aws kms schedule-key-deletion)もSDKも中身は同じAPIなので、7日未満にはできない - 「今すぐ使えなくしたい」だけなら、無効化(
disable-key)は即時に効く
aws kms schedule-key-deletion \ --key-id <key-id> \ --pending-window-in-days 7--pending-window-in-days に7未満を渡しても受け付けられない。APIリファレンス上も PendingWindowInDays の最小値は7になっている。
なお、IAMやキーポリシーの条件キー kms:ScheduleKeyDeletionPendingWindowInDays を使うと、指定できる待機日数をさらに絞れる(例: 30日固定にして短縮させない)。
待機期間中に何が起きるか
ScheduleKeyDeletion を実行すると、キーは PendingDeletion 状態になる。この間キーは無効化された扱いで、暗号化・復号などの暗号オペレーションはすべて失敗する。待機期間が明けると、キー本体・キーマテリアル・関連するエイリアスなどが削除される。
待機中であれば cancel-key-deletion で取り消せる。取り消し後のキーは Disabled 状態になるので、使うなら enable-key で有効化し直す必要がある。
stateDiagram-v2
Enabled --> PendingDeletion: schedule-key-deletion
Disabled --> PendingDeletion: schedule-key-deletion
Enabled --> Disabled: disable-key
Disabled --> Enabled: enable-key
PendingDeletion --> Disabled: cancel-key-deletion
PendingDeletion --> [*]: 待機期間(7〜30日)経過で削除
マルチリージョンキーの場合
マルチリージョンのプライマリキーにレプリカが残っている場合、プライマリはすぐには消えない。待機期間のカウントは最後のレプリカキーが削除された時点から始まる。
なぜ即削除できないのか
KMSのキーが消えると、そのキーで暗号化していたデータは二度と復号できなくなる。S3、EBS、RDS、Secrets Managerなど、キーを参照しているリソースのデータがまとめて読めなくなる可能性がある。
待機期間はその事故を防ぐための猶予で、「本当に誰も使っていないか」を確認する期間として使える。
待機中にキーが使われていないか検知する
公式ドキュメントに、CloudTrail・CloudWatch Logs・SNSを組み合わせて、削除保留中のキーが使われようとしたら通知するアラームの作り方が載っている。
やることは以下の流れ。
- CloudTrailのログをCloudWatch Logsに送る
- ロググループにメトリクスフィルターを作る
- そのメトリクスにCloudWatchアラームを設定し、SNSで通知する
メトリクスフィルターのパターンはドキュメント記載のものがそのまま使える。
{ $.eventSource = kms* && $.errorMessage = "* is pending deletion."}flowchart LR
A[アプリ等が削除保留中のキーを使用] --> B[KMSがエラーを返す]
B --> C[CloudTrailに記録]
C --> D[CloudWatch Logs<br/>メトリクスフィルター]
D --> E[CloudWatchアラーム]
E --> F[SNS通知]
F --> G[cancel-key-deletionで取り消し検討]
通知が来たら、まだそのキーを必要としているリソースがあるということなので、削除を取り消して見直す。ただしこのアラームは、非対称キーの公開鍵をKMSの外で使うケースは検知できない。
すぐ使えなくしたい場合の選択肢
| 方法 | 効果 | 元に戻せるか |
|---|---|---|
disable-key |
即座に暗号オペレーション不可 | enable-key で戻せる |
schedule-key-deletion |
即座に使用不可、7〜30日後に削除 | 待機中なら cancel-key-deletion で戻せる |
delete-imported-key-material |
キーマテリアルを即削除し使用不可 | 同じキーマテリアルを再インポートすれば戻せる |
delete-imported-key-material は、キーマテリアルを自分でインポートしたキー(Originが EXTERNAL)専用。実行するとキーは PendingImport 状態になり、暗号オペレーションに使えなくなる。KMSが生成したキーマテリアル(Originが AWS_KMS)には使えない。
インポート型のキーで手元にキーマテリアルのコピーを持っていなければ、マテリアル削除の時点で実質的に復旧不能になる。即時性はあるけど、待機期間という安全網がない分リスクも大きい。キー本体のリソースは残るので、完全に消すにはやはり schedule-key-deletion が必要になる。