AWS Key Management Service の概念 - AWS Key Management Service

AWS Key Management Service の概念

AWS Key Management Service (AWS KMS) の基本的な用語および概念についてと、それらがデータの保護にどのように役立つかについて説明します。

AWS KMS keys

AWS KMS keys (KMS キー) は、AWS KMS のプライマリリソースです。KMS キーを使用して、データの暗号化、復号、再暗号化を行うことができます。また、AWS KMS の外部で使用できるデータキーを生成することもできます。通常、対称 KMS キーを使用しますが、暗号化や署名には非対称 KMS キーを作成して使用できます。

注記

AWS KMS では、カスタマーマスターキー (CMK) という用語が AWS KMS key および KMS キーに置き換えられています。この概念に変更はありません。AWS KMS では、互換性を破る変更を避けるため、この用語にいくつかのバリエーションがあります。

AWS KMS key は暗号化キーの論理表現です。データの暗号化と復号に使用されるキーマテリアルに加えて、KMS キーには、キー ID、作成日、説明、キーステータスなどのメタデータが含まれます。

KMS キーには、対称と非対称があります。対称 KMS キーは、暗号化と復号に使用される 256 ビットのキーを表します。非対称 KMS キーは、暗号化と復号または署名と検証に使用 (両方には使用不可) される RSA キーペアを表します。または、非対称 KMS キーは、署名と検証に使用される楕円曲線 (ECC) キーペアを表します。対称および非対称 KMS キーの詳細については、対称キーと非対称キーの使用 を参照してください。

KMS キーは AWS KMS で作成します。対称 KMS キーと非対称 KMS キーのプライベートキーは、AWS KMS を暗号化されないままにしません。KMS キーを使用または管理するには、AWS KMS を使用します。KMS キーの作成と管理に関する詳細については、開始方法 を参照してください。KMS キーを使用する方法の詳細については、AWS Key Management Service API リファレンスを参照してください。

デフォルトでは、AWS KMS は KMS キーのキーマテリアルを作成します。このキーマテリアルを抽出、エクスポート、表示、管理することはできません。また、このキーマテリアルは削除できません。KMS キーを削除する必要があります。ただし、独自のキーマテリアルを KMS キーにインポートすることも、AWS KMS カスタムキーストアに関連付けられた AWS CloudHSM クラスターで KMS キーのキーマテリアルを作成することもできます。

AWS KMS は 1 つの AWS リージョン でデータを暗号化し、別の AWS リージョン で復号できるマルチリージョンキーもサポートします。

KMS キーの作成と管理に関する詳細については、開始方法 を参照してください。KMS キーを使用する方法の詳細については、AWS Key Management Service API リファレンスを参照してください。

AWS KMS では、カスタマーマネージドキー、AWS マネージドキー、AWS 所有のキー の 3 種類の KMS キーがサポートされます。

KMS キーのタイプ KMS キーメタデータを表示可能 KMS キーを管理可能 AWS アカウント のみに使用 自動回転
カスタマー管理のキー はい はい はい 省略可能。365 日 (1 年) ごと。
AWS マネージドキー はい いいえ はい 必須。1095 日 (3 年) ごと。
AWS 所有のキー いいえ いいえ いいえ 可変

AWS KMS と統合されている AWS のサービスでは、KMS キーのサポートが異なります。一部の AWS のサービスでは、デフォルトで AWS 所有のキー または AWS マネージドキー を使用してデータが暗号化されます。他の AWS のサービスでは、選択したカスタマーマネージドキーでデータを暗号化できます。また、他の AWS のサービスでは、AWS 所有のキー の使いやすさ、AWS マネージドキー の可視性、カスタマーマネージドキーの制御性を考慮し、すべてのタイプの KMS キーをサポートします。AWS のサービスが提供する暗号化オプションの詳細については、ユーザーガイドの「保管時の暗号化」トピックまたはサービスのデベロッパーガイドを参照してください。

カスタマーマネージドキー

カスタマーマネージドキーは、ユーザーが作成、所有、管理する AWS アカウント の KMS キーです。これらの KMS キーは、キーポリシー、IAM ポリシー、権限の確立と管理、有効化と無効化暗号化マテリアルのローテーションタグの追加、KMS キーを参照するエイリアスの作成KMS キー削除のスケジューリングなどを完全に制御できます。

カスタマーマネージドキーは、AWS KMS の AWS Management Console のカスタマーマネージドキーページに表示されます。カスタマーマネージドキーを明確に識別するには、DescribeKey オペレーションを使用します。カスタマーマネージドキーでは、DescribeKey レスポンスの KeyManager フィールドの値は CUSTOMER です。

暗号化オペレーションでカスタマーマネージドキーを使用し、AWS CloudTrail ログでその使用を監査できます。さらに、AWS KMS と統合されている多数の AWS のサービスを使用すると、カスタマーマネージドキーを指定して保存および管理するデータを保護できます。

カスタマーマネージドキーの使用には、月額料金と、無料利用枠を超えた使用に対する料金がかかります。これらは、お客様のアカウントの AWS KMS クォータに対して影響があります。詳細については、「AWS Key Management Service 料金表」および Quotas を参照してください。

AWS マネージドキー

AWS マネージドキー は、AWS KMS と統合されている AWS のサービスがユーザーに代わって作成、管理、使用する、アカウントの KMS キーです。一部の AWS のサービスは AWS マネージドキー のみをサポートします。その他は AWS 所有のキー を使用するか、KMS キーの選択肢を提供します。

アカウントで AWS マネージドキー を表示しそれらのキーポリシーを表示し、AWS CloudTrail ログでそれらの使用を監査できます。ただし、これらの KMS キーの管理、ローテーション、キーポリシーの変更はできません。また、AWS マネージドキー を暗号化オペレーションで直接使用することはできません。それらを作成したサービスがユーザーに代わってそれらを使用します。

AWS マネージドキー は AWS KMS の AWS Management Console の AWS マネージドキー ページに表示されます。AWS マネージドキー は aws/redshift のような aws/service-name 形式のエイリアスも識別できます。AWS マネージドキー を明確に識別するには、DescribeKey オペレーションを使用します。AWS マネージドキー の場合、DescribeKey レスポンスの KeyManager フィールドの値は AWS です。

AWS マネージドキー に月額料金はかかりません。これらは、無料利用枠を超える量を使用した場合は有料になりますが、一部の AWS サービスでこれらのコストがカバーされます。詳細については、サービスのユーザーガイドまたはデベロッパーガイドの保管時の暗号化トピックを参照してください。AWS マネージドキー は、アカウントの各リージョンの KMS キー数のリソースクォータに対してカウントされません。ただし、アカウントのプリンシパルに代わって使用される場合、KMS キーはリクエストクォータに対してカウントされます。詳細については、「AWS Key Management Service 料金表」および Quotas を参照してください。

AWS 所有のキー

AWS 所有のキー は、AWS のサービスが複数の AWS アカウント で使用するために所有および管理する KMS キーのコレクションです。AWS 所有のキー は AWS アカウント 内にはありませんが、AWS のサービスは関連付けられた AWS 所有のキー を使用してアカウント内のリソースを保護できます。

AWS 所有のキー を作成または管理する必要はありません。ただし、表示、使用、追跡、監査はできません。AWS は AWS 所有のキー の月額料金または使用料を課金しません。また、アカウントの AWS KMS クォータに対してカウントしません。

AWS 所有のキー のローテーション - AWS 所有のキー を含む、AWS のサービスがサポートする KMS キーのタイプについては、サービスのユーザーガイドまたはデベロッパーガイドの保管時の暗号化トピックを参照してください。

データキー

データキーは、大量のデータや他のデータ暗号化キーなどのデータを暗号化に使用できる暗号化キーです。ダウンロードできない KMS キーとは異なり、データキーは AWS KMS の外部での使用時に、ユーザーに返されます。

AWS KMS はデータキーの生成時、通常は、即座に使用できるプレーンテキストのデータキーと、データとともに安全に保存できるデータキーの暗号化されたコピーを返します。データを復号する準備ができたら、最初に AWS KMS を要求して、暗号化されたデータキーを復号します。

AWS KMS はデータキーを生成、暗号化、復号します。ただし、AWS KMS はデータキーの保存、管理、追跡、またはデータキーの暗号化オペレーションを実行しません。AWS KMS の外部でデータキーを使用して管理する必要があります。

データキーの作成

データキーを作成するには、GenerateDataKey オペレーションを呼び出します。AWS KMS は指定した対称 KMS キーを使用してデータキーを生成します。このオペレーションでは、データキーのプレーンテキストコピーと KMS キーで暗号化されたデータキーのコピーが返されます。以下の図では、このオペレーションを示しています。


          データキーを生成する

AWS KMS は暗号化されたデータキーのみを返す GenerateDataKeyWithoutPlaintext オペレーションもサポートしています。データキーを使用する必要がある場合、AWS KMS にそのデータキーを復号化するように求めます。

データキーでデータを暗号化する

AWS KMS は、データキーを使用してデータを暗号化することはできません。ただし、OpenSSL を使用するか、AWS Encryption SDK のような暗号化ライブラリを使用することで、AWS KMS の外部でデータキーを使用できます。

プレーンテキストのデータキーを使用してデータを暗号化したら、できる限り早急にメモリからそれを削除します。暗号化したデータと一緒に暗号化データキーを安全に保存して、データの復号化に利用することができます。


           の外部でユーザーデータを暗号化するAWS KMS

データキーでデータを復号化する

データを復号するには、Decrypt オペレーションに暗号化されたデータキーを渡します。AWS KMS は KMS キーを使用してデータキーを復号し、プレーンテキストのデータキーを返します。プレーンテキストのデータキーを使ってデータを復号し、続いてできる限り早急にメモリからプレーンテキストのデータキーを削除します。

以下の図では、Decrypt オペレーションを使用して暗号化されたデータキーを復号する方法を示しています。


          データキーの復号化

データキーペア

データキーペアは、数学的に関連する公開キーとプライベートキーで構成される非対称データキーです。これらは、クライアント側の暗号化と復号、または AWS KMS の外部での署名と検証に使用されるように設計されています。

OpenSSL などのツールが生成するデータキーペアとは異なり、AWS KMS は、指定した AWS KMS の対称 KMS キーで各データキーペアのプライベートキーを保護します。ただし、AWS KMS はデータキーペアの保存、管理、追跡、またはデータキーペアの暗号化オペレーションを実行しません。AWS KMS の外部でデータキーペアを使用して管理する必要があります。

AWS KMS は、次のタイプのデータキーペアをサポートしています。

  • RSA キーペア: RSA_2048、RSA_3072、および RSA_4096

  • 楕円曲線キーペア、ECC_NIST_P256、ECC_NIST_P384、ECC_NIST_P521、および ECC_SECG_P256K1

選択するデータキーペアのタイプは、通常、ユースケースまたは規制要件によって異なります。ほとんどの証明書には RSA キーが必要です。楕円曲線キーは、デジタル署名によく使用されます。ECC_SECG_P256K1 キーは、一般的に暗号化通貨に使用されます。AWS KMS では、署名に ECC キーペアを使用し、暗号化または署名に RSA キーペアを使用することが推奨されていますが、両方は使用しないでください。ただし、AWS KMS の外部でデータキーペアを使用することを AWS KMS で強制的に制限することはできません。

データキーペアを作成する

データキーペアを作成するには、 GenerateDataKeyPair または GenerateDataKeyPairWithoutPlaintext 操作を呼び出します。プライベートキーの暗号化に使用する対称 KMS キーを指定します。

GenerateDataKeyPair は、プレーンテキストパブリックキー、プレーンテキストプライベートキー、暗号化されたプライベートキーを返します。このオペレーションは、デジタル署名を生成する場合など、プレーンテキストプライベートキーをすぐに必要とする場合に使用します。

GenerateDataKeyPairWithoutPlaintext は、プレーンテキストのパブリックキーと暗号化されたプライベートキーを返しますが、プレーンテキストプライベートキーは返しません。このオペレーションは、パブリックキーで暗号化する場合など、プレーンテキストプライベートキーがすぐに必要ない場合に使用します。後で、データを復号化するために平文の秘密鍵が必要な場合は、Dec rypt 操作を呼び出すことができます。

以下の図では、GenerateDataKeyPair オペレーションを示しています。GenerateDataKeyWithoutPlaintext オペレーションは、プレーンテキストプライベートキーを省略します。


          データキーペアの生成

データキーペアでデータを暗号化する

データキーペアを使用して暗号化する場合、ペアのパブリックキーを使用してデータを暗号化し、同じペアのプライベートキーを使用してデータを復号します。通常、データキーペアは、プライベートキーを保持している当事者のみが復号できるデータを、多くの当事者が暗号化する必要がある場合に使用されます。

次の図に示すように、パブリックキーを持つ当事者は、そのキーを使用してデータを暗号化します。


           の外部でデータキーペアのパブリックキーを使用してユーザーデータを暗号化するAWS KMS

データキーペアでデータを復号する

データを復号するには、データキーペアでプライベートキーを使用します。オペレーションを成功させるには、パブリックキーとプライベートキーが同じデータキーペアのものである必要があり、また、同じ暗号化アルゴリズムを使用する必要があります。

暗号化された秘密鍵を復号化するには、 復号化 操作に渡します。プレーンテキストプライベートキーを使用してデータを復号します。その後、できるだけ早くプレーンテキストのプライベートキーをメモリから削除します。

次の図は、データキーペアのプライベートキーを使用して暗号テキストを復号する方法を示しています。


           の外部にあるデータキーペアのプライベートキーを使用してデータを復号します。AWS KMS

データキーペアでメッセージに署名する

メッセージの暗号化署名を生成するには、データキーペアのプライベートキーを使用します。パブリックキーを持つすべてのユーザーは、メッセージが自分のプライベートキーで署名されたこと、および署名されてから変更されていないことを確認するために使用できます。

プライベートキーが暗号化されている場合は、暗号化されたプライベートキーを Decrypt オペレーションに渡します。AWS KMS は KMS キーを使用してデータキーを復号し、プレーンテキストのプライベートキーを返します。署名を生成するには、プレーンテキストプライベートキーを使用します。その後、できるだけ早くプレーンテキストのプライベートキーをメモリから削除します。

メッセージに署名するには、OpenSSL で dgst コマンドなどの暗号化ハッシュ関数を使用してメッセージダイジェストを作成します。次に、プレーンテキストプライベートキーを署名アルゴリズムに渡します。結果は、メッセージの内容を表す署名です。(最初にダイジェストを作成しなくても、短いメッセージで署名できる場合があります。メッセージの最大サイズは、使用する署名ツールによって異なります)。

次の図は、データキーペアのプライベートキーを使用してメッセージに署名する方法を示しています。


           外部のデータキーペアのプライベートキーを使用して暗号化署名を生成します。AWS KMS

データキーペアを使用した署名の検証

データキーペアにパブリックキーを持っているユーザーは、誰でもそれを使用して、プライベートキーで生成した署名を検証できます。検証では、承認されたユーザーが指定したプライベートキーと署名アルゴリズムを使用してメッセージに署名し、メッセージが署名後に変更されていないことを確認します。

署名を検証する当事者は、同じタイプのダイジェストを生成し、同じアルゴリズムを使用して、メッセージの署名に使用されるプライベートキーに対応するパブリックキーを使用する必要があります。

次の図は、データキーペアのパブリックキーを使用してメッセージ署名を検証する方法を示しています。


           の外部のデータキーペアのパブリックキーを使用して、暗号化署名を確認します。AWS KMS

Aliases

KMS キーのフレンドリ名としてエイリアスを使用します。例えば、KMS キーを 1234abcd-12ab-34cd-56ef-1234567890ab ではなく、テストキーとして参照できます。

エイリアスを使用すると、AWS Management Console でKMS キーを識別しやすくなります。エイリアスを使用して、暗号化オペレーションなどの一部の AWS KMS オペレーションで KMS キーを識別することもできます。アプリケーションでは、1 つのエイリアスを使用して各 AWS リージョン の異なる KMS キー を参照できます。

ポリシーを編集したり、権限を管理したりすることなく、エイリアスに基づいて KMS キーへのアクセスを許可および拒否することもできます。この機能は、属性ベースのアクセスコントロール (ABAC) の AWS KMS サポートの一部です。詳細については、「AWS KMS の ABAC を使用する」を参照してください。

AWS KMS では、エイリアスは KMS キーのプロパティではなく、独立したリソースです。そのため、関連付けられた KMS キーに影響を与えずに、エイリアスを追加、変更、削除できます。

詳細はこちら:

カスタムキーストア

カスタムキーストアは、所有および管理する AWS CloudHSM クラスターで FIPS 140-2 レベル 3 ハードウェアセキュリティモジュール (HSM) に関連付けられている AWS KMS リソースです。

カスタムキーストアで AWS KMS KMS キーを作成すると、AWS KMS は関連づけられている AWS CloudHSM クラスターに、256 ビットの永続的でエクスポート不可能な Advanced Encryption Standard (AES) 対称キーを生成します。このキーマテリアルは、HSM を暗号化されないままにしません。カスタムキーストアで KMS キーを使用する際、暗号化オペレーションはクラスター内の HSM で実行されます。

詳細については、「カスタムキーストアの使用」を参照してください。

暗号化オペレーション

AWS KMS の場合、暗号化オペレーションとは、KMS キーを使用してデータを保護する API オペレーションです。KMS キーは AWS KMS 内にあるため、暗号化オペレーションで KMS キーを使用するには AWS KMS を呼び出す必要があります。

KMS キーで暗号化オペレーションを実行するには、AWS SDK、AWS CLI (AWS Command Line Interface)、AWS Tools for PowerShell を使用します。AWS KMS コンソールで暗号化オペレーションを実行することはできません。いくつかのプログラミング言語で暗号化操作を呼び出す例については、を参照してください AWS KMS API のプログラミング

以下の表では、AWS KMS 暗号化オペレーションを示しています。また、オペレーションで使用される KMS キーのキータイプとキー使用法の要件も示します。

オペレーション KMS キーのキータイプ KMS キーのキー使用法
復号化 すべて ENCRYPT_DECRYPT
暗号化 すべて ENCRYPT_DECRYPT
GenerateDataKey 対称 ENCRYPT_DECRYPT
GenerateDataKeyPair 非対称 [1] ENCRYPT_DECRYPT
GenerateDataKeyPairWithoutPlaintext 非対称 [1] ENCRYPT_DECRYPT
GenerateDataKeyWithoutPlaintext 対称 ENCRYPT_DECRYPT
GenerateRandom 該当なし。このオペレーションでは KMS キーを使用しません。 該当なし
ReEncrypt すべて ENCRYPT_DECRYPT
Sign 非対称 SIGN_VERIFY
検証 非対称 SIGN_VERIFY

[1] GenerateDataKeyPair および GenerateDataKeyPairWithoutPlaintext は、対称 KMS キーによって保護される非対称データキーペアを生成します。

暗号化オペレーションのアクセス許可については、「AWS KMS アクセス権限」を参照してください。

すべてのユーザーに対する AWS KMS の応答性と機能性を向上させるために、AWS KMS では、1 秒あたりに呼び出すことができる暗号化オペレーションの数にクォータを設定します。詳細については、「暗号化オペレーションの共有クォータ」を参照してください。

キー識別子 (KeyId)

キー識別子は、KMS キーの名前として機能します。これらは、コンソールで KMS キーを識別するのに役立ちます。キー識別子を使用して、AWS KMS API オペレーション、キーポリシー、IAM ポリシー、権限で使用する KMS キーを指定します。

AWS KMS は、いくつかのキー識別子を定義します。KMS キーを作成すると、AWS KMS は KMS キーのプロパティであるキー ARN とキー ID を生成します。エイリアスを作成すると、AWS KMS は定義したエイリアス名に基づいてエイリアス ARN を生成します。キーおよびエイリアスの識別子は、AWS Management Console および AWS KMS API で表示できます。

AWS KMS コンソールでは、KMS キーをキー ARN、キー ID、エイリアス名で表示およびフィルタリングし、キー ID とエイリアス名でソートできます。コンソールでキー ID を検索する方法については、「キー ID と ARN を検索する」を参照してください。

AWS KMS API では、KMS キーの識別に使用するパラメータ名は、KeyId またはバリエーション (TargetKeyIdDestinationKeyId など) になります。ただし、これらのパラメータの値はキー ID に限定されません。いくつかは、任意の有効なキー識別子を受け取ることができます。各パラメータ値の詳細については、AWS Key Management Service API リファレンスのパラメータの説明を参照してください。

注記

AWS KMS API を使用する際は、使用するキー識別子に注意してください。API ごとに異なるキー識別子が必要です。通常、タスクに対して実用的で最も完全なキー識別子を使用します。

AWS KMS では、次のキー識別子がサポートされています。

キー ARN

キー ARN は、KMS キーの Amazon リソースネーム (ARN) です。これは KMS キーの、一意の完全修飾識別子です。キー ARN には、AWS アカウント、リージョン、キー ID が含まれます。KMS キーのキー ARN を検索する方法については、キー ID と ARN を検索する を参照してください。

キー ARN の形式は次のとおりです。

arn:<partition>:kms:<region>:<account-id>:key/<key-id>

以下は単一リージョン KMS キーのサンプルキー ARN です。

arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

マルチリージョンキーのキー ARN のkey-id 要素は、mrk- プレフィックスで始まります。以下はマルチリージョンキーのサンプルキー ARN です。

arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab
キー ID

キー ID は、アカウントとリージョン内の KMS キーを一意に識別します。KMS キーのキー ID を検索する方法については、キー ID と ARN を検索する を参照してください。

以下は単一リージョン KMS キーのサンプルキー ID です。

1234abcd-12ab-34cd-56ef-1234567890ab

マルチリージョンキーのキー ID は、mrk- プレフィックスで始まります。以下はマルチリージョンキーのサンプルキー ID です。

mrk-1234abcd12ab34cd56ef1234567890ab
エイリアス ARN

エイリアス ARN は、AWS KMS エイリアスの Amazon リソースネーム (ARN) です。これは、エイリアスとそれが表す KMS キーの、一意の完全修飾識別子です。エイリアス ARN には、AWS アカウント、リージョン、エイリアス名が含まれます。

エイリアス ARN は、任意の時点で特定の 1 つの KMS キーを識別します。ただし、エイリアスに関連付けられている KMS キーは変更できるため、エイリアス ARN は異なる時点でさまざまな KMS キーを識別できます。KMS キーのエイリアス ARN を検索する方法については、エイリアス名とエイリアス ARN を見つける を参照してください。

エイリアス ARN の形式は次のとおりです。

arn:<partition>:kms:<region>:<account-id>:alias/<alias-name>

以下は、架空の ExampleAlias のエイリアス ARN です。

arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias
エイリアス名

エイリアス名は、最大 256 文字の文字列です。エイリアス名は、アカウントとリージョン内で関連付けられた KMS キーを一意に識別します。AWS KMS API では、エイリアス名は常に alias/ で始まります。KMS キーのエイリアス名を検索する方法については、エイリアス名とエイリアス ARN を見つける を参照してください。

エイリアス名の形式は次のとおりです。

alias/<alias-name>

例:

alias/ExampleAlias

エイリアス名の aws/ プレフィックスは、AWS マネージドキー 用に予約されます。このプレフィックスでエイリアスを作成することはできません。例えば、Amazon Simple Storage Service (Amazon S3) の AWS マネージドキー でのエイリアス名は、次のとおりです。

alias/aws/s3

キーマテリアル

キーマテリアルは、暗号化アルゴリズムで使用されるビット単位のシークレット文字列です。キーマテリアルを使用する暗号化オペレーションを保護するには、キーマテリアルをシークレットにしておく必要があります。

各 KMS キーには、キーマテリアルとメタデータが含まれます (キー ID およびキーポリシーなど)。キーマテリアルのオリジンはさまざまです。AWS KMS が生成するキーマテリアル、またはカスタムキーストアの AWS CloudHSM のクラスターで生成されるキーマテリアルを使用するか、独自のキーマテリアルをインポートすることができます。AWS KMS キーマテリアルを使用する場合、キーマテリアルの自動ローテーションを有効にできます。

デフォルトでは、各 KMS キーに一意のキーマテリアルがあります。ただし、同じキーマテリアルでマルチリージョンキーのセットを作成することができます。

キーマテリアルのオリジン

キーマテリアルのオリジンは、KMS キーのキーマテリアルのソースを識別する KMS キープロパティです。KMS キーの作成時にキーマテリアルのオリジンを選択し、それを変更することはできません。KMS キーのキーマテリアルのオリジンを検索するには、DescribeKey オペレーションを使用するか、AWS KMS コンソールで KMS キーの詳細ページの暗号化設定タブにある、Origin 値を参照してください。ヘルプについては、「キーの表示」を参照してください。

KMS キーでは、次のうち 1 つのキーマテリアルオリジン値を指定できます。

KMS (デフォルト)

API の値: AWS_KMS

AWS KMS は、独自のキーストアで、KMS キーのキーマテリアルを作成および管理します。これは、ほとんどの KMS キーのデフォルト値であり、レコメンデーション値です。

AWS KMS からキーマテリアルを持つキーを作成する方法については、「キーの作成」を参照してください。

外部

API の値: EXTERNAL

KMS キーには、インポートされたキーマテリアルがあります。External キーマテリアルオリジンを持つ KMS キーを作成するとき、KMS キーにはキーマテリアルがありません。後で、KMS キーにキーマテリアルをインポートすることができます。インポートしたキーマテリアルを使用する場合は、そのキーマテリアルを AWS KMS の外部で保護して管理する必要があります。これには、キーマテリアルの有効期限が切れた場合の置き換えも含まれます。詳細については、「インポートしたキーマテリアルについて」を参照してください。

インポートされたキーマテリアルを持つ KMS キーの作成方法については、ステップ 1: キーマテリアルなしで KMS キーを作成する を参照してください。

カスタムキーストア (CloudHSM)

API の値: AWS_CLOUDHSM

AWS KMS は、KMS キーのキーマテリアルをカスタムキーストアで作成しました。

カスタムキーストアで KMS キーを作成する方法については、カスタムキーストアで KMS キーを作成する を参照してください。

キー仕様

キー仕様は、キーの暗号化設定を表すプロパティです。キー仕様の意味は、キータイプによって異なります。

  • AWS KMS キーキー仕様は、KMS キーが対称か非対称かを決定します。また、KMS キーがサポートするキーマテリアル、暗号化アルゴリズム、署名アルゴリズムも決定します。KMS キーの作成時に選択したキー仕様を変更することはできません。

    注記

    KMS キーの KeySpec は、CustomerMasterKeySpec と呼ばれていました。CreateKey オペレーションの CustomerMasterKeySpec パラメータは非推奨です。代わりに、同様に機能する KeySpec パラメータを使用します。変更の中断を阻止するために、CreateKey および DescribeKey オペレーションのレスポンスには、同じ値を持つ KeySpec および CustomerMasterKeySpec メンバーが含まれるようになりました。

    主要仕様のリストと主要仕様の選択に関するヘルプについては、「」を参照してください キー仕様の選択。KMS キーのキー仕様を確認するには、DescribeKey オペレーションを使用するか、AWS KMS コンソールの KMS キーの詳細ページにある暗号化設定タブを参照してください。ヘルプについては、「キーの表示」を参照してください。

    KMS キーの作成時に、プリンシパルが使用できるキー仕様を制限するには、kms:KeySpec 条件キーを使用します。kms:KeySpec 条件キーを使用して、プリンシパルがキー仕様に基づいて KMS キーの AWS KMS オペレーションを呼び出せるようにすることもできます。例えば、RSA_4096 キー仕様で、KMS キーの削除をスケジュールするアクセス許可を拒否できます。

  • データキー (GenerateDataKey) — キー仕様は、AES データキーの長さを決定します。

  • データキーペア (GenerateDataKeyPair) — キーペア仕様は、データキーペアでキーマテリアルのタイプを決定します。

キーの使用方法

キー使用法は、KMS キーを暗号化と復号に使用するか、署名と検証に使用するかを決定するプロパティです。キーは、両方をサポートすることはできません。KMS キーを複数のタイプのオペレーションに使用すると、両方のオペレーションの結果が、攻撃に対して脆弱になります。

対称 KMS キーのキー使用法は、常に暗号化と復号です。楕円曲線 (ECC) KMS キーのキー使用法は、常に署名と検証です。RSA KMS キーのキー使用法を選択するだけで済みます。KMS キー作成時に選択したキー使用法を変更することはできません。間違ったキー使用法を選択した場合は、KMS キーを削除し、新たに作成します。

キーの使用方法の選択については、「キー使用法の選択」を参照してください。KMS キーのキー使用法を確認するには、DescribeKey オペレーションを使用するか、AWS KMS コンソールの KMS キーの詳細ページにある暗号化設定タブを選択します。ヘルプについては、「キーの表示」を参照してください。

プリンシパルが署名と検証のみ、または暗号化と復号のみの KMS キーを作成できるようにするには、kms:KeyUsage 条件キーを使用します。kms:KeyUsage 条件キーを使用して、プリンシパルがキー使用法に基づいて KMS キーの API オペレーションを呼び出せるようにすることもできます。例えば、キー使用法が SIGN_VERIFY である場合にのみ、KMS キーを無効にするアクセス許可を許可できます。

エンベロープ暗号化

データを暗号化するとデータは保護されますが、暗号化キーを保護する必要があります。1 つの戦略としては、それを暗号化します。エンベロープ暗号化は、データキーでプレーンテキストデータを暗号化してから、そのデータキーを別のキーで暗号化する手法です。

データ暗号化キーを別の暗号化キーで暗号化し、その暗号化キーを別の暗号化キーで暗号化することもできます。しかし、最終的には、キーとデータを復号化するために、1 つのキーをプレーンテキストで保持する必要があります。この最上位プレーンテキストキーの暗号化キーは、ルートキーと呼ばれます。


        エンベロープ暗号化

AWS KMS は、暗号化キーを安全に保存、管理して保護します。AWS KMS に保存されているルートキーは AWS KMS keys と呼ばれ、AWS KMS FIPS 検証済みハードウェアセキュリティモジュールを暗号化されないままにしません。KMS キーを使用するには、AWS KMS を呼び出す必要があります。


        複数キー暗号化キーによるエンベロープ暗号化

エンベロープ暗号化には、いくつかの利点があります。

  • データキーの保護

    データキーを暗号化する場合、暗号化されたデータキーの保存について心配する必要がありません。これは、そのデータキーが暗号化によって本質的に保護されているためです。暗号化されたデータとともに、暗号化されたデータキーを安全に保存できます。

  • 複数キーで同じデータを暗号化する

    暗号化オペレーションには時間がかかります (特に、暗号化するデータが大きいオブジェクトである場合)。異なるキーで raw データを複数回にわたって再暗号化する代わりに、raw データを保護するデータキーのみを再暗号化できます。

  • 複数のアルゴリズムの強度の結合

    一般に、対称キーアルゴリズムは、パブリックキーアルゴリズムよりも高速で、より小さい暗号化テキストを生成します。しかし、パブリックキーのアルゴリズムはロールを本質的に分離し、キー管理を簡単にします。エンベロープ暗号化により、それぞれの戦略を組み合わせることができます。

暗号化コンテキスト

対称 KMS キーを使用するすべての AWS KMS 暗号化オペレーションは、暗号化コンテキストを受け入れます。暗号化コンテキストとは、データに関する追加のコンテキスト情報を含めることができるオプションのキーバリューペアのセットです。AWS KMS は、暗号化コンテキストを追加の認証済みデータ (AAD) として使用し、認証済み暗号化をサポートします。

非対称 KMS キーを使用して暗号化オペレーションの暗号化コンテキストを指定することはできません。AWS KMS が使用する標準非対称暗号化アルゴリズムは、暗号化コンテキストをサポートしません。

暗号化リクエストに暗号化コンテキストが含まれている場合、暗号化テキストに暗号化されてバインドされます。このため、データを復号する (または復号して再暗号化する) には、同じ暗号化コンテキストが必要です。復号リクエストで指定された暗号化コンテキストが大文字と小文字を区別して完全に一致しない場合、復号リクエストは失敗します。暗号化コンテキストでのキーと値のペアの順序のみを変更できます。

この暗号化コンテキストはシークレットではありません。これは AWS CloudTrail ログにプレーンテキストで表示されるため、それを使用して暗号化オペレーションを識別して分類できます。

暗号化コンテキストは任意のキーと値で構成できます。ただし、暗号化コンテキストはシークレットではなく暗号化されないため、機密情報を含めないでください。暗号化または復号化されるデータの内容を説明した暗号化テキストの使用をお勧めします。例えば、ファイルを暗号化するときは、ファイルパスの一部を暗号化コンテキストとして使用することもあります。

暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数やオブジェクトなど完全に解決されない型のキーと値は使用できません。整数や浮動小数点数など別の型を使用する場合、AWS KMS では文字列として解釈されます。

"encryptionContext": { "department": "10103.0" }

暗号化コンテキストのキーと値には、アンダースコア (_)、ダッシュ (-)、スラッシュ (/、\)、コロン (:) などの特殊文字を含めることができます。

例えば、Amazon Elastic Block Store (Amazon EBS) CreateSnapshot オペレーションで作成されたボリュームとスナップショットを暗号化する際、Amazon EBS はボリューム ID を暗号化コンテキスト値として使用します。

"encryptionContext": { "aws:ebs:id": "vol-abcde12345abc1234" }

暗号化コンテキストを使用して、アカウントの AWS KMS keys へのアクセスを絞り込むか、制限することもできます。暗号化コンテキストは許可の制約として、およびポリシーステートメントの条件として使用できます。

暗号化コンテキストを使用して暗号化されたデータの整合性を保護する方法については、 セキュリティブログの「AWS Key Management Service と暗号化コンテキストを使用して暗号化されたデータの整合性を保護する方法AWS」を参照してください。

暗号化コンテキストの詳細。

暗号化コンテキストは主に整合性と信頼性を検証するために使用されます。ただし、暗号化コンテキストを使用して、キーポリシーおよび IAM ポリシーで対称 AWS KMS keys へのアクセスを制御することもできます。

KMS: EncryptionContext: および KMS: EncryptionContextKeys条件キー では、要求に特定の暗号化コンテキストキーまたはキーと値のペアが含まれている場合にのみ、アクセス許可を許可(または拒否)します。

例えば、以下のキーポリシーステートメントでは、RoleForExampleApp ロールに Decrypt オペレーションでの KMS キーの使用を許可します。また、kms:EncryptionContext:context-key 条件キーを使用して、リクエストの暗号化コンテキストに AppName:ExampleApp 暗号化コンテキストペアが含まれる場合にのみ、このアクセス許可を付与します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } } }

これらの暗号化コンテキスト条件キーの詳細については、「」を参照してください AWS KMS でのポリシー条件の使用

権限を作成する際は、権限の制約を含めて、権限のアクセス許可条件を確立することができます。AWS KMS は、2 つの権限の制約である EncryptionContextEquals および EncryptionContextSubset をサポートします。どちらも暗号化オペレーションのリクエストの暗号化コンテキストを含みます。これらの権限の制約を使用するとき、権限のアクセス許可は、暗号化オペレーションのリクエストで暗号化コンテキストが権限の制約の要件を満たしている場合にのみ有効になります。

例えば、EncryptionContextEquals の権限の制約を、GenerateDataKey オペレーションを許可する権限に追加できます。この制約により、権限は、リクエストの暗号化コンテキストが権限の制約の暗号化コンテキストで大文字と小文字を区別して一致する場合にのみ、オペレーションを許可します。

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --operations GenerateDataKey \ --constraints EncryptionContextEquals={Purpose=Test}

被付与者プリンシパルからの次のようなリクエストは、EncryptionContextEquals の制約を満たします。

$ aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --key-spec AES_256 \ --encryption-context Purpose=Test

権限の制約の詳細については、権限の制約の使用 を参照してください 。権限の詳細については、許可の使用 を参照してください。

AWS KMS が AWS CloudTrail を使用して暗号化コンテキストを記録することにより、アクセスされた KMS キーやデータを特定することができます。ログエントリには、ログエントリ内の暗号化コンテキストによって参照された特定のデータの暗号化または復号に、どの KMS キーが使用されたかが正確に示されます。

重要

暗号化コンテキストは記録されるため、機密情報が含まれていてはなりません。

Decrypt または ReEncrypt オペレーションを呼び出すときに暗号化コンテキストを簡単に使用できるように、暗号化コンテキストを暗号化されたデータとともに格納できます。暗号化や復号で必要になったときに完全な暗号化コンテキストを作成できる十分な暗号化コンテキストのみを保存することをお勧めします。

例えば、暗号化コンテキストがファイルへの完全修飾パスである場合、そのパスの一部のみを、暗号化されたファイルの内容とともに保存します。次に、完全な暗号化コンテキストが必要になったら、保存されたフラグメントからコンテキストを再構築します。誰かがファイルを改ざんした場合 (名前の変更、別の場所への移動など)、暗号化コンテキスト値が変更され、復号リクエストは失敗します。

キーポリシー

KMS キーの作成時に、KMS キーを使用および管理できるユーザーを決定します。これらのアクセス権限は、キーポリシーと呼ばれるドキュメントに含まれます。キーポリシーを使用して、カスタマーマネージドキーに対するアクセス許可をいつでも追加、削除、変更できます。ただし、AWS マネージドキー のキーポリシーは編集できません。詳細については、「AWS KMS でのキーポリシーの使用」を参照してください。

Grant

権限は、AWS プリンシパルに暗号化オペレーションで AWS KMS keys の使用を許可するポリシーツールです。また、KMS キー (DescribeKey) を表示して、権限の作成、管理を可能にします。KMS キーへのアクセスを認可する際、権限はキーポリシーおよび IAM ポリシーと共に考慮されます。権限は、作成してそのアクセス許可を使用し、キーポリシーまたは IAM ポリシーを変更することなく削除できるため、一時的なアクセス許可としてよく使用されます。許可は限定的であり、作成と取り消しが容易であるため、一時的なアクセス許可やよりきめ細かなアクセス許可を付与するためによく使用されます。

権限の用語を含む、権限の詳細については 許可の使用 を参照してください。

KMS キーの使用状況を監査する

AWS CloudTrail を使用して、キーの使用状況を監査できます。CloudTrail は、アカウントの AWS API コールおよび関連イベントの履歴を含むログファイルを作成します。これらのログファイルには、AWS KMS マネジメントコンソール、AWS SDK、コマンドラインツールで行ったすべての AWS API リクエストが含まれます。また、AWS KMS サービスによってお客様に代わって行われた AWS へのリクエストも含まれます。これらのログファイルを使用して、KMS キーが使用された日時、リクエストされたオペレーション、リクエスタのアイデンティティ、ソースの IP アドレスなどの重要な情報を見つけることができます。詳細については、AWS CloudTrail でのログ記録 および AWS CloudTrail ユーザーガイドを参照してください。

キー管理インフラストラクチャ

暗号化の一般的な手法では、AES (Advanced Encryption Standard) など一般に利用でき専門家によって検証されたアルゴリズムとシークレットキーを使用して暗号化し、復号する必要があります。暗号化での主な問題の 1 つは、キーを秘密にしておくのが非常に困難なことです。これは通常、キー管理インフラストラクチャ (KMI) のジョブです。AWS KMS はユーザーに代わってキーインフラストラクチャを運用します。AWS KMS は AWS KMS keys と呼ばれるルートキーを作成し、安全に保存します。AWS KMS の運用の詳細については、AWS Key Management Service 暗号化の詳細を参照してください。