暗号化コンテキスト - AWS Key Management Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

暗号化コンテキスト

注記

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

対称暗号化KMSキーを使用するすべての AWS KMS 暗号化オペレーションは、暗号化コンテキスト を受け入れます。これは、データに関する追加のコンテキスト情報を含めることができる、シークレット以外のキーと値のペアのオプションセットです。Encrypt オペレーションに暗号化コンテキストを挿入 AWS KMS して、復号呼び出しの承認 AWS KMS APIと監査可能性を高めることができます。 AWS KMS は、暗号化コンテキストを追加の認証データ (AAD) として使用して、認証された暗号化をサポートします。暗号化コンテキストは、暗号化されて暗号文にバインドされます。これにより、データの復号には同じ暗号化コンテキストが必要になります。

この暗号化コンテキストは秘密ではなく、暗号化されていません。これは AWS CloudTrail ログにプレーンテキストで表示されるため、それを使用して暗号化オペレーションを識別して分類できます。暗号化コンテキストには機密情報を含めないようにしてください。暗号化または復号されるデータの内容を説明した暗号化テキストの使用をお勧めします。例えば、ファイルを暗号化するときは、ファイルパスの一部を暗号化コンテキストとして使用することもあります。

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

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

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

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

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

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

暗号化コンテキストのルール

AWS KMS では、暗号化コンテキストキーと値に対して以下のルールが適用されます。

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

  • 暗号化コンテキストのキーと値には、Unicode 文字を含めることができます。暗号化コンテキストにキーポリシーまたはIAMポリシーで許可されていない文字が含まれている場合、 kms:EncryptionContext:context-keyや などのポリシー条件キーで暗号化コンテキストを指定することはできませんkms:EncryptionContextKeys。キーポリシードキュメントのルールに関する詳細については、「キーポリシー形式」を参照してください。IAM ポリシードキュメントルールの詳細については、IAM「 ユーザーガイドIAM」の名前要件を参照してください。

ポリシーでの暗号化コンテキスト

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

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

例えば、次のキーポリシーステートメントでは、 RoleForExampleAppロールが KMS キーをDecryptオペレーションで使用できるようにします。また、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」を参照してください。

グラントでの暗号化コンテキスト

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

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

$ 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 KMS は AWS CloudTrail 、どのKMSキーとデータにアクセスされたかを特定できるように、暗号化コンテキストをログに記録します。ログエントリには、ログエントリの暗号化コンテキストによって参照される特定のデータを暗号化または復号するために使用されたKMSキーが正確に表示されます。

重要

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

暗号化コンテキストの保存

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

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