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

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

客户主密钥 (CMK) 是主密钥在 AWS KMS 中的逻辑表示。除了主密钥的标识符和其他元数据 (包括其创建日期、描述和密钥状态) 以外,CMK 还包含用于加密和解密数据的密钥材料。默认情况下,当您创建 CMK 时,AWS KMS 会为该 CMK 生成密钥材料。但是,您可以创建不带密钥材料的 CMK,然后将自己的密钥材料导入 CMK 中。

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

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

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

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

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

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

您导入的密钥材料必须是 256 位对称加密密钥。

关于导入的密钥材料

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

保护密钥生成

您负责使用符合您的安全要求的随机源来生成密钥材料。

每个 CMK 一个密钥

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

每个密文一个 CMK

如果您使用 KMS CMK 加密数据,则密文无法使用其他任何 CMK 解密。即使您将相同的密钥材料导入其他 CMK 中,也是如此。

可用性与持久性

您需要对密钥材料的整体可用性和持久性负责。AWS KMS 旨在确保导入密钥材料的高可用性。但该服务不会将导入密钥材料的持久性维持在与代表您生成的密钥材料相同的水平。在以下情况下,这种差异是有意义的:

  • 如果您为导入的密钥材料设置了过期时间,那么 AWS KMS 将在密钥材料过期后将其删除。AWS KMS 不会删除该 CMK 或其元数据。您不能为由 AWS KMS 生成的密钥材料设置过期时间。

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

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

要在发生与这些事件类似的事件后还原密钥材料,您必须在您控制的系统中保留密钥材料的副本。随后,您可以将其重新导入 CMK。

如何导入密钥材料

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

  1. 创建不带密钥材料的 CMK – 要开始导入密钥材料,首先请创建 originEXTERNAL 的 CMK。这表明密钥材料在 AWS KMS 外部生成,并阻止 AWS KMS 为 CMK 生成密钥材料。在后面的步骤中,您会将自己的密钥材料导入此 CMK 中。

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

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

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

如何重新导入密钥材料

如果您管理带导入的密钥材料的 CMK,则可能需要重新导入密钥材料,原因是密钥材料已过期,或者密钥材料已被意外删除或丢失。

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

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

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

  • 如果 CMK 包含密钥材料,则必须先删除现有密钥材料,然后再重新导入密钥材料。

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

如何识别带导入的密钥材料的 CMK

在创建不带密钥材料的 CMK 时,CMK 的 Origin 属性的值为 EXTERNAL,并且它不能更改。无法将专为使用导入的密钥材料而设计的密钥转换为使用 AWS KMS 提供的密钥材料的密钥。

您可以在 AWS KMS 控制台中或使用 AWS KMS API 识别需要导入的密钥材料的 CMK。

确定 CMK 的 Origin 属性的值(控制台)

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

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

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

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

    • 要查找特定 CMK 的 Origin 属性的值,请选择该 CMK 的密钥 ID 或别名。Origin 属性值显示在 General configuration (常规配置) 部分中。

确定 CMK 的 Origin 属性的值(KMS API)

使用 DescribeKey 操作。响应包含 CMK 的 Origin 属性,如以下示例所示。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Origin": "EXTERNAL", "KeyManager": "CUSTOMER", "ValidTo": 1549224000.0, "Enabled": true, "AWSAccountId": "111122223333", "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1517867689.949, "KeyUsage": "ENCRYPT_DECRYPT", "Description": "example-key", "KeyState": "Enabled", "ExpirationModel": "KEY_MATERIAL_EXPIRES" }