Is there a way to list available/configured AWS CLI profiles, other than parsing
~/.aws/credentials for profile names?
You can list profiles in your aws config/credential files using
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:
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)
~/.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
alias aws-profiles="cat ~/.aws/credentials | grep -o '\[[^]]*\]'"
utilizing a profile
--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: