我正在使用下面的脚本,出现语法错误,因为无法从机密管理器获取凭据。 “用户名”:“我已输入的访问密钥的 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
我会做什么,使用 shell这里是文档:
#!/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"
)
这只需要一次aws
+jq
调用即可获取 AWS 凭证,因为jq
可以一次性将多条数据提取到 JSON 对象中。键SecretString
的值是一个嵌入的 JSON 对象,因此我们在访问嵌入字段之前在表达式fromjson
中对其进行解码。jq