Amazon EBS 加密
使用 Amazon EBS 加密 作为与 EC2 实例关联的 EBS 资源的直接加密解决方案。借助 Amazon EBS 加密,您无需构建、维护和保护自己的密钥管理基础设施。创建加密卷和快照时,Amazon EBS 加密使用 AWS KMS keys。
加密操作在托管 EC2 实例的服务器上进行,用于确保静态数据安全性以及在实例和其附加的 EBS 存储之间传输的数据的安全性。
您可以同时将加密卷和未加密卷附加到实例。
EBS 加密的工作原理
您可以加密 EC2 实例的引导卷和数据卷。
在创建加密的 EBS 卷并将其附加到支持的实例类型后,将对以下类型的数据进行加密:
-
卷中的静态数据
-
在卷和实例之间移动的所有数据
-
从卷创建的所有快照
-
从这些快照创建的所有卷
Amazon EBS 通过数据密钥使用行业标准的 AES-256 数据加密来加密您的卷。数据密钥由 AWS KMS 生成,然后由 AWS KMS 使用您的 AWS KMS 密钥加密,然后再与您的卷信息一起存储。同一数据密钥将由所有快照以及使用相同 AWS KMS 密钥从这些快照创建的任何后续卷共享。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的数据密钥。
根据用于创建加密卷的快照是加密还是未加密,Amazon EC2 和 AWS KMS 结合使用以稍有不同的方式对 EBS 卷进行加密和解密。
快照加密时 EBS 加密的工作原理
当您从自己拥有的加密快照创建加密卷时,Amazon EC2 和 AWS KMS 结合使用对 EBS 卷进行加密和解密,如下所示:
-
Amazon EC2 将 GenerateDataKeyWithoutPlaintext 请求发送到 AWS KMS,并指定您为卷加密选择的 KMS 密钥。
-
如果使用与快照相同的 KMS 密钥加密卷,AWS KMS 将使用与快照相同的数据密钥,并在同一 KMS 密钥下对其进行加密。如果使用不同的 KMS 密钥加密卷,AWS KMS 会生成一个新的数据密钥,并在您指定的 KMS 密钥下对其进行加密。加密的数据密钥会发送到 Amazon EBS,并与卷元数据存储在一起。
-
当您将加密卷附加到实例时,Amazon EC2 将 CreateGrant 请求发送到 AWS KMS,以便它可以解密数据密钥。
-
AWS KMS 解密加密的数据密钥,然后将解密的数据密钥发送到 Amazon EC2。
-
Amazon EC2 使用管理程序内存中的明文数据密钥来加密卷的磁盘 I/O。只要卷附加到实例,纯文本数据密钥就会保留在内存中。
快照未加密时 EBS 加密的工作原理
当您从未加密的快照创建加密卷时,Amazon EC2 和 AWS KMS 结合使用对 EBS 卷进行加密和解密,如下所示:
-
Amazon EC2 将 CreateGrant 请求发送到 AWS KMS,以便它可以对从快照创建的卷进行加密。
-
Amazon EC2 将 GenerateDataKeyWithoutPlaintext 请求发送到 AWS KMS,并指定您为卷加密选择的 KMS 密钥。
-
AWS KMS 会生成一个新的数据密钥,在您为卷加密选择的 KMS 密钥下加密该密钥,然后将加密后的数据密钥发送到 Amazon EBS 以便与卷元数据一起存储。
-
Amazon EC2 将 Decrypt 请求发送到 AWS KMS 以获取用于加密卷数据的加密密钥。
-
当您将加密卷附加到实例时,Amazon EC2 将 CreateGrant 请求发送到 AWS KMS,以便它可以解密数据密钥。
-
当您将加密卷附加到实例时,Amazon EC2 将 Decrypt 请求发送到 AWS KMS,同时指定加密的数据密钥。
-
AWS KMS 解密加密的数据密钥,然后将解密的数据密钥发送到 Amazon EC2。
-
Amazon EC2 使用管理程序内存中的明文数据密钥来加密卷的磁盘 I/O。只要卷附加到实例,纯文本数据密钥就会保留在内存中。
有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的 Amazon Elastic Block Store (Amazon EBS) 如何使用 AWS KMS 和 Amazon EC2 示例 2。
要求
在您开始之前,确认您满足以下要求。
支持的卷类型
所有 EBS 卷类型都支持加密。您可能希望加密卷具有与未加密卷相同的 IOPS 性能,同时对延迟的影响最低。您可以采用与访问未加密卷相同的方式来访问加密卷。加密和解密是以透明方式处理的,并且不需要您或您的应用程序执行额外操作。
支持的实例类型
Amazon EBS 加密适用于所有 当前一代 和 上一代 实例类型。
用户的权限
当您将 KMS 密钥配置为用于 EBS 加密的默认密钥时,默认 KMS 密钥政策允许任何有权访问所需 KMS 操作的用户使用此 KMS 密钥加密或解密 EBS 资源。您必须授予用户调用以下操作的权限才能使用 EBS 加密:
-
kms:CreateGrant
-
kms:Decrypt
-
kms:DescribeKey
-
kms:GenerateDataKeyWithoutPlainText
-
kms:ReEncrypt
提示
为遵循最小特权原则,请不要允许对 kms:CreateGrant
拥有完全访问权限。而是仅当 AWS 服务代表用户创建授权时,才使用 kms:GrantIsForAWSResource
条件键以允许用户在 KMS 密钥上创建授权,如以下示例所示。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:CreateGrant", "Resource": [ "arn:aws:kms:us-east-2:123456789012:key/abcd1234-a123-456d-a12b-a123b4cd56ef" ], "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ] }
有关更多信息,请参阅 AWS Key Management Service 开发人员指南中默认密钥策略部分中的允许访问AWS账户并启用 IAM policy。
EBS 加密的默认 KMS 密钥
Amazon EBS 自动在您存储 AWS 资源的每个区域中创建唯一的 AWS 托管式密钥。此 KMS 密钥 具有别名 alias/aws/ebs
。默认情况下,Amazon EBS 使用此 KMS 密钥 进行加密。您也可以指定一个您创建的对称客户管理加密密钥,以作为 EBS 加密的原定设置 KMS 密钥。使用您自己的 KMS 密钥 可以提高灵活性,包括提供创建、轮换和禁用 KMS 密钥 的能力。
重要
Amazon EBS 不支持非对称加密 KMS 密钥。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的使用对称和非对称加密 KMS 密钥。
默认加密
您可以配置 AWS 账户对您创建的新 EBS 卷和快照副本进行加密。例如,Amazon EBS 加密当您启动实例时创建的 EBS 卷以及您从未加密的快照复制的快照。有关从未加密转换为加密 EBS 资源的示例,请参阅加密未加密的资源。
默认情况下,加密对现有 EBS 卷或快照没有影响。
注意事项
您无法更改与现有快照或加密卷关联的 KMS 密钥。但是,您可在快照复制操作期间关联另一个 KMS 密钥,从而使生成的已复制快照由新 KMS 密钥 进行加密。
加密 EBS 资源
您可以通过启用加密来加密 EBS 卷:使用默认加密,或者在创建要加密的卷时启用加密。
加密卷时,可以指定用于加密该卷的对称加密 KMS 密钥。如果未指定 KMS 密钥,则用于加密的 KMS 密钥 取决于源快照的加密状态及其所有权。有关更多信息,请参阅加密结果表。
注意
如果您正在使用 API 或 AWS CLI 指定 KMS 密钥,请注意 AWS 将异步对 KMS 密钥 进行身份验证。如果您指定了无效的 KMS 密钥 ID、别名或 ARN,则操作可能会显示完成,但最终失败。
您无法更改与现有快照或卷关联的 KMS 密钥。但是,您可在快照复制操作期间关联另一个 KMS 密钥,从而使生成的已复制快照由新 KMS 密钥 进行加密。
在创建时加密空卷
创建新的空 EBS 卷时,可以通过为特定卷创建操作启用加密来对其进行加密。如果默认情况下启用了 EBS 加密,则会使用 EBS 加密的默认 KMS 密钥 自动加密卷。您也可以为特定的卷创建操作指定不同的对称加密 KMS 密钥。卷从其首次可用时开始加密,因此您的数据始终安全。有关详细步骤,请参阅创建 Amazon EBS 卷。
默认情况下,您在创建卷时选择的 KMS 密钥 会对从该卷拍摄的快照加密,并对从这些加密的快照还原的卷加密。您无法从加密卷或快照删除加密,这意味着从加密快照还原的卷或者加密快照的副本始终加密。
加密卷的快照无法公开,但您可以与特定账户共享加密快照。有关详细指导,请参阅共享 Amazon EBS 快照。
加密未加密的资源
您无法直接加密现有未加密卷或快照。但是,您可以从未加密的卷或快照创建加密卷或快照。如果预设情况下启用加密,Amazon EBS 将使用 EBS 加密的原定设置 KMS 密钥自动加密新卷和快照。否则,您可以在创建单个卷或快照时启用加密,使用用于 Amazon EBS 加密的原定设置 KMS 密钥或对称客户管理加密密钥。有关更多信息,请参阅 创建 Amazon EBS 卷 和 复制 Amazon EBS 快照。
要将快照副本加密到 客户托管密钥,您必须同时启用加密并指定 KMS 密钥,如 复制未加密的快照(未启用默认加密) 中所示。
重要
Amazon EBS 不支持非对称加密 KMS 密钥。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的使用对称和非对称加密 KMS 密钥。
在从由 EBS 支持的 AMI 启动实例时,您还可以应用新的加密状态。这是因为 EBS 支持的 AMI 包括可以按照所述进行加密的 EBS 卷的快照。有关更多信息,请参阅将加密与 EBS 支持的 AMI 结合使用。
轮换 AWS KMS 密钥
加密最佳实践建议不要广泛重复使用加密密钥。要为您的 KMS 密钥创建新的加密材料,您可以创建新的 KMS 密钥,然后更改您的应用程序或别名来使用新的 KMS 密钥。或者,您可以为现有 KMS 密钥启用自动密钥轮换。
如果您为 KMS 密钥启用自动密钥轮换,AWS KMS 会每年为该 KMS 密钥生成新的加密材料。AWS KMS 会保留所有以前版本的加密材料,以便解密使用该 KMS 密钥加密的任何数据。AWS KMS 不会删除任何轮换的密钥材料,直至您删除 KMS 密钥。
当您使用轮换 KMS 密钥加密数据时,AWS KMS 会使用当前的密钥材料。当您使用轮换 KMS 密钥解密数据时,AWS KMS 会使用加密时所用的密钥材料版本。您可以在应用程序和 AWS 服务中安全地使用轮换的 KMS 密钥,而无需代码更改。
注意
只有具有 AWS KMS 创建的密钥材料的对称客户托管密钥才支持自动轮换密钥。AWS KMS 每年自动轮换 AWS 托管式密钥。您无法启用或禁用 AWS 托管式密钥 的密钥轮换。
有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 轮换 KMS 密钥。
加密方案
创建加密 EBS 资源时,除非您在卷创建参数或 AMI 或实例的块设备映射中指定了不同的 客户托管密钥,否则它将使用您账户的用于 EBS 加密的默认 KMS 密钥 进行加密。有关更多信息,请参阅EBS 加密的默认 KMS 密钥。
以下示例说明如何管理卷和快照的加密状态。有关加密案例的完整列表,请参阅加密结果表。
示例
还原未加密的卷(未启用默认加密)
未启用默认加密时,从未加密快照还原的卷在默认情况下不加密。但是,您可以设置 Encrypted
参数和可选的 KmsKeyId
参数来加密生成的卷。下图说明了该过程。

如果您省略 KmsKeyId
参数,则将使用您用于 EBS 加密的默认 KMS 密钥 加密生成的卷。您必须指定 KMS 密钥 ID 以使用不同的 KMS 密钥 加密卷。
有关更多信息,请参阅从快照创建卷。
还原未加密的卷(启用了默认加密)
在您启用了默认加密时,从未加密快照还原的卷必须加密,无需使用默认 KMS 密钥 的加密参数。下图说明了这种简单默认案例:

如果您要使用对称客户管理加密密钥来加密还原的卷,则必须提供 Encrypted
和 KmsKeyId
参数,如 还原未加密的卷(未启用默认加密) 中所示。
复制未加密的快照(未启用默认加密)
未启用默认加密时,未加密快照的副本在默认情况下不加密。但是,您可以设置 Encrypted
参数和可选的 KmsKeyId
参数来加密生成的快照。如果省略 KmsKeyId
,则使用默认 KMS 密钥 加密生成的快照。您必须指定 KMS 密钥 ID 以使用不同的对称加密 KMS 密钥对卷进行加密。
下图说明了该过程。

您可以将未加密的快照复制到加密的快照,然后从加密的快照中创建卷来加密 EBS 卷。有关更多信息,请参阅复制 Amazon EBS 快照。
复制未加密的快照(启用了默认加密)
在您启用了默认加密时,未加密快照的副本必须加密,无需使用默认 KMS 密钥 的加密参数。下图说明了这种默认情况:

重新加密已加密卷
对加密快照执行 CreateVolume
操作时,您可以选择使用不同的 KMS 密钥 重新加密它。下图说明了该过程。在本例中,您拥有两个 KMS 密钥,即 KMS 密钥 A 和 KMS 密钥 B。源快照由 KMS 密钥 A 加密。在卷创建期间,由于 KMS 密钥 B 的 KMS 密钥 ID 被指定为一个参数,因此源数据被自动解密,然后由 KMS 密钥 B 重新加密。

有关更多信息,请参阅从快照创建卷。
重新加密已加密快照
由于能够在复制过程中加密快照,您可以将新的对称加密 KMS 密钥应用于您拥有的已加密过的快照。从生成的副本还原的卷只能使用新的 KMS 密钥 进行访问。下图说明了该过程。在本例中,您拥有两个 KMS 密钥,即 KMS 密钥 A 和 KMS 密钥 B。源快照由 KMS 密钥 A 加密。在复制期间,由于 KMS 密钥 B 的 KMS 密钥 ID 被指定为一个参数,因此源数据由 KMS 密钥 B 自动重新加密。

在相关的场景中,您可以选择将新加密参数应用于已与您共享的快照的副本。默认情况下,系统会使用快照拥有者共享的 KMS 密钥 对该副本进行加密。但是,我们建议您使用您控制的其他 KMS 密钥 创建共享快照的副本。这样,即使原始 KMS 密钥 遭到泄露或拥有者出于任何原因撤销了 KMS 密钥,您也不会失去对卷的访问权限。有关更多信息,请参阅加密和快照复制。
在加密卷与未加密卷之间迁移数据
当您对加密卷和未加密卷都可以访问时,就可以在它们之间自由传输数据了。EC2 透明地执行加密和解密操作。
例如,使用 rsync 命令复制数据。在以下命令中,源数据位于 /mnt/source
中,目标卷挂载在 /mnt/destination
中。
[ec2-user ~]$
sudo rsync -avh --progress
/mnt/source/
/mnt/destination/
加密结果
下表描述了每种可能的设置组合的加密结果。
是否已启用加密? | 默认启用加密? | 卷来源 | 默认值(未指定客户托管密钥) | 自定义(指定客户托管密钥) |
---|---|---|---|---|
否 | 否 | 新(空)卷 | 未加密 | 不适用 |
否 | 否 | 您拥有的未加密快照 | 未加密 | |
否 | 否 | 您拥有的加密快照 | 按相同密钥加密 | |
否 | 否 | 与您共享的未加密快照 | 未加密 | |
否 | 否 | 与您共享的加密快照 | 由默认客户托管密钥加密* | |
是 | 否 | 新卷 | 由默认客户托管密钥加密 | 由指定的客户托管密钥加密** |
是 | 否 | 您拥有的未加密快照 | 由默认客户托管密钥加密 | |
是 | 否 | 您拥有的加密快照 | 按相同密钥加密 | |
是 | 否 | 与您共享的未加密快照 | 由默认客户托管密钥加密 | |
是 | 否 | 与您共享的加密快照 | 由默认客户托管密钥加密 | |
否 | 是 | 新(空)卷 | 由默认客户托管密钥加密 | 不适用 |
否 | 是 | 您拥有的未加密快照 | 由默认客户托管密钥加密 | |
否 | 是 | 您拥有的加密快照 | 按相同密钥加密 | |
否 | 是 | 与您共享的未加密快照 | 由默认客户托管密钥加密 | |
否 | 是 | 与您共享的加密快照 | 由默认客户托管密钥加密 | |
是 | 是 | 新卷 | 由默认客户托管密钥加密 | 由指定的客户托管密钥加密 |
是 | 是 | 您拥有的未加密快照 | 由默认客户托管密钥加密 | |
是 | 是 | 您拥有的加密快照 | 按相同密钥加密 | |
是 | 是 | 与您共享的未加密快照 | 由默认客户托管密钥加密 | |
是 | 是 | 与您共享的加密快照 | 由默认客户托管密钥加密 |
* 这是用于AWS账户和区域的 EBS 加密的默认客户托管密钥。默认情况下,这是 EBS 唯一的 AWS 托管式密钥,您也可以指定自定义的托管密钥。有关更多信息,请参阅EBS 加密的默认 KMS 密钥。
**这是在启动时为卷指定的客户托管密钥。将为 AWS 账户和区域使用此客户托管密钥,而不是使用默认的客户托管密钥。
使用 API 和 CLI 设置加密默认值
您可以使用以下 API 操作和 CLI 命令默认管理加密和默认 KMS 密钥。
API 操作 | CLI 命令 | 描述 |
---|---|---|
disable-ebs-encryption-by-default |
默认禁用加密。 |
|
enable-ebs-encryption-by-default |
默认启用加密。 |
|
get-ebs-default-kms-key-id |
描述默认 KMS 密钥。 |
|
get-ebs-encryption-by-default |
指示是否默认启用了加密。 |
|
modify-ebs-default-kms-key-id |
更改用于加密 EBS 卷的默认 KMS 密钥。 |
|
reset-ebs-default-kms-key-id |
将 AWS 托管式密钥 重置为用于加密 EBS 卷的默认 KMS 密钥。 |