我试图编写一个更新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
请注意,它确实会在echo语句中打印出"{\"db_1_pwd\":\"secret\",\"db_2_pwd\":\"secreter\"}"
,如果我在命令行中键入以下内容:
>> aws secretsmanager put-secret-value --secret-id my-environment/my-application/secrets --secret-string "{\"db_1_pwd\":\"secret\",\"db_2_pwd\":\"secreter\"}"
有效。
很明显,脚本在转义引号时遇到了问题。对于如何解决这个问题,有任何的建议吗?
(这可能是需要bash而不是AWS的事情)
答案 0 :(得分:1)
以下脚本对我有用:
#!/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"