导入 AWS KMS 密钥中的密钥材料 - AWS Key Management Service

导入 AWS KMS 密钥中的密钥材料

您可以使用您提供的密钥材料创建 AWS KMS keys(KMS 密钥)。

KMS 密钥是加密密钥的逻辑表示形式。KMS 密钥的元数据包括数据加密和解密所用密钥材料的 ID。默认情况下,当您创建 KMS 密钥时,AWS KMS 会为该 KMS 密钥生成密钥材料。但是,您可以创建不带密钥材料的 KMS 密钥,然后将自己的密钥材料导入该 KMS 密钥中,这个功能通常被称为“自带密钥 (BYOK)”。

注意

AWS KMS 不支持在 AWS KMS 以外解密任何 AWS KMS 密文,即使密文是使用带有导入密钥材料的 KMS 密钥加密的。AWS KMS 不会发布此任务所需的密文格式,格式可能会在不通知的情况下更改。

只有 AWS KMS 密钥存储中的对称加密 KMS 密钥才支持导入的密钥材料,例如多区域对称加密 KMS 密钥。它在非对称 KMS 密钥HMAC KMS 密钥或自定义密钥存储中的 KMS 密钥中不受支持。

在使用导入的密钥材料时,您仍然需要对密钥材料负责,并允许 AWS KMS 使用其副本。出于以下一个或多个原因,您可以选择执行该操作:

  • 证明您使用符合您要求的熵源生成了密钥材料。

  • 将来自您自己的基础设施的密钥材料与 AWS 服务配合使用,并使用 AWS KMS 管理该密钥材料在 AWS 内的生命周期。

  • 在 AWS 中为密钥材料设置过期时间,并手动删除它,但也可以使其在未来再次可用。相比之下,计划密钥删除需要 7 到 30 天的等待期限,之后,您不能恢复已删除的 KMS 密钥。

  • 拥有密钥材料的原始备份,并将其保存在 AWS 外部,以在密钥材料的整个生命周期内获得额外的持久性和灾难恢复能力。

只有 AWS KMS 密钥存储中的对称加密 KMS 密钥才支持导入的密钥材料,例如多区域对称 KMS 密钥。它在非对称 KMS 密钥HMAC KMS 密钥或自定义密钥存储中的 KMS 密钥中不受支持。

您可以监控 KMS 密钥及导入的密钥材料的使用和管理。当您创建创建 KMS 密钥下载公共密钥和导入令牌以及导入密钥材料时,AWS KMS 将在 AWS CloudTrail 日志中记录一个条目。此外,当您手动删除导入的密钥材料或者在AWS KMS删除已过期的密钥材料时,AWS KMS 也会记录一个条目。

如需了解带有导入密钥材料的 KMS 密钥与带有 AWS KMS 生成的密钥材料的 KMS 密钥之间的重要区别,请参阅 关于导入的密钥材料

区域

AWS 区域 支持的所有 AWS KMS 中都支持导入的密钥材料。中国区域对导入密钥材料的要求有所不同。有关详细信息,请参阅 导入密钥材料步骤 3:加密密钥材料

关于导入的密钥材料

在决定将密钥材料导入 AWS KMS 之前,您应了解导入密钥材料的以下特征。

您可以生成密钥材料

您负责使用符合您的安全要求的随机源来生成密钥材料。您导入的密钥材料必须是 256 位对称加密密钥,但中国区域除外,在中国区域必须是 128 位对称加密密钥。

您可以删除密钥材料

您可以从 KMS 密钥中删除导入的密钥材料,以便立即使 KMS 密钥不可用。此外,当您将密钥材料导入 KMS 密钥中时,您可以确定密钥是否到期,并设置其到期日期。如果到期日期已到,则 AWS KMS 将会删除密钥材料。如果没有密钥材料,则该 KMS 密钥无法用于任何加密操作。要还原密钥,必须将相同密钥材料重新导入到密钥中。

无法更改密钥材料

当您将密钥材料导入 KMS 密钥中时,该 KMS 密钥将与该密钥材料永久关联。您可以重新导入相同的密钥材料,但不能将不同的密钥材料导入该 KMS 密钥。而且,您不能为具有导入密钥材料的 KMS 密钥启用自动密钥轮换。但是,您可以手动轮换带有导入密钥材料的 KMS 密钥。

无法更改密钥材料源

专用于导入的密钥材料的 KMS 密钥拥有一个 EXTERNAL值,该值无法更改。您不能将 KMS 密钥中的导入的密钥材料转换为使用来自任何其他源(包括 AWS KMS)的密钥材料。

无法使用任何其他 KMS 密钥进行解密

如果您使用 KMS 密钥加密数据,则密文将与该 KMS 密钥及其密钥材料永久关联。它无法使用其他任何 KMS 密钥解密,包括采用相同密钥材料的其他 KMS 密钥。这是 KMS 密钥的一项安全功能。

唯一的例外是多区域密钥,按设计,它们可以互操作。有关详细信息,请参阅为什么不是所有带有导入密钥材料的 KMS 密钥都可互操作?

无可移植性或托管功能

AWS KMS 生成的密文不可移植。AWS KMS 不支持在 AWS KMS 以外解密任何 AWS KMS 密文,即使密文是使用带有导入密钥材料的 KMS 密钥加密的。AWS KMS 不会发布此任务所需的密文格式,格式可能会在不通知的情况下更改。

此外,您不能使用任何 AWS 工具(例如 AWS Encryption SDK 或者 Amazon S3 客户端加密)来解密 AWS KMS 密文。

因此,您无法使用带有导入密钥材料的密钥来支持密钥托管安排,在这种情况下,对密钥材料具有条件访问权限的授权第三方可以在 AWS KMS 以外解密某些密文。要支持密钥托管,请使用 AWS Encryption SDK 来通过独立于 AWS KMS 的密钥加密您的消息。

您需要对可用性和持久性负责

您需要对密钥材料的整体可用性和持久性负责。AWS KMS 旨在确保导入密钥材料的高可用性。但 AWS KMS 不会将导入密钥材料的持久性维持在与代表 AWS KMS 生成的密钥材料相同的水平。要还原从 KMS 密钥中删除的导入密钥材料,您必须在您控制的系统中保留密钥材料的副本。随后,您可以将其重新导入 KMS 密钥。

在以下情况下,这种差异是有意义的:

  • 如果您为导入的密钥材料设置了过期时间,那么 AWS KMS 将在密钥材料过期后将其删除。AWS KMS 不会删除该 KMS 密钥或其元数据。您可以创建 Amazon CloudWatch 警报,在导入的密钥材料即将到期时通知您。

    您无法删除 AWS KMS 为 KMS 密钥生成的密钥材料,并且不能将 AWS KMS 密钥材料设置为过期,尽管您可以轮换它

  • 如果您手动删除导入的密钥材料,AWS KMS 将删除密钥材料,但不会删除该 KMS 密钥或其元数据。相比之下,计划密钥删除需要 7 到 30 天的等待期限,之后,AWS KMS 将永久删除密钥材料、其元数据及其密钥材料。

  • 万一出现某些影响 AWS KMS 的区域级故障(如完全断电),AWS KMS 无法自动还原导入的密钥材料。但是,AWS KMS 可还原 KMS 密钥及其元数据。

导入密钥材料的权限

要使用导入的密钥材料创建和管理 KMS 密钥,用户需要在此过程中执行操作的权限。在您创建 KMS 密钥时,您可以在密钥策略中提供 kms:GetParametersForImportkms:ImportKeyMaterialkms:DeleteImportedKeyMaterial 权限。在 AWS KMS 控制台中,当您使用外部密钥材料来源创建密钥时,会自动为密钥管理员添加这些权限。

若要使用导入的密钥材料创建 KMS 密钥,委托人需要以下权限。

  • kms:CreateKey(IAM policy)

    • 要将此权限限制为具有导入密钥材料的 KMS 密钥,请使用值为 EXTERNALkms:KeyOrigin 策略条件。

      { "Sid": "CreateKMSKeysWithoutKeyMaterial", "Effect": "Allow", "Resource": "*", "Action": "kms:CreateKey", "Condition": { "StringEquals": { "kms:KeyOrigin": "EXTERNAL" } } }
  • kms:GetParametersForImport(密钥策略或 IAM policy)

  • kms:ImportKeyMaterial(密钥策略或 IAM policy)

要重新导入导入的密钥材质,委托人需要 kms:GetParametersForImportkms:ImportKeyMaterial 权限。

要删除导入的关键材料,委托人需要 kms:DeleteImportedKeyMaterial 权限。

例如,要授予示例使用导入的密钥材料管理 KMS 密钥所有方面的 KMSAdminRole 权限,请在 KMS 密钥的密钥策略中加入如下所示的密钥策略声明。

{ "Sid": "Manage KMS keys with imported key material", "Effect": "Allow", "Resource": "*", "Principal": { "AWS": "arn:aws:iam::111122223333:role/KMSAdminRole" }, "Action": [ "kms:GetParametersForImport", "kms:ImportKeyMaterial", "kms:DeleteImportedKeyMaterial" ] }

如何导入密钥材料

以下概述说明了如何将密钥材料导入 AWS KMS。如需了解该过程中每个步骤的更多详细信息,请参阅相应主题。

  1. 创建不带密钥材料的对称加密 KMS 密钥 – 密钥规范必须是 SYMMETRIC_DEFAULT 而且来源必须是 EXTERNALEXTERNAL 的密钥源表明该密钥专为导入的密钥材料而设计,并且阻止 AWS KMS 为 KMS 密钥生成密钥材料。在后面的步骤中,您会将自己的密钥材料导入此 KMS 密钥中。

  2. 下载公有密钥和导入令牌 – 在完成步骤 1 后,请下载公有密钥和导入令牌。这些项目可以在密钥材料导入 AWS KMS 的过程中保护您的密钥材料。

  3. 加密密钥材料 – 使用在步骤 2 中下载的公有密钥加密您在自己的系统上创建的密钥材料。

  4. 导入密钥材料 – 上传您在步骤 3 中创建的已加密的密钥材料以及您在步骤 2 中下载的导入令牌。

    导入操作成功完成后,KMS 密钥的密钥状态将从 PendingImport 变为 Enabled。现在,您可以在加密操作中使用 KMS 密钥。

AWS KMS 在您创建 KMS 密钥下载公有密钥和导入令牌导入密钥材料时将一个条目记录在您的 AWS CloudTrail 日志。当您删除导入的密钥材料或 AWS KMS 删除过期的密钥材料时,AWS KMS 也会记录条目。

如何重新导入密钥材料

如果您管理带有导入的密钥材料的 KMS 密钥,则可能需要重新导入密钥材料。您可以重新导入密钥材料来替换已过期或已删除的密钥材料。您也可以重新导入密钥材料以更改密钥材料的到期模型或到期日期。

您必须重新导入最初导入 KMS 密钥的相同的密钥材料。您不能将不同的密钥材料导入 KMS 密钥。AWS KMS 也无法为创建时未带密钥材料的 KMS 密钥创建密钥材料。

要重新导入密钥材料,请使用您首次用来导入密钥材料的相同过程,但以下情况除外。

  • 使用现有 KMS 密钥,而不是创建新的 KMS 密钥。您可以跳过导入过程的步骤 1

  • 如果 KMS 密钥有导入的密钥材料,您必须首先删除现有已导入的密钥材料,然后才能重新导入密钥材料。

  • 重新导入密钥材料时,您可以更改到期模型和到期日期。

每次将密钥材料导入 KMS 密钥时,您需要为 KMS 密钥下载并使用新的包装密钥和导入令牌。包装过程不会影响密钥材料的内容,因此,您可以使用不同的包装密钥(和不同的导入令牌)来导入相同的密钥材料。

如何标识带导入的密钥材料的 KMS 密钥

在创建不带密钥材料的 KMS 密钥时,KMS 密钥的 Origin 属性的值为 EXTERNAL,并且它不能更改。与密钥状态不同,Origin 值不依赖于是否存在密钥材料。

您可以使用 EXTERNAL 源值来标识专为导入的密钥材料而设计的 KMS 密钥。您可以在 AWS KMS 控制台中或通过使用 DescribeKey 操作来查找密钥源。您还可以使用控制台或 API 查看密钥材料的属性,例如它是否以及何时过期。

要标识带导入的密钥材料的 KMS 密钥(控制台)

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

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

  3. 使用以下任一方法可查看 KMS 密钥的 Origin 属性。

    • 要向 KMS 密钥表添加 Origin(源)列,请在右上角选择 Settings(设置)图标。选择 Origin (源),然后选择 Confirm (确认)Origin(源)列可让您轻松标识带 EXTERNAL 源属性值的 KMS 密钥。

    • 要查找特定 KMS 密钥的 Origin 属性的值,请选择该 KMS 密钥的密钥 ID 或别名。然后,选择 Cryptographic configuration(加密配置)选项卡。这些选项卡在 General configuration(常规配置)部分下。

  4. 要查看有关密钥材料的详细信息,请选择 Key material(密钥材料)选项卡。此选项卡仅显示在具有导入密钥材料的 KMS 密钥的详细信息页面上。

要标识带导入的密钥材料的 KMS 密钥 (AWS KMS API)

使用 DescribeKey 操作。此响应包含 KMS 密钥的 Origin 属性、过期模型和过期日期,如以下示例所示。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyMetadata": { "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Origin": "EXTERNAL", "ExpirationModel": "KEY_MATERIAL_EXPIRES" "ValidTo": 1568894400.0, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333", "CreationDate": 1568289600.0, "Enabled": false, "MultiRegion": false, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "PendingImport", "KeyManager": "CUSTOMER", "KeySpec": "SYMMETRIC_DEFAULT", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

针对导入密钥材料的到期创建 CloudWatch 警报

您可以创建 CloudWatch 警报,在 KMS 密钥中导入的密钥材料即将到期时通知您。例如,警报可以在距离到期时间少于 30 天时通知您。

当您将密钥材料导入 KMS 密钥中时,可以选择性地指定密钥材料的到期时间。当密钥材料过期后,AWS KMS 将删除密钥材料,并且 KMS 密钥将变为不可用。要再次使用该 KMS 密钥,您必须重新导入密钥材料。但是,如果您在密钥材料到期之前将其重新导入,则可以避免中断使用该 KMS 密钥的进程。

此警报使用 AWS KMS 发布到 CloudWatch 的 SecondsUntilKeyMaterialExpires 指标,其中包含已到期的导入密钥材料的 KMS 密钥。每个警报都使用此指标来监控特定 KMS 密钥的导入密钥材料。您无法为所有具有到期密钥材料的 KMS 密钥创建单个警报,也无法为未来可能创建的 KMS 密钥创建警报。

要求

用于监控已导入密钥材料的到期时间的 CloudWatch 警报需要以下资源。

创建警报

使用以下必填值,按照基于静态阈值创建 CloudWatch 警报中的说明进行操作。对于其他字段,请接受默认值并按要求提供名称。

字段
选择指标

选择 KMS,然后选择每密钥指标

选择带有 KMS 密钥和 SecondsUntilKeyMaterialExpires 指标的行。然后选择 Select metric(选择指标)

指标列表仅显示导入密钥材料已到期的 KMS 密钥的 SecondsUntilKeyMaterialExpires 指标。如果您在账户和区域中没有带这些属性的 KMS 密钥,则此列表为空。

统计数据 最低
周期 1 minute
阈值类型 静态
当 ... metric-name 大于 1

删除导入的密钥材料

您可以随时从 KMS 密钥中删除导入的密钥材料。此外,当具有到期日期的导入密钥到期时,AWS KMS 将会删除密钥材料。在这两种情况下,AWS KMS 将会立即删除密钥材料,KMS 密钥的密钥状态将更改为待导入,且 KMS 密钥不能用于任何加密操作。

但是,这些操作不会删除 KMS 密钥。要再次使用 KMS 密钥,您必须将相同的密钥材料重新导入到 KMS 密钥中。相反,删除 KMS 密钥操作是不可逆的。如果您计划删除密钥而且所需等待期到期,AWS KMS 会删除密钥材料及与该 KMS 密钥关联的所有元数据。

要删除密钥材料,您可以使用 AWS Management Console或 AWS KMS API。您也可以通过发出 HTTP 请求,或使用 AWS 开发工具包AWS Command Line Interface (AWS CLI) 或 AWS Tools for PowerShell 直接使用 API。

AWS KMS 在您删除导入的密钥材料且 AWS KMS 删除过期的密钥材料时将一个条目记录在您的 AWS CloudTrail 日志中。

删除密钥材料对与 AWS KMS 集成的 AWS 服务有何影响

在您删除密钥材料后,KMS 密钥会立即变得不可用。但是 AWS 服务正使用的任何数据密钥不会立即受到影响。这意味着,删除密钥材料可能不会立即影响受 KMS 密钥保护的所有数据和 AWS 资源,但最终会对其产生影响。

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

例如,考虑以下情景:

  1. 您创建加密的 EBS 卷并指定带有已导入密钥材料的 KMS 密钥。Amazon EBS 要求 AWS KMS 使用您的 KMS 密钥来为该卷生成加密数据密钥。Amazon EBS 使用该卷存储加密数据密钥。

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

  3. 您删除从 KMS 密钥中导入的密钥材料,这会使其变得不可用。这不会立即影响 EC2 实例或 EBS 卷。原因是,Amazon EC2 使用纯文本数据密钥——而不是 KMS 密钥——来对所有磁盘输入/输出进行加密,而卷则附加到实例。

  4. 但是,当加密的 EBS 卷从 EC2 实例分离时,Amazon EBS 将从内存中删除该明文密钥。下次将加密的 EBS 卷附加到 EC2 实例时,附加会失败,因为 Amazon EBS 无法使用 KMS 密钥来解密卷的加密数据密钥。要再次使用该 EBS 卷,您必须向 KMS 密钥重新导入相同的密钥材料。

删除密钥材料(控制台)

您可以使用 AWS Management Console删除密钥材料。

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

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

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

  4. 请执行下列操作之一:

    • 选中带导入密钥材料的 KMS 密钥对应的复选框。依次选择 Key actionsDelete key material

    • 选择带导入密钥材料的 KMS 密钥的别名或密钥 ID。选择 Key material(密钥材料)选项卡,然后选择 Delete key material(删除密钥材料)。

  5. 确认要删除该密钥材料,然后选择 Delete key material。KMS 密钥的状态(对应于其密钥状态)更改为 Pending import(等待导入)。

删除密钥材料 (AWS KMS API)

要使用 AWS KMS API 删除密钥材料,请发送 DeleteImportedKeyMaterial 请求。以下示例说明如何使用 AWS CLI 执行该操作。

1234abcd-12ab-34cd-56ef-1234567890ab 替换为您要删除其密钥材料的 KMS 密钥的密钥 ID。在该操作中,您可以使用 KMS 密钥的密钥 ID 或 ARN,但不能使用别名。

$ aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab