AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

删除客户主密钥

删除 AWS Key Management Service (AWS KMS) 中的客户主密钥 (CMK) 是一项破坏性操作且具有潜在危险。这将删除密钥材料以及与 CMK 关联的所有元数据,并且不可撤销。删除 CMK 后,您无法再解密使用该 CMK 加密的数据,这意味着数据将无法恢复。只有当您确定不再需要使用 CMK 时,才能将其删除。如果您不确定,请考虑禁用 CMK,而不是将其删除。如果您稍后需要再次使用已禁用的 CMK,您可以重新启用,但您无法恢复已删除的 CMK。

在删除 CMK 之前,您可能需要了解使用该 CMK 加密了多少密文。AWS KMS 不会存储此信息,也不会存储任何密文。要获取此信息,您必须自行确定 CMK 的过去使用情况。想要获取可能有助于您完成该操作的一些指导,请转到确定客户主密钥的过去使用情况

您可能会出于以下一个或多个原因而选择删除 CMK:

  • 完成不再需要的 CMK 的密钥生命周期

  • 避免因维护不用的 CMK 而产生的管理开销和成本

  • 减少计入您的限制的 CMK 的数量

注意

如果关闭或删除您的 AWS 账户,您的 CMK 将变得无法访问,您也不必再为它们付费。您不需要在关闭账户的操作之外单独计划删除 CMK。

删除客户主密钥的原理

因为删除客户主密钥 (CMK) 是一项破坏性操作且具有潜在危险,所以 AWS KMS 强制实施等待期限。要删除 AWS KMS 中的 CMK,请计划密钥删除。您可以设置一个等待期限,最短 7 天,最长 30 天。默认的等待期限为 30 天。

在等待期内,CMK 状态和密钥状态为 Pending deletion (等待删除)

  • 待删除的 CMK 不能用于任何加密操作。

  • AWS KMS 不会为待删除的 CMK 轮换备用密钥

等待期限结束后,AWS KMS 将删除 CMK 以及与其关联的所有 AWS KMS 数据,包括所有指向该 CMK 的别名。

当您计划密钥删除时,AWS KMS 将报告等待期限结束的日期和时间。此日期和时间最早为您计划密钥删除后指定的天数,但也可能要久最多 24 小时。例如,假设您计划密钥删除并指定 7 天的等待期限。在此情况下,自您请求之时起,等待期的结束时间应不早于 7 天且不超过 8 天。您可以通过 AWS 管理控制台、AWS CLI 或 AWS KMS API 确认等待期限结束的准确日期和时间。

请利用等待期限确保您无论现在还是将来都不需要 CMK。您可以配置 Amazon CloudWatch 警报,以便有人或应用程序在等待期限内试图使用 CMK 时发出警告。要恢复 CMK,您可以在等待期限结束前取消密钥删除。等待期限结束后,将无法取消密钥删除,AWS KMS 将删除 CMK。

删除客户主密钥对与 AWS KMS 集成的 AWS 服务有何影响

有多个 AWS 服务都与 AWS KMS 进行了集成,以保护您的数据。其中一些服务(如 Amazon EBSAmazon Redshift)使用 AWS KMS 中的客户主密钥 (CMK) 生成数据密钥,然后使用数据密钥加密您的数据。只要明文数据密钥所保护的数据还在经常使用,这些密钥就会保留在内存中。

计划删除 CMK 将使其变得不可用,但它不会阻止 AWS 服务使用内存中的数据密钥来加密和解密您的数据。该服务不会受到影响,直到它需要使用待删除或已删除的 CMK。

例如,考虑以下情景:

  1. 您创建一个加密的 EBS 卷并指定 CMK。Amazon EBS 要求 AWS KMS 使用您的 CMK 来为该卷生成加密数据密钥。Amazon EBS 使用该卷存储加密数据密钥。

  2. 当您将 EBS 卷附加到一个 EC2 实例时,Amazon EC2 会要求 AWS KMS 使用您的 CMK 以解密 EBS 卷的加密数据密钥。Amazon EC2 将明文数据密钥存储在管理程序内存中并使用它来加密 EBS 卷的磁盘 I/O。只要 EBS 卷附加到 EC2 实例,数据密钥就会保留在内存中。

  3. 您计划删除 CMK,从而使其变得不可用。这不会立即影响到 EC2 实例或 EBS 卷,因为 Amazon EC2 正在使用明文数据密钥 — 不是 CMK — 加密 EBS 卷的磁盘 I/O。

    即使在计划时间结束后和 AWS KMS 删除 CMK 时,也不会立即影响到 EC2 实例或 EBS 卷,因为 Amazon EC2 正在使用明文数据密钥而不是 CMK。

  4. 但是,当加密的 EBS 卷从 EC2 实例分离时,Amazon EBS 将从内存中删除该明文密钥。下次将加密的 EBS 卷附加到 EC2 实例时,附加会失败,因为 Amazon EBS 无法使用 CMK 来解密卷的加密数据密钥。

计划和取消密钥删除

以下过程介绍如何使用 AWS 管理控制台、AWS CLI 和AWS SDK for Java在 AWS KMS 中计划密钥删除和取消密钥删除。

警告

删除 AWS KMS 中的客户主密钥 (CMK) 是一项破坏性操作且具有潜在危险。只有当您确定不再需要使用 CMK 并且将来也不再需要了,才能继续删除操作。如果您不确定,则应禁用 CMK,而不是将其删除。

在删除 CMK 之前,您必须具有执行这一操作的权限。如果您仅依赖密钥策略来指定 AWS KMS 权限,则可能需要添加额外的权限才能删除 CMK。有关添加这些权限的信息,请转到添加计划和取消密钥删除所需的权限

计划和取消密钥删除 (控制台)

您可以在 AWS 管理控制台中计划和取消密钥删除。

注意

AWS KMS 最近引入了新的控制台,使您可以更轻松地组织和管理 KMS 资源。它在除了 AWS GovCloud (US)之外 AWS KMS 支持的所有 AWS 区域中可用。我们建议您通过 https://console.amazonaws.cn/kms 试用新的 AWS KMS 控制台。

原始控制台将在短时间内保持可用状态,以便您有时间熟悉新控制台。要使用原始控制台,请在 IAM 控制台中选择加密密钥,或者转到 。请通过在任意控制台中或者在此页面的右下角选择 Feedback (反馈) 来分享您的反馈。

计划和取消密钥删除(新控制台)

计划密钥删除

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.amazonaws.cn/kms

  2. 要更改 AWS 区域,请使用页面右上角的区域选择器。

  3. 在导航窗格中,选择 Customer managed keys (客户托管密钥)

  4. 选中想要删除的 CMK 旁边的复选框。

  5. 依次选择 Key actions (密钥操作)Schedule key deletion (计划密钥删除)

  6. 对于 Waiting period (in days) (等待期限(天)),键入一个介于 7 和 30 之间的天数。

  7. 选中 Confirm you want to schedule this key for deletion in <number of days> days (确认您要计划在 n 天后删除此密钥) 旁的复选框。

  8. 选择计划删除

CMK 状态更改为 Pending deletion (等待删除)

取消密钥删除

  1. https://console.amazonaws.cn/kms 打开 AWS KMS 控制台。

  2. 要更改 AWS 区域,请使用页面右上角的区域选择器。

  3. 在导航窗格中,选择 Customer managed keys (客户托管密钥)

  4. 选中想要恢复的 CMK 旁边的复选框。

  5. 依次选择 Key actions (密钥操作)Cancel key deletion (取消密钥删除)

CMK 状态将从 Pending deletion (等待删除) 更改为 Disabled (已禁用)。要使用该 CMK,您必须启用它

计划和取消密钥删除(原始控制台)

计划密钥删除

  1. 登录 AWS 管理控制台,然后转至 。

  2. 对于 Region (区域),选择适当的 AWS 区域。请勿使用导航栏中的区域选择器(右上角)。

  3. 选中想要删除的 CMK 旁边的复选框。

  4. 依次选择密钥操作计划密钥删除

  5. 对于等待期限(天),键入 7 到 30 之间的天数。选择计划删除

CMK 状态更改为待删除

取消密钥删除

  1. 转至 上的原始 AWS KMS 控制台。

  2. 对于 Region (区域),选择适当的 AWS 区域。请勿使用导航栏中的区域选择器(右上角)。

  3. 选中想要恢复的 CMK 旁边的复选框。

  4. 依次选择密钥操作取消密钥删除

CMK 状态将从待删除更改为已禁用。要使用该 CMK,您必须启用它

计划和取消密钥删除 (AWS CLI)

从 AWS CLI 使用 aws kms schedule-key-deletion 命令计划密钥删除,如以下示例所示。

$ aws kms schedule-key-deletion --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --pending-window-in-days 10

使用成功后,AWS CLI 将返回与以下示例中显示的输出类似的输出:

{ "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "DeletionDate": 1442102400.0 }

从 AWS CLI 使用 aws kms cancel-key-deletion 命令取消密钥删除,如以下示例所示。

$ aws kms cancel-key-deletion --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

使用成功后,AWS CLI 将返回与以下示例中显示的输出类似的输出:

{ "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }

CMK 状态将从待删除更改为已禁用。要使用该 CMK,您必须启用它

计划和取消密钥删除 (AWS SDK for Java)

以下示例演示如何使用AWS SDK for Java计划 CMK 删除。此示例要求您在此之前将 AWSKMSClient 实例化为 kms

String KeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; int PendingWindowInDays = 10; ScheduleKeyDeletionRequest scheduleKeyDeletionRequest = new ScheduleKeyDeletionRequest().withKeyId(KeyId).withPendingWindowInDays(PendingWindowInDays); kms.scheduleKeyDeletion(scheduleKeyDeletionRequest);

以下示例演示如何使用AWS SDK for Java取消密钥删除。此示例要求您在此之前将 AWSKMSClient 实例化为 kms

String KeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; CancelKeyDeletionRequest cancelKeyDeletionRequest = new CancelKeyDeletionRequest().withKeyId(KeyId); kms.cancelKeyDeletion(cancelKeyDeletionRequest);

CMK 状态将从待删除更改为已禁用。要使用该 CMK,您必须启用它

添加计划和取消密钥删除所需的权限

如果您使用 IAM 策略允许 AWS KMS 权限,则具有 AWS 管理员访问权限 ("Action": "*") 或 AWS KMS 完全访问权限 ("Action": "kms:*") 的所有 IAM 用户和角色都已获准为 AWS KMS CMK 计划和取消密钥删除。如果您仅依赖密钥策略来允许 AWS KMS 权限,则您可能需要添加额外的权限,才能允许您的 IAM 用户和角色删除 CMK。要添加这些权限,请参阅以下步骤。

以下过程介绍如何使用 AWS 管理控制台或 AWS CLI 向密钥策略添加权限。

添加计划和取消密钥删除所需权限的方法

添加计划和取消密钥删除所需的权限 (控制台)

您可以使用 AWS 管理控制台来添加计划和取消密钥删除所需的权限。

注意

AWS KMS 最近引入了新的控制台,使您可以更轻松地组织和管理 KMS 资源。它在除了 AWS GovCloud (US)之外 AWS KMS 支持的所有 AWS 区域中可用。我们建议您通过 https://console.amazonaws.cn/kms 试用新的 AWS KMS 控制台。

原始控制台将在短时间内保持可用状态,以便您有时间熟悉新控制台。要使用原始控制台,请在 IAM 控制台中选择加密密钥,或者转到 。请通过在任意控制台中或者在此页面的右下角选择 Feedback (反馈) 来分享您的反馈。

添加计划和取消密钥删除所需的权限(新控制台)
  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.amazonaws.cn/kms

  2. 要更改 AWS 区域,请使用页面右上角的区域选择器。

  3. 在导航窗格中,选择 Customer managed keys (客户托管密钥)

  4. 选择要更改其权限的 CMK 的别名或密钥 ID。

  5. Key policy (密钥策略) 部分的 Key deletion (密钥删除) 下,选择 Allow key administrators to delete this key (允许密钥管理员删除此密钥),然后选择 Save changes (保存更改)

    注意

    如果您没有看到 Allow key administrators to delete this key (允许密钥管理员删除此密钥) 选项,这通常意味着您已使用 AWS KMS API 修改此密钥策略。在此情况下,您必须手动更新密钥策略文档。将 kms:ScheduleKeyDeletionkms:CancelKeyDeletion 权限添加到密钥策略中的密钥管理员语句 ("Sid": "Allow access for Key Administrators"),然后选择 Save changes (保存更改)

添加计划和取消密钥删除所需的权限(原始控制台)
  1. 登录 AWS 管理控制台,然后转至 。

  2. 对于 Region (区域),选择适当的 AWS 区域。请勿使用导航栏中的区域选择器(右上角)。

  3. 选择您想要更改其权限的 CMK 的别名。

  4. 密钥策略部分的密钥删除下,选择允许密钥管理员删除此密钥,然后选择保存更改

    注意

    如果您没有看到允许密钥管理员删除此密钥选项,这可能意味着您之前使用 AWS KMS API 修改过此密钥策略。在此情况下,您必须手动更新密钥策略文档。将 kms:ScheduleKeyDeletionkms:CancelKeyDeletion 权限添加到密钥策略中的密钥管理员语句 ("Sid": "Allow access for Key Administrators"),然后选择 Save changes (保存更改)

添加计划和取消密钥删除所需的权限 (AWS CLI)

您可以使用 AWS Command Line Interface来添加计划和取消密钥删除所需的权限。

添加计划和取消密钥删除所需的权限

  1. 使用 aws kms get-key-policy 命令检索现有的密钥策略,然后将策略文档保存到文件中。

  2. 在您的首选文本编辑器中打开策略文档,将 kms:ScheduleKeyDeletionkms:CancelKeyDeletion 权限添加到向密钥管理员授予权限的策略语句(例如,带有 "Sid": "Allow access for Key Administrators" 的策略语句)。然后保存文件。以下示例显示了一个具有这两项权限的策略语句:

    { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/KMSKeyAdmin"}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }
  3. 使用 aws kms put-key-policy 命令将密钥策略应用于 CMK。