如何将密钥导入 AWS Key Management Service?

上次更新时间:2021 年 10 月 5 日

我想在 AWS 服务中使用 256 位对称密钥。如何在 AWS Key Management Service (AWS KMS) 中导入我的密钥资料?

解决方法

AWS KMS 让您可以将密钥资料导入 AWS KMS 密钥,以便用于 AWS KMS 支持的 AWS 服务

按照以下步骤在 AWS KMS 中导入密钥资料:

1.    创建一个没有密钥资料的 KMS 密钥。记下 KMS 密钥的 ID。

注意:对于定义密钥管理权限定义密钥使用权限,最佳实践是将密钥管理员和密钥角色分开,以限制在发生凭证泄露时所带来的影响。

2.    在本地计算机或安装了 OpenSSL 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上打开终端。

3.    运行以下命令,以生成 256 位对称密钥:

openssl rand -out PlaintextKeyMaterial.bin 32

4.    运行以下 AWS 命令行界面 (AWS CLI) 命令,以描述密钥并获取导入参数:

注意:这些命令会将公有密钥和导入令牌参数存入变量。​

export KEY=`aws kms --region eu-west-2 get-parameters-for-import --key-id example1-2345-67ab-9123-456789abcdef --wrapping-algorithm RSAES_OAEP_SHA_256 --wrapping-key-spec RSA_2048 --query '{Key:PublicKey,Token:ImportToken}' --output text`

5.    运行这些命令以将公钥和导入的令牌放入单独的 base64 编码文件中:

echo $KEY | awk '{print $1}' > PublicKey.b64
echo $KEY | awk '{print $2}' > ImportToken.b64

6.    运行以下命令,以将 Base64 编码文件转换为二进制文件以供导入:

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

7.    运行以下命令,以使用已转换为二进制文件的公有密钥加密密钥材料:​

openssl pkeyutl -in PlaintextKeyMaterial.bin -out EncryptedKeyMaterial.bin -inkey PublicKey.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

8.    运行以下命令,以在 AWS KMS 中导入已加密的密钥材料:

注意:此示例指定密钥材料不会过期,但您也可以选择为密钥材料设置到期日期​。有关更多信息,请参阅 ExpirationModel

aws kms --region eu-west-2 import-key-material --key-id example1-2345-67ab-9123-456789abcdef --encrypted-key-material fileb://EncryptedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE

9.    通过在 AWS KMS 控制台中检查密钥,或运行 DescribeKey API 操作,确认所导入密钥的状态设置为 Enabled(已启用)。

如果您由于以下原因之一无法导入密钥:

  • 等待 24 小时以上,导入的令牌会过期。通过下载包装密钥并再次导入令牌来重新加密密钥材料以解决此问题。
  • 您的密钥材料不是 256 位对称密钥。确认加密密钥材料的文件大小为 32 字节。运行以下命令之一以检查文件大小:

Linux

wc -c <filename>.bin

Windows

dir <filename>.bin