

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

# 暗号化コンテキスト
<a name="encrypt_context"></a>

**注記**  
[非対称 KMS キー](symmetric-asymmetric.md)または [HMAC KMS キー](hmac.md)を使用する暗号化オペレーションで暗号化コンテキストを指定することはできません。非対称アルゴリズムと MAC アルゴリズムは、暗号化コンテキストをサポートしません。

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

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

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

例えば、[Amazon Elastic Block Store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) (Amazon EBS) [CreateSnapshot](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSnapshot.html) オペレーションで作成されたボリュームとスナップショットを暗号化する際、Amazon EBS はボリューム ID を暗号化コンテキスト値として使用します。

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

暗号化コンテキストを使用して、アカウント AWS KMS keys 内の へのアクセスを絞り込んだり制限したりすることもできます。暗号化コンテキストは[グラントの制約として](grants.md)、および*[ポリシーステートメントの条件](policy-conditions.md)*として使用できます。暗号化コンテキストキーとその値は、`aws` を含む任意の文字列にすることができます。これらの値は、[aws:cloudformation:stack-name](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-resource-tags.html) などの[AWS で生成されたタグ](https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html#tag-conventions)とは対照的です。詳細については、[kms:EncryptionContext: *context-key*](conditions-kms.md#conditions-kms-encryption-context)を参照してください。

暗号化コンテキストを使用して暗号化されたデータの整合性を保護する方法については、 AWS セキュリティブログの「 [AWS Key Management Service および EncryptionContext を使用して暗号化されたデータの整合性を保護する方法](https://aws.amazon.com/blogs/security/how-to-protect-the-integrity-of-your-encrypted-data-by-using-aws-key-management-service-and-encryptioncontext/)」を参照してください。

## 暗号化コンテキストのルール
<a name="encryption-context-rules"></a>

AWS KMS は、暗号化コンテキストのキーと値に次のルールを適用します。
+ 暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数や浮動小数点数など別の型を使用する場合、 AWS KMS では文字列として解釈されます。
+ 暗号化コンテキストのキーと値には、Unicode 文字を含めることができます。暗号化コンテキストにキーポリシーまたは IAM ポリシーで許可されていない文字が含まれている場合は、[`kms:EncryptionContext:context-key`](conditions-kms.md#conditions-kms-encryption-context) および [`kms:EncryptionContextKeys`](conditions-kms.md#conditions-kms-encryption-context-keys) などのポリシー条件キーで暗号化コンテキストを指定できなくなります。キーポリシードキュメントのルールに関する詳細については、「[キーポリシー形式](key-policy-overview.md#key-policy-format)」を参照してください。IAM ポリシードキュメントのルールに関する詳細については、「IAM ユーザーガイド」の「[IAM 名前の要件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)」を参照してください。

## ポリシーでの暗号化コンテキスト
<a name="encryption-context-authorization"></a>

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

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

例えば、以下のキーポリシーステートメントでは、`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](policy-conditions.md)」を参照してください。

## グラントでの暗号化コンテキスト
<a name="encryption-context-grants"></a>

[許可を作成する](grants.md)ときに、許可のアクセス許可の条件を設定する許可[の制約](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)を含めることができます。 は 2 つの許可の制約 `EncryptionContextEquals`と AWS KMS をサポートします。`EncryptionContextSubset`どちらも暗号化オペレーションのリクエストに[暗号化コンテキスト](#encrypt_context)が含まれます。これらのグラント制約を使用するとき、グラントの許可は、暗号化オペレーションのリクエストで暗号化コンテキストがグラント制約の要件を満たしている場合にのみ有効になります。

例えば、`EncryptionContextEquals` のグラント制約を、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) オペレーションを許可するグラントに追加できます。この制約により、このグラントは、リクエストの暗号化コンテキストがグラント制約の暗号化コンテキストで大文字と小文字を区別して一致する場合にのみ、この操作を許可します。

```
$ 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
```

グラント制約の詳細については、「[グラントの制約の使用](create-grant-overview.md#grant-constraints)」を参照してください 。グラントの詳細については、「[の許可 AWS KMS](grants.md)」を参照してください。

## 暗号化コンテキストのログ記録
<a name="encryption-context-auditing"></a>

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

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

## 暗号化コンテキストの保存
<a name="encryption-context-storing"></a>

 [https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) または [https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) オペレーションを呼び出すときに暗号化コンテキストを簡単に使用できるように、暗号化コンテキストを暗号化されたデータとともに格納できます。暗号化や復号で必要になったときに完全な暗号化コンテキストを作成できる十分な暗号化コンテキストのみを保存することをお勧めします。

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