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

上次更新时间:2019 年 7 月 9 日

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

解决方法

AWS KMS 让您可以将密钥材料导入客户主密钥 (CMK),以便用于与 AWS KMS 集成的 AWS 服务

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

1.    创建没有密钥材料的 CMK。请记下您的 CMK 密钥 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.    通过在 IAM 控制台中查看或运行 DescribeKey API 操作,确认导入的密钥状态设置为已启用

如果您无法导入密钥,请执行以下操作之一:

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

Linux

wc -c <filename>.bin

Windows

dir <filename>.bin

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?