从AWS Secrets Manager检索机密

时间:2020-05-02 11:49:55

标签: json linux amazon-web-services ubuntu aws-cli

我在AWS Secrets Manager中存储了一堆秘密(键/值)对。我尝试使用jq来解析秘密:

aws secretsmanager get-secret-value --secret-id <secret_bucket_name> | jq --raw-output '.SecretString' | jq -r .PASSWORD

它检索存储在.PASSWORD中的值,但是问题是我不仅要检索存储在value中的key,而且还希望在下面检索键/值方式:

KEY_1="1234"
KEY_2="0000"
.
.
.
so on...

通过运行以上命令,我无法以这种格式进行解析,而且对于每个键/值,我不得不多次运行此命令,这很繁琐。我是在做错什么,还是有更好的方法呢?

2 个答案:

答案 0 :(得分:3)

这与python不相关,但与aws cli和jq的行为有关。我想出了类似的东西。

aws secretsmanager get-secret-value --secret-id <secret_name> --output text --query SecretString | jq ".[]"

字面意义上有数百种不同的格式。

aws cli本身有很多选项,可以使用--query选项https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html

来过滤输出

您要寻找的精确转换需要这样的东西:

aws secretsmanager get-secret-value --secret-id <secret_name> --output text --query SecretString \
 | jq  -r 'to_entries[] | [.key, "=", "\"", .value, "\"" ] | @tsv' \
 | tr -d "\t"

必须有一些更好的方法!

答案 1 :(得分:0)

尝试下面的代码段。我倾向于将这些小辅助过滤器放入其自己的shell函数<3

tokv() {
  jq -r 'to_entries|map("\(.key|ascii_upcase)=\"\(.value|tostring)\"")|.[]'
}

$ echo '{"foo":"bar","baz":"fee"}' | tokv
FOO="bar"
BAZ="fee"