概要
AWS KMSでは、キーの削除に通常7〜30日の待機期間が必要です。しかし、コンプライアンス要件やセキュリティインシデントへの対応で、暗号化キーを即座に無効化しなければならないケースがあります。たとえば、機密データの暗号化に使用していたキーを、契約終了時やデータ保持期限の到来時に待機期間なしで削除し、データを即座にアクセス不能にしたい場合です。
このような要件を満たすのが、KMSのインポートキーマテリアル機能です。自分で生成したキーマテリアルをKMSにインポートし、不要になった時点で DeleteImportedKeyMaterial APIを呼び出すことで、待機期間なしでキーマテリアルを即座に削除できます。キーマテリアルが削除されると、そのKMSキーで暗号化されたデータは復号できなくなります。
本記事では、インポートキーマテリアルの仕組みと即時削除の特性を解説し、S3のSSE-KMS暗号化と組み合わせた実践を行います。
[!NOTE] KMSの3種類のキータイプ(AWS所有キー、AWSマネージドキー、カスタマーマネージドキー)についてはAWS暗号化キーの使い方 – 3種類の特徴と選び方を参照してください。

この記事のメリット
- KMSキーのキーマテリアルのオリジン(AWS_KMS / EXTERNAL)の違いを正確に理解できる
- インポートキーマテリアルの生成からKMSへのインポートまでの手順を実際に体験できる
DeleteImportedKeyMaterialとScheduleKeyDeletionの違い(即時削除 vs 待機期間あり)を把握できる- S3のSSE-KMS暗号化とインポートキーマテリアルの統合方法を理解できる
- SCS試験で暗号化キーの即時削除に関する問いに正確に答えられるようになる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

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



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



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
KMSキーのキーマテリアルオリジン
KMSキーを作成する際、キーマテリアルの生成元(オリジン)を選択できます。オリジンによって、キーの管理方法や削除の特性が異なります。
| オリジン | 説明 | キーマテリアルの管理 | 即時削除 |
|---|---|---|---|
| AWS_KMS(デフォルト) | KMSがキーマテリアルを自動生成 | AWS側で管理。ユーザーがエクスポートすることはできない | 不可(ScheduleKeyDeletion で7〜30日の待機期間が必要) |
| EXTERNAL | ユーザーが自分で生成したキーマテリアルをインポート | ユーザー側で管理。コピーの保持・再インポートが可能 | 可能(DeleteImportedKeyMaterial で即時削除) |
| AWS_CLOUDHSM | CloudHSMクラスター内のHSMがキーマテリアルを生成 | CloudHSMクラスター内で管理 | 不可(ScheduleKeyDeletion で7〜30日の待機期間が必要) |
インポートキーマテリアルの仕組み
インポートキーマテリアルを使用するKMSキーは、以下の手順で作成します。
- KMSキーの作成(オリジン: EXTERNAL): キーマテリアルなしのKMSキーシェル(空のキー)を作成する
- ラッピングキーとインポートトークンのダウンロード: KMSが生成した公開鍵(ラッピングキー)とインポートトークンを取得する
- キーマテリアルの生成と暗号化: OpenSSL等で256ビットのキーマテリアルを生成し、ラッピングキーで暗号化する
- キーマテリアルのインポート: 暗号化されたキーマテリアルとインポートトークンをKMSに送信する


ラッピングキーは、インポート時にキーマテリアルを安全に転送するための公開鍵です。KMSがインポートされたキーマテリアルを受け取ると、対応する秘密鍵で復号し、HSM内に安全に保存します。
DeleteImportedKeyMaterial APIの即時性
DeleteImportedKeyMaterial APIは、インポートされたキーマテリアルを即座に削除します。
- 呼び出し後、KMSキーのステータスは即座に
PendingImportに変わる - 待機期間は存在しない。キャンセルもできない
- キーマテリアルが削除された時点で、そのKMSキーを使った暗号化・復号操作はすべて失敗する
- KMSキー自体(キーID、キーポリシー、エイリアスなど)は残る。同じキーマテリアルを再インポートすれば復元可能
この「キーマテリアルを再インポートすれば復元できる」という特性は、インポートキーマテリアルならではのメリットです。ユーザー側でキーマテリアルのコピーを安全に保管しておくことで、一時的な無効化と再有効化が可能になります。
ScheduleKeyDeletion APIとの違い
KMSキーを完全に削除する場合は ScheduleKeyDeletion APIを使用しますが、こちらには必ず待機期間があります。
| 項目 | DeleteImportedKeyMaterial | ScheduleKeyDeletion |
|---|---|---|
| 対象 | インポートされたキーマテリアルのみ | すべてのKMSキー(オリジン問わず) |
| 待機期間 | なし(即時) | 7〜30日(デフォルト30日) |
| キャンセル | 不可(ただし再インポートで復元可能) | 待機期間中であれば CancelKeyDeletion でキャンセル可能 |
| 削除される対象 | キーマテリアルのみ(キーメタデータは残る) | KMSキー全体(メタデータ含む) |
| キーステータス | PendingImport(再インポート可能) | PendingDeletion → 削除後は復元不可 |
| 復元 | 同じキーマテリアルの再インポートで可能 | 待機期間中のキャンセルのみ。削除後は不可 |
各選択肢の比較
暗号化キーの即時削除が求められるケースで、考えられる選択肢を比較します。
| 選択肢 | S3暗号化の統合 | 即時削除 | 継続的な管理コスト | 拡張性 |
|---|---|---|---|---|
KMSインポートキーマテリアル + DeleteImportedKeyMaterial | SSE-KMSとしてシームレスに統合 | 可能(即時) | 低い(KMSマネージドサービス) | 高い(KMSの機能をフル活用) |
| AWS CloudHSM | SSE-KMSとしてカスタムキーストア経由で統合可能 | 不可(ScheduleKeyDeletion が必要) | 高い(HSMクラスターの運用管理が必要) | 中程度(HSMクラスターの管理が必要) |
KMS CMK(AWS_KMS)+ ScheduleKeyDeletion | SSE-KMSとしてシームレスに統合 | 不可(7〜30日の待機期間) | 低い | 高い |
| Systems Manager Parameter Store | S3暗号化との直接統合なし | キーの管理機能を持たない | 低い | 限定的(暗号化キー管理は目的外) |
「S3オブジェクトのシームレスな暗号化」「継続的な管理が不要」「高い拡張性」「キーの即時削除」のすべてを満たすのは、KMSインポートキーマテリアル + DeleteImportedKeyMaterial の組み合わせのみです。
インポートキーマテリアルとS3暗号化(SSE-KMS)の統合
インポートキーマテリアルを使用したKMSキーは、通常のカスタマーマネージドキーと同様にS3のSSE-KMS暗号化に使用できます。
- S3バケットのデフォルト暗号化にKMSキー(オリジン: EXTERNAL)を指定できる
PutObject時にx-amz-server-side-encryption: aws:kmsヘッダーを指定してオブジェクト単位でも使用可能- 暗号化・復号はKMS側で行われるため、S3から見た動作はオリジンに関係なく同じ
キーマテリアル削除後のデータへの影響
DeleteImportedKeyMaterial でキーマテリアルを削除すると、以下の影響があります。
- そのKMSキーで暗号化されたS3オブジェクトはダウンロードできなくなる(復号に必要なキーマテリアルが存在しないため)
- S3オブジェクト自体は削除されない。暗号化された状態でバケット内に残り続ける
- 同じキーマテリアルを再インポートすれば、再びオブジェクトをダウンロードできるようになる
- 異なるキーマテリアルをインポートしても、以前のデータは復号できない
実践
前提条件
- AWSマネジメントコンソールにログイン済みであること
- リージョンが
ap-northeast-1(東京)であること - OpenSSLがインストールされたターミナル環境があること(キーマテリアルの生成に使用)
この実践で作成するリソースは以下の通りです。
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| KMSキー | imported-key-demo | インポートキーマテリアル用のKMSキー(オリジン: EXTERNAL) |
| S3バケット | imported-key-demo-<アカウントID> | SSE-KMS暗号化の動作確認用 |
手順1: キーマテリアルなしのKMSキーを作成する
AWSマネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。
上部の検索バーに KMS と入力し、表示された「Key Management Service」を選択します。
左側ナビゲーションの「カスタマー管理型のキー」を選択し、「キーの作成」をクリックします。キーの作成は6ステップのウィザードで進みます。
「ステップ 1: キーを設定」で以下を設定します。
- キーのタイプ:
対称(デフォルト) - キーの使用法:
暗号化および復号化(デフォルト) - 「詳細オプション」を展開し、キーマテリアルオリジン:
外部(キーマテリアルのインポート) - リージョンごと:
単一リージョンキー(デフォルト) - 「インポートされたキーの使用によるセキュリティおよび耐久性への影響について理解しています。」のチェックボックスにチェックを入れる


「次へ」をクリックし、「ステップ 2: ラベルを追加」で以下を入力します。
- エイリアス:
imported-key-demo - 説明:
インポートキーマテリアルのテスト用
「ステップ 3: キーの管理アクセス許可を定義」「ステップ 4: キーの使用法アクセス許可を定義」「ステップ 5: キーポリシーを編集」はいずれもオプションです。デフォルトのまま「次へ」をクリックします。
「ステップ 6: 確認」で設定内容を確認し、「完了」をクリックします。
キーが作成されると、続けてキーマテリアルのインポート画面が開きます。この時点でキーのステータスは「インポート保留中」で、キーマテリアルがまだインポートされていないため暗号化操作には使用できません。
いったんキーの詳細画面を確認する場合は、成功メッセージの「キーを表示」をクリックします。


手順2: ラッピングキーとインポートトークンをダウンロードする
キーの作成直後に開く「ステップ 1: ラップパブリックキーとインポートトークンをダウンロード」画面で、以下を選択します(キーの詳細画面から入る場合は「キーマテリアルとローテーション」タブ →「新しいキーマテリアルをインポート」を選びます)。
- ラップキー仕様を選択:
RSA_4096 - 推奨(デフォルト) - ラップアルゴリズムの選択:
RSAES_OAEP_SHA_256
「ラップパブリックキーとインポートトークンをダウンロード」をクリックします。


ZIPファイルがダウンロードされます。展開すると以下のファイルが含まれています。
WrappingPublicKey.bin— ラップパブリックキー(公開鍵)ImportToken.bin— インポートトークンREADME.txt— 手順の説明
ラップパブリックキーとインポートトークンには有効期限(24時間)があります。期限が切れた場合は再ダウンロードが必要です。
手順3: キーマテリアルを生成して暗号化する
ターミナルを開き、ダウンロードしたZIPファイルを展開したディレクトリに移動します。
まず、256ビット(32バイト)のキーマテリアルをOpenSSLで生成します。
openssl rand -out PlaintextKeyMaterial.bin 32次に、ダウンロードしたラッピングキー(公開鍵)を使ってキーマテリアルを暗号化します。
openssl pkeyutl \
-encrypt \
-in PlaintextKeyMaterial.bin \
-out EncryptedKeyMaterial.bin \
-inkey WrappingPublicKey.bin \
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256EncryptedKeyMaterial.bin が生成されたことを確認します。
ls -la EncryptedKeyMaterial.bin[!NOTE]
PlaintextKeyMaterial.bin(平文のキーマテリアル)は安全な場所に保管してください。キーマテリアルを削除した後に再インポートする場合、このファイルが必要です。
手順4: キーマテリアルをインポートする
AWSマネジメントコンソールに戻り、「ステップ 2: ラップされたキーマテリアルのアップロード」画面で以下を設定します。
- ラップされたキーマテリアル: 手順3で生成した
EncryptedKeyMaterial.binを「ファイルの選択」から指定 - インポートトークン: 手順2でダウンロードした
ImportToken.binを「ファイルの選択」から指定 - 有効期限オプション: 「キーマテリアルの有効期限」のチェックは外したままにします(有効期限なし)


「初期のキーマテリアルをインポート」をクリックします。
インポートが成功すると、KMSキーのステータスが「有効」に変わり、「現在のキーマテリアル ID」にインポートしたキーマテリアルのIDが表示されます。


手順5: S3バケットでSSE-KMS暗号化として使用する
上部の検索バーに S3 と入力し、表示された「S3」を選択します。
「バケットを作成」をクリックし、以下を設定します。
- AWS リージョン:
アジアパシフィック (東京) ap-northeast-1 - バケットタイプ:
汎用(デフォルト) - バケット名:
imported-key-demo-<アカウントID>(アカウントIDは自身のものに置き換えてください)
「デフォルトの暗号化」セクションで以下を設定します。
- 暗号化タイプ:
AWS Key Management Service キーを使用したサーバー側の暗号化 (SSE-KMS) - AWS KMS キー: 「AWS KMS キーから選択する」を選び、一覧から
imported-key-demoのキーARNを選択 - バケットキー:
有効にする
その他の項目はデフォルトのままにします。


「バケットを作成」をクリックします。
バケットが作成されたら、テスト用のファイルをアップロードします。
- 作成したバケットを選択し、「アップロード」をクリックします
- 任意のテキストファイル(例:
test.txt)をアップロードします - その他の設定はデフォルトのまま「アップロード」をクリックします
アップロード完了後、オブジェクトの詳細画面で「サーバー側の暗号化設定」セクションを確認します。暗号化タイプが SSE-KMS で、暗号化キー ARN が imported-key-demo のものであることを確認します。


「開く」をクリックするか「ダウンロード」をクリックして、ファイルの内容が正常に表示・ダウンロードできることを確認します。
手順6: DeleteImportedKeyMaterialによる即時削除と影響確認
上部の検索バーに KMS と入力し、「Key Management Service」を選択します。
「カスタマー管理型のキー」から imported-key-demo を選択します。
「キーマテリアルとローテーション」タブを選択します。「キーマテリアル」の表に、インポート済みのキーマテリアルが1行表示されています。
その行の右端「アクション」列のメニューを開き、「キーマテリアルの削除」を選択します。
確認モーダルが表示されます。「キーマテリアルを削除すると、同じキーマテリアルを同じ KMS キーに再インポートしない限り、AWS KMS キーで暗号化されたすべてのデータを回復できなくなります」という警告が出るので、入力欄に 削除 と入力してから「キーマテリアルの削除」をクリックします。


削除が実行されると、KMSキーのステータスが即座に「インポート保留中」に変わります。待機期間は発生しません。


次に、S3オブジェクトへの影響を確認します。
上部の検索バーに S3 と入力し、「S3」を選択します。
imported-key-demo-<アカウントID> バケットを選択し、先ほどアップロードした test.txt を選択します。
「開く」または「ダウンロード」をクリックすると、KMSキーが使用できないためエラーになります。ブラウザには次のようなXMLのエラーレスポンスが表示されます。
<Error>
<Code>KMS.KMSInvalidStateException</Code>
<Message>arn:aws:kms:ap-northeast-1:123456789012:key/xxxx-xxxx-xxxx is pending import.</Message>
</Error>

これにより、DeleteImportedKeyMaterial によるキーマテリアルの即時削除が、暗号化データへのアクセスを即座に遮断することが確認できました。
[!NOTE] 手順3で保管した
PlaintextKeyMaterial.binを使って、手順2〜4と同じ手順でキーマテリアルを再インポートすれば、再びオブジェクトをダウンロードできるようになります。
まとめ
KMSキーの削除方法と特性を以下にまとめます。
| 削除方法 | 対象キー | 待機期間 | 復元 | 主なユースケース |
|---|---|---|---|---|
DeleteImportedKeyMaterial | オリジンがEXTERNALのKMSキー | なし(即時) | 同じキーマテリアルの再インポートで可能 | コンプライアンス要件による即時無効化、契約終了時のデータアクセス遮断 |
ScheduleKeyDeletion | すべてのKMSキー | 7〜30日 | 待機期間中に CancelKeyDeletion でキャンセル可能 | 通常のキーライフサイクル管理、誤削除防止を重視する場合 |
DisableKey | すべてのKMSキー | なし(即時に無効化) | EnableKey で再有効化可能 | 一時的な無効化(削除はしない) |
暗号化キーの即時削除が求められる場合、KMSのインポートキーマテリアル機能を使い、DeleteImportedKeyMaterial APIで待機期間なしにキーマテリアルを削除する方法が有効です。S3のSSE-KMS暗号化ともシームレスに統合でき、継続的なインフラ管理コストも低く抑えられます。
キーマテリアルを安全に保管しておけば、再インポートによる復元も可能なため、「即時無効化と必要に応じた復元」の両方を実現できます。
参照先
- キーマテリアルのインポート ステップ 1: キーマテリアルなしでKMSキーを作成する
- キーマテリアルのインポート ステップ 2: ラッピングキーとインポートトークンをダウンロードする
- キーマテリアルのインポート ステップ 3: キーマテリアルを暗号化する
- キーマテリアルのインポート ステップ 4: キーマテリアルをインポートする
- インポートしたキーマテリアルの削除
- インポートしたキーマテリアルについて
- KMSキーの削除
- Amazon S3 でのサーバー側の暗号化によるデータの保護












