首页 > 解决方案 > aws-encryption-cli:如何在加密期间设置配置文件时使用解密?

问题描述

我在 KMS 中有一个密钥,我想用它在 shell 脚本中解密。我已经安装了aws-encryption-cli ( https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/crypto-cli.html )。

hello world 示例在我的开发环境中运行良好,我在其中创建了一个 kms-key(它的 arn 存储在变量 中$dev_key_arn)。

> echo 'Hello World' | aws-encryption-cli --encrypt --master-keys key=$dev_key_arn --input - --output - --encode -S | aws-encryption-cli --decrypt  --input - --output - --decode -S
Hello World

我也有生产环境,所以我想使用 kms-key $prod_key_arn。我在名为 的配置文件中有有效的 AWS 凭证prod,所以我希望

> echo 'Hello World' | aws-encryption-cli --encrypt --master-keys key=$prod_key_arn profile=prod region=eu-west-1   --input - --output - --encode -S | aws-encryption-cli --decrypt  --input - --output - --decode -S
Encountered unexpected error: increase verbosity to see details.
DecryptKeyError("Unable to decrypt any data key")

但它因上述消息而失败。如果检查加密的消息,我看到它成功加密了消息

> aws-encryption-cli --encrypt --master-keys key=arn:aws:kms:eu-west-1:953495156568:key/2197020f-5b3c-4d05-bffc-04cf6114e405 profile=prod region=eu-west-1 provider=aws-kms  --input /tmp/prod_key --output - --encode -S
AYADePCKfZUuL<....>iza1AU=

密钥的 arn 存储在加密材料中(base64 解码显示它)。但是关于个人资料的信息去哪儿了?它在解码时不能作为参数传入,它似乎不是编码材料的一部分。

标签: aws-kms

解决方案


aws-encryption-cli作者在这里。:)

您遇到的问题是,在您的加密命令中,您将配置文件设置为“prod”,但在您的解密命令中您没有设置配置文件,因此它使用的是您的默认配置文件。

aws-encryption-cli --decrypt  --input - --output - --decode -S

如果您添加一个主密钥定义来标识您要使用的配置文件,它应该可以工作。

aws-encryption-cli --decrypt --master-keys provider=aws-kms profile=prod  --input - --output - --decode -S

因为如果您不指定名称,我们默认使用 aws-kms 提供程序,因此仅指定配置文件也应该有效,但我更喜欢标识提供程序,因为这样可以更清楚地说明意图。

aws-encryption-cli --decrypt --master-keys profile=prod  --input - --output - --decode -S

如果您遇到任何其他问题aws-encryption-cli,请随时在我们的 GitHub 存储库 [1] 中打开一个问题。

[1] https://github.com/aws/aws-encryption-sdk-cli


推荐阅读