

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

# Amazon EBS 加密的工作原理
<a name="how-ebs-encryption-works"></a>

您可以加密 EC2 实例的引导卷和数据卷。

在创建加密的 EBS 卷并将其附加到支持的实例类型后，将对以下类型的数据进行加密：
+ 卷中的静态数据
+ 在卷和实例之间移动的所有数据
+ 从卷创建的所有快照
+ 从这些快照创建的所有卷

Amazon EBS 通过[数据密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys)使用行业标准的 AES-256 数据加密来加密卷。数据密钥由生成， AWS KMS 然后 AWS KMS 用 AWS KMS 密钥加密，然后与您的卷信息一起存储。Amazon EBS 会在您创建亚马逊 EBS 资源的每个区域自动创建唯一 AWS 托管式密钥 的。KMS 密钥的[别名](https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html)是 `aws/ebs`。默认情况下，Amazon EBS 使用此 KMS 密钥 进行加密。或者，您可以使用自己创建的对称客户管理加密密钥。使用您自己的 KMS 密钥 可以提高灵活性，包括提供创建、轮换和禁用 KMS 密钥 的能力。

Amazon EC2 使用加密和解密您的 EBS 卷的方式略有不同，具体取决于您创建加密卷的快照是加密还是未加密。 AWS KMS 

## 快照加密时 EBS 加密的工作原理
<a name="how-ebs-encryption-works-encrypted-snapshot"></a>

当您使用自己拥有的加密快照创建加密卷时，Amazon EC2 会按如下方式 AWS KMS 对您的 EBS 卷进行加密和解密：

1. Amazon EC2 向发送[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)请求 AWS KMS，指定您为批量加密选择的 KMS 密钥。

1. 如果使用与快照相同的 KMS 密钥加密卷，则 AWS KMS 使用与快照相同的数据密钥并使用相同的 KMS 密钥对其进行加密。如果使用不同的 KMS 密钥对卷进行加密，则 AWS KMS 会生成新的数据密钥并使用您指定的 KMS 密钥对其进行加密。加密的数据密钥会发送到 Amazon EBS，并与卷元数据存储在一起。

1. 当您将加密卷附加到实例时，Amazon EC2 会向发送[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)请求， AWS KMS 以便它可以解密数据密钥。

1. AWS KMS 解密加密的数据密钥并将解密后的数据密钥发送到 Amazon EC2。

1. Amazon EC2 使用 Nitro 硬件中的明文数据密钥将磁盘加密到该卷 I/O 。只要卷附加到实例，纯文本数据密钥就会保留在内存中。

## 快照未加密时 EBS 加密的工作原理
<a name="how-ebs-encryption-works-unencrypted-snapshot"></a>

当您从未加密的快照创建加密卷时，Amazon EC2 和 AWS KMS 结合使用对 EBS 卷进行加密和解密，如下所示：

1. Amazon EC2 向发送[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)请求 AWS KMS，以便它可以加密根据快照创建的卷。

1. Amazon EC2 向发送[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)请求 AWS KMS，指定您为批量加密选择的 KMS 密钥。

1. AWS KMS 生成新的数据密钥，使用您为卷加密选择的 KMS 密钥对其进行加密，然后将加密的数据密钥发送到 Amazon EBS，以便与卷元数据一起存储。

1. Amazon EC2 向发送[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求 AWS KMS 以解密加密的数据密钥，然后使用该密钥对卷数据进行加密。

1. 当您将加密卷连接到实例时，Amazon EC2 会向发送[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)请求 AWS KMS，以便它可以解密数据密钥。

1. 当您将加密卷附加到实例时，Amazon EC2 会向发送[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求 AWS KMS，指定加密的数据密钥。

1. AWS KMS 解密加密的数据密钥并将解密后的数据密钥发送到 Amazon EC2。

1. Amazon EC2 使用 Nitro 硬件中的明文数据密钥将磁盘加密到该卷 I/O 。只要卷附加到实例，纯文本数据密钥就会保留在内存中。

有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的 [Amazon Elastic Block Store（Amazon EBS）如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-ebs.html) 和 [Amazon EC2 示例 2](https://docs.aws.amazon.com/kms/latest/developerguide/ct-ec2two.html)。

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

当 KMS 密钥不可用时，您可以立即发现（取决于最终一致性）。KMS 密钥的密钥状态会出现变更，以反映其新情况，并且加密操作中使用 KMS 密钥的所有请求都将失败。

当执行让 KMS 密钥不可用的操作时，不会立即对 EC2 实例或连接的 EBS 卷产生影响。当卷连接到实例 I/O 时，Amazon EC2 使用数据密钥而不是 KMS 密钥来加密所有磁盘。

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

**提示**  
如果不再希望对存储在 EBS 卷中的数据进行访问，该数据使用由 KMS 密钥生成的数据密钥进行加密，但您打算让其无法使用，我们建议您在让 KMS 密钥不可用之前将 EBS 卷与 EC2 实例分离。

有关更多信息，请参见《AWS Key Management Service 开发人员指南》**中的[不可用的 KMS 密钥如何影响数据密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#unusable-kms-keys)。