删除 AWS KMS keys - AWS Key Management Service

删除 AWS KMS keys

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

您只能安排删除客户托管的密钥。您无法删除 AWS 托管式密钥或 AWS 拥有的密钥。

在删除 KMS 密钥之前,您可能想要了解使用该 KMS 密钥加密了多少密文。AWS KMS 不会存储此信息,也不会存储任何密文。要获取此信息,您必须确定 KMS 密钥的过去使用情况。如需帮助,请转到 确定 KMS 密钥的过去使用情况

AWS KMS 从不会删除您的 KMS 密钥,除非您明确安排删除它们并且强制的等待期到期。

但是,您可能会出于以下一个或多个原因而选择删除 KMS 密钥:

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

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

  • 减少计入您的 KMS 密钥资源配额的 KMS 密钥数量

注意

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

在您计划删除 KMS 密钥且 KMS 密钥被实际删除时,AWS KMS 会将一个条目记录在 AWS CloudTrail 日志中。

有关删除多区域主密钥和副本密钥的信息,请参阅 删除多区域密钥

关于等待期限

因为删除 KMS 密钥具有破坏性且存在潜在危险,所以 AWS KMS 要求您将等待期限设置为 7-30 天。默认的等待期限为 30 天。

但是,实际等待期限可能最多比您计划的时间长 24 小时。要获取删除 KMS 密钥的实际日期和时间,请使用 DescribeKey 操作。或者在 AWS KMS 控制台中的 KMS 密钥详细信息页面General configuration(常规配置)部分中,参阅计划删除日期。请务必记下时区。

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

等待期结束后,AWS KMS 会删除 KMS 密钥、其别名以及所有相关的 AWS KMS 元数据。

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

删除非对称 KMS 密钥

获得授权的用户可以删除对称 KMS 密钥或非对称 KMS 密钥。对于两种密钥类型,计划删除 KMS 密钥的过程是相同的。但是,由于非对称 KMS 密钥的公有密钥可以下载并在 AWS KMS 外部使用,因此操作会带来重大的额外风险,尤其是对于用于加密的非对称 KMS 密钥(密钥用法为 ENCRYPT_DECRYPT)。

  • 您在计划删除 KMS 密钥时,KMS 密钥的密钥状态将更改为 Pending deletion(等待删除),并且 KMS 密钥将无法用在加密操作中。但是,计划删除对 AWS KMS 外部的公有密钥没有影响。持有公有密钥的用户可以继续使用该密钥加密消息。他们不会收到密钥状态已更改的任何通知。除非删除取消,否则使用公有密钥创建的密文将无法解密。

  • 告警、日志以及其他检测试图使用等待删除的 KMS 密钥的策略,无法检测到 AWS KMS 外部公有密钥的使用。

  • KMS 密钥删除后,涉及该 KMS 密钥的所有 AWS KMS 操作都将失败。但是,持有公有密钥的用户可以继续使用该密钥加密消息。这些密文将无法解密。

如果必须删除密钥用法为 ENCRYPT_DECRYPT 的非对称 KMS 密钥,请使用 CloudTrail 日志条目确定是否已下载并共享公有密钥。如果有,请验证该公有密钥是否在 AWS KMS 外部使用。然后,考虑禁用 KMS 密钥而不是将其删除。

删除多区域密钥

获得授权的用户可以计划删除多区域主密钥和副本密钥。然而,AWS KMS 将不会删除具有副本密钥的多区域主密钥。此外,只要主密钥存在,您就可以重新创建已删除的多区域副本密钥。有关详细信息,请参阅删除多区域密钥

计划和取消密钥删除

以下过程介绍如何通过 AWS Management Console、AWS CLI 和 AWS SDK for Java 在 AWS KMS 中计划密钥删除和取消单区域 AWS KMS keys(KMS 密钥)的密钥删除。

有关计划删除多区域密钥的信息,请参阅 删除多区域密钥

警告

删除 KMS 密钥具有破坏性和潜在危险性。只有当您确定不再需要使用 KMS 密钥并且将来也不再需要了,才能继续删除操作。如果您不确定,则应禁用 KMS 密钥,而不是将其删除。

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

在您计划删除 KMS 密钥且 KMS 密钥被实际删除时,AWS KMS 会将一个条目记录在 AWS CloudTrail 日志中。

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

在 AWS Management Console 中,您可以一次安排和取消删除多个 KMS 密钥。

计划密钥删除

  1. 登录到 AWS Management Console,然后通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.aws.amazon.com/kms

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

  3. 在导航窗格中,选择客户托管密钥

    您无法安排删除 AWS 托管式密钥AWS 拥有的密钥

  4. 选中想要删除的 KMS 密钥旁边的复选框。

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

  6. 阅读并考虑警告,以及有关在等待期限内取消删除的信息。如果决定取消删除,请在页面底部选择 Cancel(取消)。

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

  8. 查看正在删除的 KMS 密钥。

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

  10. 选择计划删除

KMS 密钥状态将更改为等待删除

取消密钥删除

  1. 在 AWS KMShttps://console.aws.amazon.com/kms 打开 控制台。

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

  3. 在导航窗格中,选择客户托管密钥

  4. 选中想要恢复的 KMS 密钥旁边的复选框。

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

KMS 密钥状态将从待删除更改为已禁用。要使用 KMS 密钥,您必须将其启用

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

使用 aws kms schedule-key-deletion 命令安排删除客户托管的密钥,如以下示例所示。

您无法计划删除 AWS 托管式密钥或 AWS 拥有的密钥。

$ 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": 1598304792.0, "KeyState": "PendingDeletion", "PendingWindowInDays": 10 }

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

$ 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" }

KMS 密钥的状态将从待删除更改为已禁用。要使用 KMS 密钥,您必须将其启用

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

以下示例演示了如何使用 AWS SDK for Java 安排删除客户托管的密钥。此示例要求您在此之前将 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);

KMS 密钥的状态将从待删除更改为已禁用。要使用 KMS 密钥,您必须将其启用

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

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

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

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

  1. 登录到 AWS Management Console,然后通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.aws.amazon.com/kms

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

  3. 在导航窗格中,选择客户托管密钥

  4. 选择要更改其权限的 KMS 密钥的别名或密钥 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 (保存更改)

添加计划和取消密钥删除所需的权限 (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 命令将密钥策略应用于 KMS 密钥。