

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 生成数据密钥
<a name="data-keys"></a>

*数据密钥*是可用于加密数据的对称密钥，包括大量数据和其他数据加密密钥。与无法下载的对称 KMS 密钥不同的是，数据密钥可以返回给您在 AWS KMS外部使用。

 AWS KMS 生成数据密钥时，它会返回一个供立即使用的纯文本数据密钥（可选）和数据密钥的加密副本，您可以安全地将其与数据一起存储。当你准备好解密数据时，你首先要求 AWS KMS 解密加密的数据密钥。

AWS KMS 生成、加密和解密数据密钥。但是， AWS KMS 不会存储、管理或跟踪您的数据密钥，也不会使用数据密钥执行加密操作。您必须在外部使用和管理数据密钥 AWS KMS。有关安全使用数据密钥的帮助，请参阅 [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)。

**Topics**
+ [创建数据密钥](#data-keys-create)
+ [如何使用数据密钥进行加密操作](#use-data-keys)
+ [不可用的 KMS 密钥如何影响数据密钥](unusable-kms-keys.md)

## 创建数据密钥
<a name="data-keys-create"></a>

要创建数据密钥，请调用该[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)操作。 AWS KMS 生成数据密钥。然后，它会在您指定的[对称加密 KMS 密钥](symm-asymm-choose-key-spec.md#symmetric-cmks)下加密数据密钥的副本。此操作会返回数据密钥的明文副本以及由 KMS 密钥加密的数据密钥的副本。下图展示了此操作。

![\[生成数据密钥\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/generate-data-key.png)


AWS KMS 还支持该[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)操作，该操作仅返回加密的数据密钥。当您需要使用数据密钥时，请要求对其 AWS KMS 进行[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)。

## 如何使用数据密钥进行加密操作
<a name="use-data-keys"></a>

以下主题说明了[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)或[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)操作生成的数据密钥的工作原理。

### 使用数据密钥加密数据
<a name="data-keys-encrypt"></a>

AWS KMS 无法使用数据密钥加密数据。但是你可以在外部使用数据密钥 AWS KMS，例如使用 OpenSSL 或加密库，比如。[AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)

在使用明文数据密钥加密数据后，请尽快从内存中将其删除。您可以安全地存储加密数据密钥及加密数据，以便其可根据需要用于解密数据。

![\[加密外部的用户数据 AWS KMS\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/encrypt-with-data-key.png)


### 使用数据密钥解密数据
<a name="data-keys-decrypt"></a>

要解密您的数据，请将加密的数据密钥传递给[解](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)密操作。 AWS KMS 使用您的 KMS 密钥解密数据密钥，然后返回纯文本数据密钥。使用明文数据密钥解密数据，并尽快从内存中删除该明文数据密钥。

下图显示了如何使用 `Decrypt` 操作解密加密的数据密钥。

![\[解密数据密钥\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/decrypt.png)


# 不可用的 KMS 密钥如何影响数据密钥
<a name="unusable-kms-keys"></a>

当 KMS 密钥不可用时，您可以立即发现（取决于最终一致性）。KMS 密钥的[密钥状态](key-state.md)会出现变更，以反映其新情况，并且[加密操作](kms-cryptography.md#cryptographic-operations)中使用 KMS 密钥的所有请求都将失败。

但是，对由 KMS 密钥加密的数据密钥，以及由数据密钥加密的数据的影响会延迟，直至再次使用 KMS 密钥（例如用于解密数据密钥）。

KMS 密钥状态变为不可用的原因有许多，包括您可能执行的以下操作。
+ [禁用 KMS 密钥](enabling-keys.md)
+ [安排删除 KMS 密钥](deleting-keys.md)
+ 从具有已导入密钥材料的 KMS 密钥中[删除密钥材料](importing-keys-delete-key-material.md)，或允许导入的密钥材料过期。如果来源为 `EXTERNAL` 的 KMS 密钥关联了多个密钥材料，则任何密钥材料被删除或过期都将导致该密钥无法使用。
+ [断开托管 KMS AWS CloudHSM 密钥的密钥存储库](disconnect-keystore.md)的连接，或者[从 AWS CloudHSM 集群中删除](fix-keystore.md#fix-cmk-failed)用作 KMS 密钥材料的密钥。
+ [断开托管 KMS 密钥的外部密钥存储的连接](about-xks-disconnecting.md)，或干扰对外部密钥存储代理的加密和解密请求的任何其他操作，包括从其外部密钥管理器中删除外部密钥。

对于许多使用数据密钥保护服务管理 AWS 服务 的资源的人来说，这种效果尤其重要。以下示例使用亚马逊弹性区块存储 (Amazon EBS) 和亚马逊弹性计算云 ( EC2亚马逊)。不同的 AWS 服务 使用数据密钥的方式不同。有关详细信息，请参阅 AWS 服务的“安全性”一章的“数据保护”部分。

例如，考虑以下情景：

1. 您[创建加密 EBS 卷](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html)并指定 KMS 密钥来保护该卷。Amazon EBS 要求 AWS KMS 使用您的 KMS 密钥来为该卷[生成加密数据密钥](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)。Amazon EBS 使用该卷的元数据存储加密数据密钥。

1. 当您将 EBS 卷附加到 EC2 实例时，Amazon 会 EC2 使用您的 KMS 密钥来解密 EBS 卷的加密数据密钥。Amazon EC2 使用 Nitro 硬件中的数据密钥，该硬件负责将所有磁盘加密 I/O 到 EBS 卷。当 EBS 卷连接到实例时，数据密钥将保留在 Nitro 硬件中。 EC2 

1. 您执行的操作会使 KMS 密钥不可用。这对 EC2 实例或 EBS 卷没有立竿见影的影响。当卷连接到实例时，Amazon EC2 使用数据密钥（而不是 KMS 密 I/O 钥）来加密所有磁盘。

1. 但是，当加密的 EBS 卷与 EC2 实例分离时，Amazon EBS 会从 Nitro 硬件中删除数据密钥。下次将加密的 EBS 卷连接到 EC2 实例时，连接会失败，因为 Amazon EBS 无法使用 KMS 密钥来解密该卷的加密数据密钥。要再次使用 EBS 卷，您必须使该 KMS 密钥可重新使用。