我快到了," $ i"是我遇到麻烦的地方。我试过$ {i}," $ i",$ i。我相信有经验的人可以帮助我,我已经为此工作了整整一天。让我疯了。
session_name="Some-sesh_name"
profile_name="ephemeral-${account_id}-${profile_path}-`date +%Y%m%d%H%M%S`"
roles=( "arn:aws:iam::11111111111111:role/role_name" "arn:aws:iam::222222222222:role/role_name" )
sts=( $(
aws sts assume-role \
--role-arn "$i" \
--role-session-name "$session_name" \
--query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' \
--output text
) )
for i in "${roles[@]}";
do $sts ; done
aws configure set aws_access_key_id ${sts[0]} --profile ${profile_name}
aws configure set aws_secret_access_key ${sts[1]} --profile ${profile_name}
aws configure set aws_session_token ${sts[2]} --profile ${profile_name}
答案 0 :(得分:4)
在您定义$i
数组时,sts
会展开。之后,它就不存在了。
要使aws
命令可重用,请使用函数:
roles=(
"arn:aws:iam::11111111111111:role/role_name"
"arn:aws:iam::222222222222:role/role_name"
)
sts() {
aws sts assume-role \
--role-arn "$1" \
--role-session-name "$session_name" \
--query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' \
--output text
}
for role in "${roles[@]}"; do
sts "$role"
done
注意在函数中使用$1
来检索第一个参数。全局变量$session_name
仍然正常
我不明白你对sts
数组的看法。在for循环中,您希望将其称为命令,但configure命令采用数组的元素?在假设所有角色之后?您想要使用返回的数据吗?
你想要:
for role in "${roles[@]}"; do
data=( $(sts "$role") )
aws configure set aws_access_key_id "${data[0]}" --profile "$profile_name"
aws configure set aws_secret_access_key "${data[1]}" --profile "$profile_name"
aws configure set aws_session_token "${data[2]}" --profile "$profile_name"
done