aws-kms - 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-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] 中打开一个问题。
推荐阅读
- ios - CallKit 可以检测 GSM 呼叫并检索来电号码吗?
- scrapy - First Scraper > INFO:已抓取 0 页(以 0 页/分钟),抓取 0 项(以 0 项/分钟)
- spring-mvc - spring mvc 4:使用属性格式注释将字符串解析为 java.time.LocalDate
- csv - 将 CSV 数据导入 Google 表格
- c - 如何为结构数组中的 typedef 结构分配内存
- kubernetes-ingress - 在 Minishift 中使用入口
- r - 将 NZMG 坐标转换为纬度/经度
- python - 修改包装函数中的函数代码
- mysql - 使用 Scala JDBC 上传大数据
- rust - std::op 特征“Not”的类型不匹配