导入密钥材料步骤 2:下载公有密钥和导入令牌 - AWS Key Management Service

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

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

当您希望将相同的密钥材料重新导入 KMS 密钥中时,您也需要下载这些项目。您可以执行此操作来更改密钥材料的过期时间,或者恢复过期或删除的密钥材料。

使用公有密钥

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

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

使用导入令牌

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

选择包装算法

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

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

注意

要运行使用 OpenSSL 为密钥材料加密概念验证示例 (在步骤 3 中),请使用 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 中定义的填充格式。

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

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

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

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

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

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

    提示

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

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

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

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

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

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

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

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

  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. 要继续执行此过程,请参阅为您的密钥材料加密

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

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

此示例指定的包装算法值为 RSAES_OAEP_SHA_1。要指定另一个选项,请将 RSAES_OAEP_SHA_1 替换为 RSAES_OAEP_SHA_256RSAES_PKCS1_V1_5。将 1234abcd-12ab-34cd-56ef-1234567890ab 替换为为其下载公有密钥和导入令牌的 KMS 密钥的密钥 ID。在该操作中,您可以使用密钥 ID密钥 ARN,但不能使用别名别名 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": 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:加密密钥材料