AWS KMS キーにキーマテリアルをインポートする - AWS Key Management Service

AWS KMS キーにキーマテリアルをインポートする

提供するキーマテリアルで AWS KMS keys (KMS キー) を作成できます。

KMS キーは、暗号化キーの論理表現です。KMS キーのメタデータには、データを暗号化および復号するために使用されるキーマテリアルの ID が含まれます。KMS キーを作成すると、デフォルトで AWS KMS がその KMS キーのキーマテリアルを生成します。ただし、キーマテリアルを使用せずに KMS キーを作成し、独自のキーマテリアルをその KMS キーにインポートできます。この機能は、「キーの持ち込み」(BYOK) とも呼ばれます。

注記

AWS KMS では、暗号文が、インポートされたキーマテリアルを持つ KMS キーで暗号化された場合でも、AWS KMS の外部の AWS KMS 暗号文の復号はサポートされません。AWS KMS はこのタスクに必要な暗号文形式を公開せず、形式は予告なく変更される可能性があります。

インポートされたキーマテリアルは AWS KMS キーストア内の対称暗号化 KMS キー (マルチリージョン対称暗号化 KMS キーを含む) のみでサポートされます。非対称 KMS キーHMAC KMS キー、またはカスタムキーストア内の KMS キーではサポートされません。

インポートされたキーマテリアルを使用する場合、AWS KMS がそのコピーを使用できるようにしている間、キーマテリアルに対して責任を負います。そうする場合の理由として次のものが考えられます (複数が組み合わさる場合もあります)。

  • 要件を満たすエントロピーのソースを使用してキーマテリアルを生成したことを証明するため。

  • AWS サービスを使用してインフラストラクチャのキーマテリアルを使用する、および AWS KMS を使用して AWS 内のキーマテリアルのライフサイクルを管理するため。

  • AWS のキーマテリアルの有効期限を設定し、手動で削除しながらも、将来的に再び利用できるようにするため。これに対して、キー削除のスケジュールは、7 日から 30 日間の待機時間が必要となり、その後、削除された KMS キーは復元できません。

  • キーマテリアルのオリジナルコピーを所有し、それを AWS 外に保存して、キーマテリアルのライフサイクル期間に耐久性を高めディザスタリカバリに備えるには

インポートされたキーマテリアルは AWS KMS キーストア内の対称暗号化 KMS キー (マルチリージョン対称 KMS キーを含む) のみでサポートされます。非対称 KMS キーHMAC KMS キー、またはカスタムキーストア内の KMS キーではサポートされません。

インポートされたキーマテリアルを使用して、KMS キーの使用と管理を監視することができます。AWS KMS は、KMS キーを作成し、パブリックキーとインポートトークンをダウンロードし、キーマテリアルをインポートすると、AWS CloudTrail ログにエントリを記録します。AWS KMS は、インポートされたキーマテリアルを手動で削除した場合、または AWS KMS 期限切れのキーマテリアルを削除した場合にもエントリを記録します。

インポートされたキーマテリアルを持つ KMS キーと、AWS KMS で生成されたキーマテリアルを持つ KMS キーの重要な違いについては、「インポートしたキーマテリアルについて」を参照してください。

リージョン

AWS KMS がサポートする全ての AWS リージョン で、インポートされたキーマテリアルをサポートしています。中国リージョンでは、インポートされたキーマテリアルの要件が異なります。詳細については、「キーマテリアルのインポート ステップ 3: キーマテリアルを暗号化する」を参照してください。

インポートしたキーマテリアルについて

キーマテリアルを AWS KMS にインポートする前に、インポートされたキーマテリアルの以下の特性を理解する必要があります。

キーのマテリアルを生成する

お客様の責任において、セキュリティ要件を満たすランダムのソースを使用して、キーマテリアルを生成する必要があります。インポートするキーマテリアルは 256 ビット対称暗号化キーである必要があります。ただし、中国リージョンでは 128 ビット対称暗号化キーである必要があります。

キーマテリアルを削除できます。

インポートしたキーマテリアルを KMS キーから削除すると、KMS キーが使用できなくなることがあります。また、KMS キーにキーマテリアルをインポートすると、キーの有効期間を確認して、有効期間を設定することができます。有効期間が経過すると、AWS KMS キーマテリアルを削除します。キーマテリアルがない場合、KMS キーは暗号化オペレーションで使用することはできません。キーを復元するには、キーに同じキーマテリアルを再インポートする必要があります。

キーマテリアルを変更できません

KMS キーにキーマテリアルをインポートすると、KMS キーはキーマテリアルに永続的に関連付けられます。同じキーマテリアルを再インポートすることはできますが、別のキーマテリアルをその KMS キーにインポートすることはできません。また、インポートされたキーマテリアルを持つ KMS キーに対して、自動キーローテーションを有効にすることはできません。ただし、インポートされたキーマテリアルを持つ KMS キーを手動でローテーションすることはできます。

キーマテリアルの起源は変更できません

インポートされたキーマテリアルのために設計されている KMS キーには、変更することができない EXTERNALオリジンの値があります。インポートしたキーマテリアルの KMS キーを、AWS KMS を含めて、その他のソースのキーマテリアルを使用するように変換することはできません。

他の KMS キーでは復号できない

KMS キーでデータを暗号化すると、KMS キーとそのキーマテリアルに永続的に関連付けられます。同じキーマテリアルを持つ別の KMS キーを含めて、他の KMS キーを使用して復号することはできません。これは KMS キーのセキュリティ機能です。

唯一の例外はマルチリージョンキーであり、相互運用可能なように設計されています。詳細については、「」を参照してくださいインポートされたキーマテリアルを持つすべての KMS キーが相互運用できない理由

移植性またはエスクロー機能なし

AWS KMS が生成する暗号文は移植性ではありません。AWS KMS では、暗号文が、インポートされたキーマテリアルを持つ KMS キーで暗号化された場合でも、AWS KMS の外部の AWS KMS 暗号文の復号はサポートされません。AWS KMS はこのタスクに必要な暗号文形式を公開せず、形式は予告なく変更される可能性があります。

また、AWS Encryption SDKAmazonS3 クライアント側の暗号化などの AWS ツールを使用して、AWS KMS 暗号文を復号することはできません。

その結果、インポートされたキーマテリアルを含むキーを使用して、キーマテリアルへの条件付きアクセス権を持つ許可されたサードパーティーが AWS KMS の外部で特定の暗号文を復号できるキーエスクローの配置をサポートすることはできません。キーエスクローをサポートするには、AWS Encryption SDK を使用して、AWS KMS に依存しないキーでメッセージを暗号化します。

可用性と耐久性に責任があります

お客様は、キーマテリアルの全体的な可用性と耐久性に対して責任があります。AWS KMS は、インポートされたキーマテリアルの可用性を高めるために設計されています。ただし、AWS KMS では、インポートされたキーマテリアルの耐久性は、AWS KMS によって生成されたキーマテリアルと同じレベルでは維持されません。KMS キーから削除されたインポートされたキーマテリアルを復元するには、コントロールするシステムにキーマテリアルのコピーを保存する必要があります。その後、KMS キーに再インポートできます。

この相違は、次の場合に有意義です。

  • インポートされたキーマテリアルに有効期限を設定すると、 AWS KMS は有効期限が切れた後、キーマテリアルを削除します。AWS KMS は KMS キーやそのメタデータを削除しません。インポートされたキーマテリアルの有効期限が近づいたときに通知する Amazon CloudWatch アラームを作成できます

    AWS KMS が KMS キーに対して生成したキーマテリアルを削除することはできません。また、ローテーションさせることはできますが、AWS KMS キーマテリアルを期限切れに設定することはできません。

  • インポートされたキーマテリアルを手動で削除する場合、AWS KMS は、キーマテリアルを削除しますが、KMS キーまたはそのメタデータは削除しません。一方、キー削除のスケジュールは、7 日から 30 日間の待機期間を必要とし、その後、AWS KMS は KMS キー、そのメタデータおよびキーマテリアルをすべて削除します。

  • 万一 AWS KMS に影響する特定のリージョン全体への障害が発生した場合には (全体の停電など)、AWS KMS は、インポートされたキーマテリアルを自動的に復元できません。ただし、AWS KMS では、KMS キーおよびメタデータを復元できます。

キーマテリアルをインポートするためのアクセス許可

インポートされたキーマテリアルを使用して KMS キーを作成および管理するには、このプロセスのオペレーションに対するアクセス許可が必要です。KMS キーの作成時、キーポリシーに kms:GetParametersForImportkms:ImportKeyMaterialkms:DeleteImportedKeyMaterial のアクセス許可を付与できます。AWS KMS コンソールで、外部キーマテリアルオリジンを使用してキーを作成すると、これらの許可がキー管理者用に自動的に追加されます。

インポートされたキーマテリアルを持つ KMS キーを作成するには、プリンシパルに次の許可が必要です。

  • kms:CreateKey (IAM ポリシー)

    • インポートされたキーマテリアルを持つ KMS キーに対するこの許可を制限するには、EXTERNAL の値を持つ kms:KeyOrigin ポリシー条件を使用します。

      { "Sid": "CreateKMSKeysWithoutKeyMaterial", "Effect": "Allow", "Resource": "*", "Action": "kms:CreateKey", "Condition": { "StringEquals": { "kms:KeyOrigin": "EXTERNAL" } } }
  • KMS:GetParametersForImport (キーポリシーまたは IAM ポリシー)

    • 特定のラッピングアルゴリズムとラッピングキー仕様を使用する要求にこのアクセス許可を制限するには、KMS: WrappingAlgorithm および KMS: WrappingKeySpec ポリシー条件を使用します。

  • KMS:ImportKeyMaterial (キーポリシーまたは IAM ポリシー)

    • 有効期限が切れるキーマテリアルを許可または禁止し、有効期限を制御するには、KMS:ExpirationModel および KMS:Validto ポリシー条件を使用します。

インポートされたキーマテリアルを再インポートするには、プリンシパルに KMS:getParametersforImport および KMS:ImportKeyMaterial アクセス許可が必要です。

インポートされたキーマテリアルを削除するには、プリンシパルに KMS:DeleteImportedKeyMaterial アクセス許可が必要です。

例えば、インポートされたキーマテリアルを使用して KMS キーのすべての側面を管理する KMSAdminRole 許可をサンプルに付与するには、KMS キーのキーポリシーに次のようなキーポリシーステートメントを含めてください。

{ "Sid": "Manage KMS keys with imported key material", "Effect": "Allow", "Resource": "*", "Principal": { "AWS": "arn:aws:iam::111122223333:role/KMSAdminRole" }, "Action": [ "kms:GetParametersForImport", "kms:ImportKeyMaterial", "kms:DeleteImportedKeyMaterial" ] }

キーマテリアルのインポート方法

次に、AWS KMS にキーマテリアルをインポートする手順の概要を説明します。この手順の各ステップの詳細については、該当するトピックを参照してください。

  1. キーマテリアルを持たない対称暗号化 KMS キーを作成する – キーの仕様は SYMMETRIC_DEFAULT、オリジンは EXTERNAL である必要があります。EXTERNAL のキーオリジンは、キーがインポートされたキーマテリアル用に設計されていることを示しており、AWS KMS は KMS キーのキーマテリアルを生成することができません。後のステップで、この KMS キーに独自のキーマテリアルをインポートします。

  2. パブリックキーとインポートトークンのダウンロード — 手順 1 を完了した後、パブリックキーとインポートトークンをダウンロードします。これらの項目は、AWS KMS にインポートしている間、キーマテリアルを保護します。

  3. キーマテリアルの暗号化 — 手順 2 でダウンロードしたパブリックキーを使用して、独自のシステムで作成したキーマテリアルを暗号化します。

  4. キーマテリアルのインポート — 手順 3 で作成した暗号化されたキーマテリアルと、手順 2 でダウンロードしたインポートトークンをアップロードします。

    インポートオペレーションが正常に完了すると、KMS キーのキーステータスは PendingImport から Enabled に変化します。これで、KMS キーを暗号化オペレーションで使用できます。

AWS KMS は、KMS キーの作成パブリックキーとインポートトークンのダウンロードキーマテリアルのインポートをする際に、AWS CloudTrail ログにエントリを記録します。AWS KMS も、インポートされたキーマテリアルの削除または AWS KMS が有効期限切れのキーマテリアルの削除をする際にエントリを記録します。

キーマテリアルの再インポート方法

インポートされたキーマテリアルを使用して KMS キーを管理する場合、キーマテリアルを再インポートしなければならない場合があります。キーマテリアルを再インポートして、期限切れまたは削除されたキーマテリアルを置き換えることができます。キーマテリアルを再インポートして、キーマテリアルの有効期限モデルまたは有効期限を変更することもできます。

最初に KMS キーにインポートされたのと同じキーマテリアルを再インポートする必要があります。別のキーマテリアルを KMS キーにインポートすることはできません。また、AWS KMS はキーマテリアルなしで作成された KMS キーのキーマテリアルを作成することはできません。

キーマテリアルを再インポートするには、次のような例外を除いて、最初にキーマテリアルのインポートに使用したのと同じ手順を使用します。

  • 新しい KMS キーを作成する代わりに、既存の KMS キーを使用します。インポートの手順のステップ 1 はスキップできます。

  • KMS キーがキーマテリアルをインポート済みの場合、キーマテリアルを再インポートする前に、既存のインポートされたキーマテリアルを削除する必要があります。

  • キーマテリアルを再インポートするときに、有効期限モデルと有効期限を変更することができます。

KMS キーにキーマテリアルをインポートするたびに、KMS キーの新しいラップキーおよびインポートトークンをダウンロードして使用する必要があります。このラップの手順は、キーマテリアルの内容には影響しません。異なるラップキー (および異なるインポートトークン) を使用して同じキーマテリアルをインポートすることができます。

インポートされたキーマテリアルを持つKMS キーを識別する方法

キーマテリアルなしで KMS キーを作成する場合、KMS キーの Origin プロパティの値は EXTERNAL であり、変更することはできません。キーステータスと違って、Origin の値は、キーマテリアルの有無に依存しません。

EXTERNAL オリジン値を使用して、インポートされたキーマテリアル用に設計された KMS キーを識別することができます。AWS KMS コンソールでキーオリジンを検索するか、DescribeKey オペレーションを使用できます。コンソールまたは API を使用して、有効期限が切れるかどうか、いつ失効するかなどの、キーマテリアルのプロパティを表示することもできます。

インポートされたキーマテリアルで KMS キーを識別するには (コンソール)

  1. AWS KMS コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョン を変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. 次のいずれかの方法を使用して、KMS キーの Origin プロパティを表示します。

    • KMS キーテーブルに [Origin] (オリジン) 列を追加するには、右上隅の、[Settings] (設定) アイコンを選択します。[Origin] (オリジン)、[Confirm] (確認) の順に選択します。オリジン列では、EXTERNAL のオリジンプロパティ値を持つ KMS キーを簡単に識別できます。

    • 特定の KMS キーの Origin プロパティ値を検索するには、KMS キーのキー ID またはエイリアスを選択します。次に、[Cryptographic configuration] (暗号の設定) タブを選択します。これらのタブは、[General configuration] (一般設定) セクションの下にあります。

  4. キーマテリアルに関する詳細情報を表示するには、[Key material] (キーマテリアル) タブを選択します。このタブは、インポートされたキーマテリアルを持つKMS キーのみの詳細ページに表示されます。

インポートされたキーマテリアルを持つKMS キーを識別するには (AWS KMS API)

DescribeKey オペレーションを使用します。レスポンスには、次の例に示すように KMS キーの Origin プロパティ、有効期限モデル、有効期限日が含まれます。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyMetadata": { "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Origin": "EXTERNAL", "ExpirationModel": "KEY_MATERIAL_EXPIRES" "ValidTo": 1568894400.0, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333", "CreationDate": 1568289600.0, "Enabled": false, "MultiRegion": false, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "PendingImport", "KeyManager": "CUSTOMER", "KeySpec": "SYMMETRIC_DEFAULT", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

インポートされたキーマテリアルの有効期限を確認する CloudWatch アラームを作成する

KMS キーのインポートされたキーマテリアルの有効期限が近づいたときに通知する CloudWatch アラームを作成できます。例えば、有効期限が 30 日未満になるとアラームが通知します。

キーマテリアルを KMS キーにインポートすると、キーマテリアルの有効期限の日時を任意で指定することができます。キーマテリアルが有効期限切れになると、AWS KMS はキーマテリアルを削除し、KMS キーは使用不可能になります。KMS キーを再度使用するには、キーマテリアルを再インポートする必要があります。ただし、有効期限が切れる前にキーマテリアルを再インポートすると、その KMS キーを使用するプロセスが中断されるのを防ぐことができます。

このアラームは、インポートされたキーマテリアルの有効期限が切れた KMS キーを AWS KMS が CloudWatch に公開する SecondsUntilKeyMaterialExpires メトリクスを使用します。各アラームはこのメトリクスを使用して、特定の KMS キーのインポートされたキーマテリアルを監視します。キーマテリアルの有効期限が近づいているすべての KMS キーに対して単一のアラームを作成したり、将来作成する可能性のある KMS キーに対してアラームを作成したりすることはできません。

要件

インポートされたキーマテリアルの有効期限を監視する CloudWatch アラームには、次のリソースが必要です。

アラームの作成

静的しきい値に基づいて CloudWatch アラームを作成する」の指示に従ってください。他のフィールドについては、デフォルト値を受け入れ、必要に応じて名前を指定します。

フィールド
メトリクスの選択

[KMS] を選択し、次に [キーごとのメトリクス] を選択します。

KMS キーと SecondsUntilKeyMaterialExpires メトリクスを含む行を選択します。次に [Select metric] (メトリクスの選択) を選択します。

メトリクスリストには、インポートされたキーマテリアルが有効期限切れになっている KMS キーの SecondsUntilKeyMaterialExpires メトリクスのみが表示されます。アカウントとリージョンにこれらのプロパティを持つ KMS キーがない場合、このリストは空になります。

[Statistic] (統計) 最小
[Period] (期間) 1 分
しきい値タイプ [Static] (静的)
Whenever ... メトリクス名1 より大きい場合必ず

インポートされたキーマテリアルの削除

インポートされたキーマテリアルは、KMS キーからいつでも削除できます。また、有効期限のあるインポートされたキーマテリアルが期限切れになると、AWS KMS はキーマテリアルを削除します。どちらの場合も、AWS KMS はキーマテリアルをただちに削除します。KMS キーのキーステータスインポートの保留中に変わり、KMS キーは、暗号化オペレーションで使用することはできません。

ただし、これらのアクションでは KMS キーは削除されません。KMS キーを再度使用するには、KMS キーに同じキーマテリアルを再インポートする必要があります。一方、KMS キーの削除は破棄できません。キーの削除をスケジュールし、有効期限切れまでの必要な待機期間が終了すると、AWS KMS はキーマテリアルと KMS キーに関連付けられたすべてのメタデータを削除します。

キーマテリアルを削除するには、AWS Management Console または AWS KMS API を使用できます。HTTP リクエストを直接行うか、AWS SDKAWS Command Line Interface (AWS CLI)、AWS Tools for PowerShell を使用することで、API を使用できます。

インポートされたキーマテリアルを削除した場合、および AWS KMS が 有効期限切れのキーマテリアルを削除した場合、AWS KMS は AWS CloudTrail ログにエントリを記録します。

キーマテリアルの削除が、AWS KMS と統合された AWS のサービスに与える影響

キーマテリアルを削除すると、KMS キーは直ちに使用不可能になります。ただし、AWS サービスが使用しているデータキーは、すぐには影響を受けません。つまり、キーマテリアルの削除は、KMS キーの下で保護されているデータおよび AWS リソースすべてに、すぐには影響を与えない可能性がありますが、最終的には影響を与えます。

AWS KMS と統合された複数の AWS サービスがデータを保護しています。Amazon EBS および Amazon Redshift などの一部のサービスでは、AWS KMS でAWS KMS key (KMS キー) を使用してデータキーを生成し、そのデータキーを使用してデータを暗号化します。これらのプレーンテキストデータキーは、保護対象のデータが使用されている限り、メモリ内に残ります。

例えば、次のシナリオが考えられます。

  1. 暗号化された EBS ボリュームを作成し、インポートされたキーマテリアルを使用して KMS キーを指定します。Amazon EBS は、KMS キーを使用してボリュームの暗号化されたデータキーを生成するよう、AWS KMS に要求します。Amazon EBS は、暗号化されたデータキーをボリュームとともに保存します。

  2. EBS ボリュームを EC2 インスタンスにアタッチすると、Amazon EC2 は AWS KMS に、KMS キーを使用して EBS ボリュームの暗号化されたデータキーを復号するよう要求します。Amazon EC2 は、プレーンテキストのデータキーをハイパーバイザーメモリに保存し、それを使用して EBS ボリュームへのディスク I/O を暗号化します。データキーは、EBS ボリュームが EC2 インスタンスにアタッチされる限り、メモリ内で維持されます。

  3. インポートされたキーマテリアルを KMS キーから削除すると、KMS キーを使用できなくなります。これによって EC2 インスタンスまたは EBS ボリュームにただちに影響が出ることはありません。その理由は、Amazon EC2 が KMS キーではなくプレーンテキストのデータキーを使用して、ボリュームがインスタンスにアタッチされている間、すべてのディスク I/O を暗号化しているためです。

  4. ただし、暗号化された EBS ボリュームが EC2 インスタンスからデタッチされると、Amazon EBS はプレーンテキストのキーをメモリから削除します。次回、暗号化された EBS ボリュームが EC2 インスタンスにアタッチされると、アタッチメントは失敗します。これは、Amazon EBS は KMS キーを使用してボリュームの暗号化されたデータキーを復号できないためです。EBS ボリュームを再度使用するには、KMS キーに同じキーマテリアルを再インポートする必要があります。

キー資料の削除 (コンソール)

AWS Management Console を使用して、キーマテリアルを削除できます。

  1. AWS Management Console にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョン を変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. ナビゲーションペインで、[Customer managed keys] (カスタマーマネージドキー) を選択します。

  4. 次のいずれかを実行します。

    • インポートされたキーマテリアルを使用して、KMS キーのチェックボックスをオンにします。[キーのアクション]、[キーマテリアルの削除] を選択します。

    • インポートされたキーマテリアルを使用して、KMS キーのエイリアスまたはキー ID を選択します。[ キーマテリアル ] タブを選択し、[ キーマテリアルを削除] を選択します。

  5. キーマテリアルを削除することを確認してから、[キーマテリアルの削除] を選択します。KMS キーのステータスに対応するそのキーステータスは、インポート保留中に変わります。

キーマテリアルを削除する (AWS KMS API)

AWS KMS API を使用して、キーマテリアルを削除するには、DeleteImportedKeyMaterial リクエストを送信します。次の例では、AWS CLI を使用してこのオペレーションを行う方法を示します。

1234abcd-12ab-34cd-56ef-1234567890ab を、削除する予定のキーマテリアルを持つ KMS キーのキー ID と置き換えます。KMS キーのキー ID または ARN を使用できますが、このオペレーションにエイリアスを使用することはできません。

$ aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab