bash - 将 JSON 传递给 aws secretsmanager 时转义字符
问题描述
我试图编写一个更新 AWS 机密的脚本。是的,该update-secret
命令已经这样做了,但这将覆盖现有的秘密,而不是将它们与新内容合并。
例如,假设my-environment/my-application/secrets有以下内容:
{ "db_1_pwd": "secret"}
如果我运行我的脚本,如下所示:
>> update_secret my-environment/my-application/secrets '{"db_2_pwd": "secreter"}'
我希望新内容是:
{ "db_1_pwd": "secret", "db_2_pwd": "secreter"}
相反,新内容最终是这个(未转义的)字符串:
"{\"db_1_pwd\":\"secret\",\"db_2_pwd\":\"secreter\"}"
这是我的脚本:
#!/bin/sh
SECRET_ID=$1
SECRET_STRING=$2
EXISTING_SECRET=`aws secretsmanager get-secret-value --secret-id $SECRET_ID | jq '.SecretString | fromjson'`
NEW_SECRET=`echo $EXISTING_SECRET $SECRET_STRING | jq -s 'add tostring'`
echo $NEW_SECRET # this is printed out for debug purposes
aws secretsmanager put-secret-value --secret-id $SECRET_ID --secret-string $NEW_SECRET
请注意,它确实会"{\"db_1_pwd\":\"secret\",\"db_2_pwd\":\"secreter\"}"
在 echo 语句中打印出来,如果我在命令行上键入:
>> aws secretsmanager put-secret-value --secret-id my-environment/my-application/secrets --secret-string "{\"db_1_pwd\":\"secret\",\"db_2_pwd\":\"secreter\"}"
有用。
显然,脚本在转义引号方面存在问题。对于如何解决这个问题,有任何的建议吗?
(与 AWS 相比,这可能是用 bash 做的事情)
解决方案
以下脚本对我有用:
#!/bin/sh
SECRET_ID=$1
SECRET_STRING=$2
EXISTING_SECRET=`aws secretsmanager get-secret-value --secret-id $SECRET_ID | jq '.SecretString | fromjson'`
NEW_SECRET=`echo "$EXISTING_SECRET $SECRET_STRING" | jq -s add`
aws secretsmanager put-secret-value --secret-id $SECRET_ID --secret-string "$NEW_SECRET"
推荐阅读
- elasticsearch - TShark 的 Elasticsearch 映射
- git - 如何将 Gerrit 3.0 项目从一台 Gerrit 3.0 服务器迁移到另一台 Gerrit 3.0 服务器并维护更改元数据?
- ios - 如何将我设备上的移动应用程序转换为 IPA 文件?
- ruby-on-rails - Rails Admin - 对标签执行多重搜索
- sql - 用 SAS 语言在几秒钟内转换 hh:mm:ss 格式?
- reactjs - 组件不会随 React 路由器 dom 改变
- swift - 如何在 Mac OS 上的 Swift 中获取防火墙状态?
- r - 从R中的随机森林(RF)中提取每个样本在森林中分配的叶子指数
- scala - 如何在收集()之后清除火花驱动程序内存
- sql - Informix “发生语法错误。” 使用子查询时