Skip to content

Instantly share code, notes, and snippets.

@kyontan
Created July 19, 2021 11:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kyontan/2e8ddc50c495e5c7a81de564fa68fd63 to your computer and use it in GitHub Desktop.
Save kyontan/2e8ddc50c495e5c7a81de564fa68fd63 to your computer and use it in GitHub Desktop.
aws assume-role helper for aws cli

To use this script, set environment variables below:

AWS_ROLE_ARN=arn:aws:iam::XXX:role/XXX
AWS_ROLE_SESSION_NAME=a_role_accessed_from_cli
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=

When use with envchain, you can do:

As a helper to set environment variables for AWS CLI by eval

eval $(envchain some-role assume)

As a runner script that re-sets environment variables one-time

envchain some-role assume aws ...
#!/bin/sh
if [ "x$AWS_ROLE_ARN" = "x" ]; then
echo "set AWS_ROLE_ARN"
exit 1
fi
if [ "x$AWS_ROLE_SESSION_NAME" = "x" ]; then
echo "set AWS_ROLE_SESSION_NAME"
exit 1
fi
temp=$(mktemp)
aws sts assume-role --role-arn $AWS_ROLE_ARN --role-session-name $AWS_ROLE_SESSION_NAME > $temp
AWS_ACCESS_KEY_ID=$(cat $temp | jq -r ".Credentials.AccessKeyId")
AWS_SECRET_ACCESS_KEY=$(cat $temp | jq -r ".Credentials.SecretAccessKey")
AWS_SESSION_TOKEN=$(cat $temp | jq -r ".Credentials.SessionToken")
rm $temp
if [ $# -ne 0 ]; then
env AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN $@
else
echo export AWS_ACCESS_KEY_ID=\"$AWS_ACCESS_KEY_ID\"
echo export AWS_SECRET_ACCESS_KEY=\"$AWS_SECRET_ACCESS_KEY\"
echo export AWS_SESSION_TOKEN=\"$AWS_SESSION_TOKEN\"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment