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