KMSインポートキーマテリアルと即時削除 ── DeleteImportedKeyMaterialによる暗号化キーの即座無効化

目次

概要

AWS KMSでは、キーの削除に通常7〜30日の待機期間が必要です。しかし、コンプライアンス要件やセキュリティインシデントへの対応で、暗号化キーを即座に無効化しなければならないケースがあります。たとえば、機密データの暗号化に使用していたキーを、契約終了時やデータ保持期限の到来時に待機期間なしで削除し、データを即座にアクセス不能にしたい場合です。

このような要件を満たすのが、KMSのインポートキーマテリアル機能です。自分で生成したキーマテリアルをKMSにインポートし、不要になった時点で DeleteImportedKeyMaterial APIを呼び出すことで、待機期間なしでキーマテリアルを即座に削除できます。キーマテリアルが削除されると、そのKMSキーで暗号化されたデータは復号できなくなります。

本記事では、インポートキーマテリアルの仕組みと即時削除の特性を解説し、S3のSSE-KMS暗号化と組み合わせた実践を行います。

[!NOTE] KMSの3種類のキータイプ(AWS所有キー、AWSマネージドキー、カスタマーマネージドキー)についてはAWS暗号化キーの使い方 – 3種類の特徴と選び方を参照してください。

KMSインポートキーマテリアルの全体フロー(キーマテリアル生成→KMSにインポート→S3暗号化に使用→DeleteImportedKeyMaterialで即時削除→データアクセス不能)を示す図
KMSインポートキーマテリアルの全体フロー(キーマテリアル生成→KMSにインポート→S3暗号化に使用→DeleteImportedKeyMaterialで即時削除→データアクセス不能)を示す図

この記事のメリット

  • 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_CLOUDHSMCloudHSMクラスター内のHSMがキーマテリアルを生成CloudHSMクラスター内で管理不可(ScheduleKeyDeletion で7〜30日の待機期間が必要)

インポートキーマテリアルの仕組み

インポートキーマテリアルを使用するKMSキーは、以下の手順で作成します。

  1. KMSキーの作成(オリジン: EXTERNAL): キーマテリアルなしのKMSキーシェル(空のキー)を作成する
  2. ラッピングキーとインポートトークンのダウンロード: KMSが生成した公開鍵(ラッピングキー)とインポートトークンを取得する
  3. キーマテリアルの生成と暗号化: OpenSSL等で256ビットのキーマテリアルを生成し、ラッピングキーで暗号化する
  4. キーマテリアルのインポート: 暗号化されたキーマテリアルとインポートトークンをKMSに送信する
インポートキーマテリアルのフロー図(ユーザー側でキーマテリアルを生成→ラッピングキーで暗号化→KMSにインポート→KMSキーが有効化される流れ)
インポートキーマテリアルのフロー図(ユーザー側でキーマテリアルを生成→ラッピングキーで暗号化→KMSにインポート→KMSキーが有効化される流れ)

ラッピングキーは、インポート時にキーマテリアルを安全に転送するための公開鍵です。KMSがインポートされたキーマテリアルを受け取ると、対応する秘密鍵で復号し、HSM内に安全に保存します。

DeleteImportedKeyMaterial APIの即時性

DeleteImportedKeyMaterial APIは、インポートされたキーマテリアルを即座に削除します。

  • 呼び出し後、KMSキーのステータスは即座に PendingImport に変わる
  • 待機期間は存在しない。キャンセルもできない
  • キーマテリアルが削除された時点で、そのKMSキーを使った暗号化・復号操作はすべて失敗する
  • KMSキー自体(キーID、キーポリシー、エイリアスなど)は残る。同じキーマテリアルを再インポートすれば復元可能

この「キーマテリアルを再インポートすれば復元できる」という特性は、インポートキーマテリアルならではのメリットです。ユーザー側でキーマテリアルのコピーを安全に保管しておくことで、一時的な無効化と再有効化が可能になります。

ScheduleKeyDeletion APIとの違い

KMSキーを完全に削除する場合は ScheduleKeyDeletion APIを使用しますが、こちらには必ず待機期間があります。

項目DeleteImportedKeyMaterialScheduleKeyDeletion
対象インポートされたキーマテリアルのみすべてのKMSキー(オリジン問わず)
待機期間なし(即時)7〜30日(デフォルト30日)
キャンセル不可(ただし再インポートで復元可能)待機期間中であれば CancelKeyDeletion でキャンセル可能
削除される対象キーマテリアルのみ(キーメタデータは残る)KMSキー全体(メタデータ含む)
キーステータスPendingImport(再インポート可能)PendingDeletion → 削除後は復元不可
復元同じキーマテリアルの再インポートで可能待機期間中のキャンセルのみ。削除後は不可

各選択肢の比較

暗号化キーの即時削除が求められるケースで、考えられる選択肢を比較します。

選択肢S3暗号化の統合即時削除継続的な管理コスト拡張性
KMSインポートキーマテリアル + DeleteImportedKeyMaterialSSE-KMSとしてシームレスに統合可能(即時)低い(KMSマネージドサービス)高い(KMSの機能をフル活用)
AWS CloudHSMSSE-KMSとしてカスタムキーストア経由で統合可能不可(ScheduleKeyDeletion が必要)高い(HSMクラスターの運用管理が必要)中程度(HSMクラスターの管理が必要)
KMS CMK(AWS_KMS)+ ScheduleKeyDeletionSSE-KMSとしてシームレスに統合不可(7〜30日の待機期間)低い高い
Systems Manager Parameter StoreS3暗号化との直接統合なしキーの管理機能を持たない低い限定的(暗号化キー管理は目的外)

「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 の実務経験があるなら、単価を上げにいく

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

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

実践

前提条件

  • 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: キーを設定」で以下を設定します。

  • キーのタイプ: 対称(デフォルト)
  • キーの使用法: 暗号化および復号化(デフォルト)
  • 「詳細オプション」を展開し、キーマテリアルオリジン: 外部(キーマテリアルのインポート)
  • リージョンごと: 単一リージョンキー(デフォルト)
  • 「インポートされたキーの使用によるセキュリティおよび耐久性への影響について理解しています。」のチェックボックスにチェックを入れる
KMSキー作成画面 ── キーマテリアルオリジンで「外部」を選択し、確認チェックを入れた状態
KMSキー作成画面 ── キーマテリアルオリジンで「外部」を選択し、確認チェックを入れた状態

「次へ」をクリックし、「ステップ 2: ラベルを追加」で以下を入力します。

  • エイリアス: imported-key-demo
  • 説明: インポートキーマテリアルのテスト用

「ステップ 3: キーの管理アクセス許可を定義」「ステップ 4: キーの使用法アクセス許可を定義」「ステップ 5: キーポリシーを編集」はいずれもオプションです。デフォルトのまま「次へ」をクリックします。

「ステップ 6: 確認」で設定内容を確認し、「完了」をクリックします。

キーが作成されると、続けてキーマテリアルのインポート画面が開きます。この時点でキーのステータスは「インポート保留中」で、キーマテリアルがまだインポートされていないため暗号化操作には使用できません。

いったんキーの詳細画面を確認する場合は、成功メッセージの「キーを表示」をクリックします。

作成されたKMSキーの詳細画面 ── ステータスが「インポート保留中」、現在のキーマテリアル ID が空の状態
作成されたKMSキーの詳細画面 ── ステータスが「インポート保留中」、現在のキーマテリアル ID が空の状態

手順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:sha256

EncryptedKeyMaterial.bin が生成されたことを確認します。

ls -la EncryptedKeyMaterial.bin

[!NOTE] PlaintextKeyMaterial.bin(平文のキーマテリアル)は安全な場所に保管してください。キーマテリアルを削除した後に再インポートする場合、このファイルが必要です。

手順4: キーマテリアルをインポートする

AWSマネジメントコンソールに戻り、「ステップ 2: ラップされたキーマテリアルのアップロード」画面で以下を設定します。

  • ラップされたキーマテリアル: 手順3で生成した EncryptedKeyMaterial.bin を「ファイルの選択」から指定
  • インポートトークン: 手順2でダウンロードした ImportToken.bin を「ファイルの選択」から指定
  • 有効期限オプション: 「キーマテリアルの有効期限」のチェックは外したままにします(有効期限なし)
ラップされたキーマテリアルのアップロード画面 ── 暗号化されたキーマテリアルとインポートトークンを指定した状態
ラップされたキーマテリアルのアップロード画面 ── 暗号化されたキーマテリアルとインポートトークンを指定した状態

「初期のキーマテリアルをインポート」をクリックします。

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

KMSキーの詳細画面 ── ステータスが「有効」に変わり、現在のキーマテリアル ID が入った状態
KMSキーの詳細画面 ── ステータスが「有効」に変わり、現在のキーマテリアル 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を選択
  • バケットキー: 有効にする

その他の項目はデフォルトのままにします。

S3バケット作成画面のデフォルトの暗号化 ── SSE-KMSを選択し、imported-key-demoのキーを指定した状態
S3バケット作成画面のデフォルトの暗号化 ── SSE-KMSを選択し、imported-key-demoのキーを指定した状態

「バケットを作成」をクリックします。

バケットが作成されたら、テスト用のファイルをアップロードします。

  • 作成したバケットを選択し、「アップロード」をクリックします
  • 任意のテキストファイル(例: test.txt)をアップロードします
  • その他の設定はデフォルトのまま「アップロード」をクリックします

アップロード完了後、オブジェクトの詳細画面で「サーバー側の暗号化設定」セクションを確認します。暗号化タイプが SSE-KMS で、暗号化キー ARN が imported-key-demo のものであることを確認します。

S3オブジェクトの詳細画面 ── サーバー側の暗号化設定がSSE-KMSで、imported-key-demoのキーARNが表示されている状態
S3オブジェクトの詳細画面 ── サーバー側の暗号化設定がSSE-KMSで、imported-key-demoのキーARNが表示されている状態

「開く」をクリックするか「ダウンロード」をクリックして、ファイルの内容が正常に表示・ダウンロードできることを確認します。

手順6: DeleteImportedKeyMaterialによる即時削除と影響確認

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

「カスタマー管理型のキー」から imported-key-demo を選択します。

「キーマテリアルとローテーション」タブを選択します。「キーマテリアル」の表に、インポート済みのキーマテリアルが1行表示されています。

その行の右端「アクション」列のメニューを開き、「キーマテリアルの削除」を選択します。

確認モーダルが表示されます。「キーマテリアルを削除すると、同じキーマテリアルを同じ KMS キーに再インポートしない限り、AWS KMS キーで暗号化されたすべてのデータを回復できなくなります」という警告が出るので、入力欄に 削除 と入力してから「キーマテリアルの削除」をクリックします。

キーマテリアルの削除確認モーダル ── 警告メッセージと「削除」の入力欄が表示されている状態
キーマテリアルの削除確認モーダル ── 警告メッセージと「削除」の入力欄が表示されている状態

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

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>
S3オブジェクトのダウンロードエラー ── キーマテリアルが存在しないため復号できないエラーレスポンス
S3オブジェクトのダウンロードエラー ── キーマテリアルが存在しないため復号できないエラーレスポンス

これにより、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暗号化ともシームレスに統合でき、継続的なインフラ管理コストも低く抑えられます。

キーマテリアルを安全に保管しておけば、再インポートによる復元も可能なため、「即時無効化と必要に応じた復元」の両方を実現できます。

参照先

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

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

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

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

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

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

この記事を書いた人

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

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

目次