导入密钥材料步骤 2:下载公有密钥和导入令牌 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

导入密钥材料步骤 2:下载公有密钥和导入令牌

创建不带密钥材料的对称加密 Amazon KMS key 后,下载该 KMS 密钥的公有密钥和导入令牌。您可使用Amazon KMS控制台或 GetParametersForImportAPI 通过一个步骤下载这两个项目。公有密钥和导入令牌的有效期为 24 小时。如果您不在 24 小时的下载期限内使用它们导入密钥材料,则必须下载新的公有密钥和令牌。

当您希望将相同的密钥材料重新导入 KMS 密钥中时,您也需要下载这些项目。您可以这样做来开启或关闭过期时间、设置新的过期时间或恢复过期或已删除的密钥材料。您的每个导入操作都必须下载新的公有密钥和导入令牌。您可以对 KMS 密钥的每次导入操作使用不同的封装算法。

使用公有密钥

下载包括一个公有密钥,也称为包装密钥

在导入密钥材料之前,使用公有密钥对密钥材料进行加密,然后将加密的密钥材料上传到 Amazon KMS。当 Amazon KMS 收到您的加密的密钥材料时,它会使用相应的私有密钥对其进行解密。Amazon KMS 提供的公有密钥是 2048 位 RSA 公有密钥,是您 Amazon Web Services 账户 的唯一公有密钥。

使用导入令牌

下载包括一个带有元数据的导入令牌,以确保您的密钥材料导入正确。当您将加密的密钥材料上传至 Amazon KMS 时,您必须上传在此步骤中下载的同一导入令牌。

选择包装算法

要在导入过程中保护您的密钥材料,请使用下载的公有密钥和支持的包装算法为其加密。您的每个导入操作都必须下载新的公有密钥和导入令牌。您可以在 KMS 密钥的每次导入操作中使用相同或不同的封装算法。

您必须使用 RSA PKCS # 1 加密以及三种填充选项之一 (如下所示)。这些选项按 Amazon 首选项的顺序排列。通常,选择硬件安全模块 (HSM) 支持的算法或用于保护密钥材料的密钥管理系统。有关这些算法的技术详细信息,请参阅 PKCS #1 版本 2.1 标准的第 7 节。如果您的 HSM 或密钥管理系统支持,我们建议使用 RSAES_OAEP_SHA_256 来为您的密钥材料加密。如果该选项不可用,请使用 RSAES_OAEP_SHA_1。有关如何为您的密钥材料加密的信息,请参阅关于硬件安全模块或用于保护密钥材料的密钥管理系统的文档。

重要

RSAES_PKCS1_V1_5封装算法已过时。 Amazon KMS根据美国国家标准与技术研究院 (NIST) 的加密密钥管理指南,将在 2023 年 10 月 1 日之前终止所有支持。RSAES_PKCS1_V1_5我们建议您立即开始使用不同的包装算法。

注意

要运行步骤 3 中的 “使用 OpenSSL 加密密钥材料” proof-of-concept 示例,请使用RSAES_OAEP_SHA_1

  • RSAES_OAEP_SHA_256 – RSA 加密算法,使用最优非对称加密填充 (OAEP) 与 SHA-256 哈希函数。

  • RSAES_OAEP_SHA_1 – RSA 加密算法,使用最优非对称加密填充 (OAEP) 与 SHA-1 哈希函数。

  • [已弃用]RSAES_PKCS1_V1_5 — RSA 加密算法,使用在 PKCS #1 版本 1.5 中定义的填充格式。

下载公有密钥和导入令牌(控制台)

您可以使用 Amazon KMS 控制台下载公有密钥和导入令牌。

  1. 如果您刚刚完成创建不带密钥材料的 KMS 密钥的步骤并且您位于 Download wrapping key and import token(下载包装密钥和导入令牌)页面上,请跳至 步骤 8

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

  3. 要更改 Amazon Web Services 区域,请使用页面右上角的区域选择器。

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

    提示

    只能将密钥材料导入 Origin(源)为 EXTERNAL 的对称加密 KMS 密钥中。这指示已创建不带密钥材料的 KMS 密钥。要向表中添加 Origin (源) 列,请在页面右上角,选择设置图标 ( )。打开 Origin (源),然后选择 Confirm (确认)

  5. 选择待导入的 KMS 密钥的别名或密钥 ID。

  6. 选择 Cryptographic configuration(加密配置)选项卡并查看其值。这些选项卡在 General configuration(常规配置)部分下。

    只能将密钥材料导入 Key type(密钥类型)为 Symmetric(对称)且 Origin(源)为 EXTERNAL 的 KMS 密钥中。有关创建带已导入密钥材料的 KMS 密钥的信息,请参阅 导入 Amazon KMS 密钥中的密钥材料

  7. 选择 Key material(密钥材料)选项卡,然后选择 Download wrapping key and import token(下载包装密钥和导入令牌)。

    Key material(密钥材料)选项卡仅针对 Origin(源)值为 EXTERNAL 的对称加密 KMS 密钥显示。

  8. 对于选择包装算法,请选择您将用于为密钥材料加密的选项。有关这些选项的详细信息,请参阅选择包装算法

    如果你打算尝试步骤 3 中的使用 OpenSSL 加密密钥材料 proof-of-concept 示例,请选择 RSAES_OAEP_SHA_1。

    重要

    RSAES_PKCS1_V1_5封装算法已过时。 Amazon KMS根据美国国家标准与技术研究院 (NIST) 的加密密钥管理指南,将在 2023 年 10 月 1 日之前终止所有支持。RSAES_PKCS1_V1_5我们建议您立即开始使用不同的包装算法。

  9. 选择下载包装密钥和导入令牌,然后保存文件。

    如果有 Next (下一步) 选项,而且要立即继续执行此过程,请选择 Next (下一步)。要稍后再继续,请选择 Cancel (取消)。否则,要关闭窗口,请选择 Cancel (取消) 或单击 X

  10. 解压缩 .zip 文件,即您在上一步 (ImportParameters.zip) 中保存的文件。

    此文件夹包含以下文件:

    • 2048 位 RSA 公有密钥位于名为 wrappingKey_KMS key_key_ID_timestamp(例如 wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909)的文件中。

    • 导入令牌,位于名为 importToken_KMS key_key_ID_timestamp(例如 importToken_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909)的文件中。

    • 名为 README_KMS key_key_ID_timestamp.txt(例如 README_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909.txt)的文本文件。此文件包含以下相关信息:公有密钥、用于为密钥材料加密的包装算法,以及包装密钥 (公有密钥) 和导入令牌的过期日期和时间。

  11. 要继续执行此过程,请参阅为您的密钥材料加密

下载公有密钥和导入令牌 (Amazon KMS API)

要下载公有密钥和导入令牌,请使用 GetParametersForImportAPI。指定将与导入的密钥材料关联的 KMS 密钥。此 KMS 密钥的 Origin 值必须为 EXTERNAL

以下示例指定的包装算法值为RSAES_OAEP_SHA_1。将 1234abcd-12ab-34cd-56ef-1234567890ab 替换为为其下载公有密钥和导入令牌的 KMS 密钥的密钥 ID。在该操作中,您可以使用密钥 ID密钥 ARN,但不能使用别名别名 ARN

重要

RSAES_PKCS1_V1_5封装算法已过时。 Amazon KMS根据美国国家标准与技术研究院 (NIST) 的加密密钥管理指南,将在 2023 年 10 月 1 日之前终止所有支持。RSAES_PKCS1_V1_5我们建议您立即开始使用不同的包装算法。

注意

要使用步骤 3 中的使用 OpenSSL 加密密钥材料 proof-of-concept 示例,请指定 RSAES_OAEP_SHA_1。

$ aws kms get-parameters-for-import \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --wrapping-algorithm RSAES_OAEP_SHA_1 \ --wrapping-key-spec RSA_2048

该命令成功执行后,您会看到类似以下内容的输出:

{ "ParametersValidTo": 1568290320.0, "PublicKey": "public key (base64 encoded)", "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "ImportToken": "import token (base64 encoded)" }

为了准备下一步的数据,base64 会对公有密钥和导入令牌进行解码,并将解码后的值保存在文件中。

要对公有密钥进行 base64 解码并导入令牌:

  1. 复制 base64 编码公有密钥 (由示例输出中公有密钥 (base64 编码) 表示),将其粘贴到新文件中,然后保存文件。向文件提供一个描述性名称,例如 PublicKey.b64

  2. 使用 OpenSSL 对文件的内容进行 base64 解码,然后将解码后的数据保存到一个新文件中。以下示例会对您在上一步骤 (PublicKey.b64) 中保存的文件中的数据进行解码,并将输出保存到一个名为 PublicKey.bin 的新文件中。

    $ openssl enc -d -base64 -A -in PublicKey.b64 -out PublicKey.bin
  3. 复制 base64 编码导入令牌 (由示例输出中导入令牌 (base64 编码)表示),将其粘贴到新文件中,然后保存文件。为文件指定一个描述性名称,例如 ImportToken.b64

  4. 使用 OpenSSL 对文件的内容进行 base64 解码,然后将解码后的数据保存到一个新文件中。以下示例会对您在上一步骤 (ImportToken.b64) 中保存的文件中的数据进行解码,并将输出保存到一个名为 ImportToken.bin 的新文件中。

    $ openssl enc -d -base64 -A -in ImportToken.b64 -out ImportToken.bin

继续执行步骤 3:加密密钥材料