

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 加密內容
<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 Logs](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 產生的標籤](https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html#tag-conventions)，例如 [aws：cloudformation：stack-name](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-resource-tags.html)。如需詳細資訊，請參閱[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)條件，以建立授予許可的條件。 AWS KMS 支援兩個授予限制，`EncryptionContextEquals`以及 `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) 操作時的任何加密內容使用，您可以將加密內容與加密的資料存放在一起。我們建議您只存放足夠的加密內容，以協助您在需要用它來加密或解密時建立完整的加密內容。

例如，如果加密內容是完整路徑檔案，只需將部分路徑與加密的檔案內容一起存放。接著，當您需要完整的加密內容，請從存放的片段中重新建構。如果有人擅自竄改檔案，例如重新命名或移到不同的位置，加密內容值會變更，解密請求會失敗。