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

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

创建不带密钥材料的客户主密钥 (CMK) 后,下载该 CMK 的公有密钥和导入令牌。您需要这些项目才能导入密钥材料。您可使用 AWS 管理控制台或 AWS KMS API 通过一个步骤下载这两个项目。

当您希望将密钥材料重新导入 CMK 中时,您也需要下载这些项目。您可以执行该操作来手动轮换密钥材料、更改密钥材料的过期时间或在密钥材料过期或被删除后还原 CMK。

使用公有密钥

导入密钥材料时,不要将原始密钥材料上传至 AWS KMS。您必须先使用在此步骤中下载的公有密钥对密钥材料进行加密,然后将已加密的密钥材料上传至 AWS KMS。当 AWS KMS 收到您的加密的密钥材料时,它会使用相应的私有密钥对其进行解密。您从 AWS KMS 收到的公有密钥是一个 2048 位的 RSA 公有密钥,并且它对您的 AWS 账户来说始终是唯一的。

使用导入令牌

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

选择包装算法

要在导入过程中保护您的密钥材料,请使用包装密钥和包装算法为其加密。通常,选择硬件安全模块 (HSM) 支持的算法或用于保护密钥材料的密钥管理系统。您必须使用 RSA PKCS # 1 加密方案以及三种填充选项之一 (如下所示)。这些选项按 AWS 首选项的顺序排列。由这些选项表示的方案的技术详细信息位于 PKCS # 1 版本 2.1 标准的第 7 部分中。

  • 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 中定义的填充格式。

注意

如果您计划尝试使用 OpenSSL 为密钥材料加密概念验证示例 (在步骤 3 中),请使用 RSAES_OAEP_SHA_1。

如果您的 HSM 或密钥管理系统支持,我们建议使用 RSAES_OAEP_SHA_256 来为您的密钥材料加密。如果该选项不可用,则应使用 RSAES_OAEP_SHA_1。如果两个 OAEP 选项均不可用,则必须使用 RSAES_PKCS1_V1_5。有关如何为您的密钥材料加密的信息,请参阅关于硬件安全模块或用于保护密钥材料的密钥管理系统的文档。

公有密钥和导入令牌的有效期为 24 小时。如果您不在 24 小时的下载期限内使用它们导入密钥材料,则必须下载新的公有密钥和令牌。

要下载公有密钥和导入令牌,您可以使用 AWS 管理控制台或 AWS KMS API。通过发出 HTTP 请求或通过 AWS 开发工具包命令行工具之一,您可以直接使用该 API。

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

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

注意

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

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

下载公有密钥和导入令牌(新控制台)
  1. 如果您刚刚完成创建不带密钥材料的 CMK 的步骤并且您位于下载包装密钥和导入令牌页面上,请跳至步骤 7

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

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

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

    提示

    仅当 Origin (源)EXTERNAL (外部) 时,才能将密钥材料导入 CMK。这指示已创建不带密钥材料的 CMK。要向表添加 Origin (源) 列,请在页面右上角,选择设置图标 ( )。打开 Origin (源),然后选择 Confirm (确认)

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

  6. Key material (密钥材料) 下,选择 Download wrapping key and import token (下载包装密钥和导入令牌)

    仅在创建了不带密钥材料的 CMK 后,Key material (密钥材料) 部分才会显示。这些 CMK 的 Origin (源) 值为 EXTERNAL (外部)。您无法将密钥材料导入具有任何其他 Origin (源) 值的 CMK。有关创建带已导入密钥材料的 CMK 的信息,请参阅导入 AWS Key Management Service (AWS KMS) 中的密钥材料

  7. 对于选择包装算法,请选择您将用于为密钥材料加密的选项。有关选项的更多信息,请参阅上一部分中的选择包装算法

    如果您计划尝试使用 OpenSSL 为密钥材料加密概念验证示例 (在步骤 3 中),请选择 RSAES_OAEP_SHA_1。

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

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

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

    此文件夹包含以下文件:

    • 包装密钥 (公有密钥),位于名为 wrappingKey_CMK_key_ID_timestamp (例如 wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909) 的文件中。这是一个 2048 位的 RSA 公有密钥。

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

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

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

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

您可以使用 AWS 管理控制台下载公有密钥和导入令牌。如果您刚刚完成创建不带密钥材料的 CMK 步骤,请跳到步骤 6

  1. 如果您刚刚完成创建不带密钥材料的 CMK 步骤,请跳到步骤 6

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

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

  4. 选择要为其下载公有密钥和导入令牌的 CMK 的别名。

    提示

    仅当 Origin (源)EXTERNAL (外部) 时,才能将密钥材料导入 CMK。这指示已创建不带密钥材料的 CMK。要向表添加 Origin (源) 列,请在页面右上角,选择设置图标 ( )。

  5. 在页面的密钥材料部分中,选择下载包装密钥和导入令牌

    仅在创建了不带密钥材料的 CMK 后,Key material (密钥材料) 部分才会显示。这些 CMK 的 Origin (源) 值为 EXTERNAL (外部)。您无法将密钥材料导入具有任何其他 Origin (源) 值的 CMK。有关创建带已导入密钥材料的 CMK 的信息,请参阅导入 AWS Key Management Service (AWS KMS) 中的密钥材料

  6. 对于选择包装算法,请选择您将用于为密钥材料加密的选项。有关各选项的更多信息,请参阅上一部分。

    如果您计划尝试使用 OpenSSL 为密钥材料加密概念验证示例 (在步骤 3 中),请选择 RSAES_OAEP_SHA_1。

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

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

    此文件夹包含以下文件:

    • 包装密钥 (公有密钥),位于名为 wrappingKey_CMK_key_ID_timestamp (例如 wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909) 的文件中。这是一个 2048 位的 RSA 公有密钥。

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

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

    要立即继续执行此过程,请转至下一步。否则,请选择跳过并稍后执行该操作,然后执行步骤 3:加密密钥材料

  9. (可选) 要立即继续执行此过程,请为您的密钥材料加密。然后执行以下操作之一:

    • 如果您位于导入密钥材料向导中,请选中我已准备好上传自己的已导出的密钥材料复选框,然后选择下一步

    • 如果您位于密钥详细信息页面上,请选择上传密钥材料

完成此步骤后,请执行步骤 3:加密密钥材料

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

要使用 AWS KMS API 来下载公有密钥和导入令牌,请发送 GetParametersForImport 请求以指定要为其下载这些项目的 CMK。以下示例说明如何使用 AWS CLI 执行该操作。

此示例将 RSAES_OAEP_SHA_1 指定为加密选项。要指定另一个选项,请将 RSAES_OAEP_SHA_1 替换为 RSAES_OAEP_SHA_256RSAES_PKCS1_V1_5。将 1234abcd-12ab-34cd-56ef-1234567890ab 替换为为其下载公有密钥和导入令牌的 CMK 的密钥 ID。在该操作中,您可以使用 CMK 的密钥 ID 或 Amazon 资源名称 (ARN),但不能使用别名。

注意

如果您计划尝试使用 OpenSSL 为密钥材料加密概念验证示例 (在步骤 3 中),请指定 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": 1470933314.949, "PublicKey": "public key base64 encoded data", "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "ImportToken": "import token base64 encoded data" }

收到此输出后,将 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:加密密钥材料