экранирование символов при передаче JSON в aws secrettsmanager - PullRequest
0 голосов
/ 06 января 2020

Я пытался написать скрипт, который обновляет 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\"}"

, это работает.

Очевидно, что в скрипте возникают проблемы без кавычек. Любые предложения о том, как это исправить?

( Это, вероятно, что-то делать с bash, а не AWS)

1 Ответ

1 голос
/ 06 января 2020

У меня работает следующий скрипт:

#!/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"
...