Is there a way to list available/configured AWS CLI profiles?
You can list profiles in your aws config/credential files using list-profiles
:
aws configure list-profiles
This is working for me with aws-cli version 2.0.8.
(Answering my own question.)
No, there is not.
I wrote two scripts that include the parsing I ended up using. For anyone interested, they're available in two GitHub repositories:
awscli-mfa and aws-scripts
There are two related blog articles : "AWS CLI Key Rotation Script for IAM Users revisited", and "Easy MFA and Profile Switching in AWS CLI".
(update 2019-01-27: the blog article "Easy MFA and Profile Switching in AWS CLI" is out of date as it refers to the awscli-mfa.sh
script version 1.x while the rewritten 2.x has been released. An updated blog article is forthcoming, but in the meanwhile, please refer to the awscli-mfa repository documentation)
Parsing ~/.aws/credentials
was simple enough for me.
$ cat ~/.aws/credentials | grep -o '\[[^]]*\]'
=> [default] [other_profile] [other_profile2]
I also aliased the command into aws-profiles
by adding the following line into my ~/.bash_profile
alias aws-profiles="cat ~/.aws/credentials | grep -o '\[[^]]*\]'"
utilizing a profile
add --profile <profile_name>
to your aws command. Ex. $ aws s3 cp ~/my.pdf s3://my_bucket/my.pdf --profile other_profile2
If you want to parse the config
file rather than credentials
(which I found was more practical when using a source_profile rather than having unique credentials defined in credentials
for each profile), then the following should do the trick:
cat ~/.aws/config | grep "\[profile " | sed -e 's/\[//g' -e 's/\]//g' -e 's/profile //g'
This will find all lines like this:
[profile foo]
[profile bar]
And return this:
foo
bar