以下のスクリプトを使用していますが、Secret Managerで資格情報を取得できないため、構文エラーが発生します。 「ユーザー名」:「入力したアクセスキーのAWS CLIコマンド」、「パスワード」:「入力したキーのAWS CLIコマンド」。誰かが助けることができれば良いでしょう。
#!/bin/bash
# Send the POST request and capture the response
response=$(curl -k \
-H "Content-Type: application/json" \
-X POST \
-d \
'{
"username":"'aws secretsmanager get-secret-value --region ap-south-1 --secret-id poc | jq --raw-output '.SecretString' | jq -r '.Access_Key''",
"password":"'aws secretsmanager get-secret-value --region ap-south-1 --secret-id poc | jq --raw-output '.SecretString' | jq -r '.Secret_Key''"
}' \
https://<region>/api/v1/authenticate)
答え1
どうすればいいですか?シェルを使うここに文書があります:
#!/bin/bash
username=$(aws secretsmanager get-secret-value ... | jq '...')
password=$(aws secretsmanager get-secret-value ... | jq '...')
anotherVariable=foobar
# Send the POST request and capture the response
response=$(
curl -k \
-H "Content-Type: application/json" \
https://<region>/api/v1/authenticate
-d @/dev/stdin <<EOF
{
"username": $username,
"password": $password,
"anotherKey": "$anotherVariable"
}
EOF
)
-X POST
使用には必要ありません-d
。
慣れたら、jq
@Kusalanandaの回答を選択または混合してみてください。そうでなければ、慣れていない場合jq
。
答え2
ペイロードデータの参照に問題があり、これらのコマンドパイプラインは自動的には実行されません。
代わりに、まずJSONペイロード文書を準備してから、準備されたcurl
データで呼び出すことを検討してください。
#!/bin/sh
# Prepare JSON payload containing username and password.
payload=$(
aws secretsmanager get-secret-value --region ap-south-1 --secret-id poc |
jq '.SecretString | fromjson | {username: .Access_Key, password: .Secret_Key}'
)
# Submit the payload to the API and capture the response.
response=$(
curl --silent \
-H 'Content-Type: application/json' \
-d "$payload" \
"https://{{region}}/api/v1/authenticate"
)
複数のデータを JSON オブジェクトに一度にインポートできるため、AWS 認証情報を取得するにはaws
+ 呼び出しを一度だけ行うことができます。キー値は埋め込みJSONオブジェクトであるため、埋め込みフィールドにアクセスする前に式でそれをデコードします。jq
jq
SecretString
fromjson
jq