A short howto on configuring AWS CLI to switch roles
Requirement:
You have one AWS account that needs to switch roles before executing things on AWS. It’s an easy method on AWS console, but how to switch roles in AWS CLI.
Solution:
Let’s consider the below setup-
- AWS IAM account with programmatic access –
user101
- Same IAM account having
sts:AsumeRole
permissions. - AWS IAM role for above said IAM user to assume (same or cross-account)-
role101
Start with configuring the AWS CLI in a standard way.
$ aws configure --profile user101
AWS Access Key ID [None]: AKIAQX3SNXZGUQFOSK4T
AWS Secret Access Key [None]: 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
Default region name [us-east-1]: us-east-1
Default output format [None]: json
Note: It is not a good practice to keep AWS credentials in a plain text format. Keep them in a secured encrypted way using aws-auth.
Now, at this point, you must have an AWS credentials file created in the home directory.
$ cd ~/.aws
$ cat credentials
[user101]
aws_access_key_id = AKIAQX3SNXZGUQFOSK4T
aws_secret_access_key = 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
region = us-east-1
output = json
You need to edit the above credentials file to add IAM role details. Append the below configuration in the file.
If you are working with AWS Gov Cloud make sure the ARNs has proper AWS Partition defined. E.g. arm:aws-us-gov:x:x:…..
[role101]
role_arn = arn:aws:iam::xxxxxxxxx:role/role101
output = json
source_profile = user101
where –
role101
is a Role identifier. You can choose as per your choice.- Mention the correct IAM role ARN
- source_profile should use the profile identifier of the user who will assume this role. In our case, its
user101
.
Save the file, and you are ready to go.
Test configurations –
$ aws sts get-caller-identity
{
"UserId": "AIDAQX3SNXZG3Z2AXNIMJ",
"Account": "xxxxxxxxx",
"Arn": "arn:aws:iam::xxxxxxxxx:user/user101"
}
$ aws sts get-caller-identity --profile role101
{
"UserId": "AROAQX3SNXZG6KL4YENFZ:botocore-session-1631087792",
"Account": "xxxxxxxxx",
"Arn": "arn:aws:sts::xxxxxxxxx:assumed-role/role101/botocore-session-1631087792"
}
You can see this by using --profile role101
we are assuming the IAM role role101
for the user user101
.
AWS CLI configuration for switching roles using MFA
Note: If you are on Windows and using GitBash, refer to configuring GitBash for MFA prompts. It works perfectly in Powershell.
In some cases, your AWS environment must have MFA restrictions in place where the user user101
must have MFA enabled to switch to the role role101
. In such a scenario, your role profile in credentials
files should include MFA device ARN as well like below –
[role101]
role_arn = arn:aws:iam::xxxxxxxxx:role/role101
mfa_serial = arn:aws:iam::xxxxxxxxx:mfa/user101
output = json
source_profile = user101
where –
mfa_serial
is the ARN of the MFA device of user101
.
You will be prompted to supply the MFA code whenever you use profile role101 in AWS CLI commands.
$ aws sts get-caller-identity --profile role101
Enter MFA code for arn:aws:iam::xxxxxxxxx:mfa/user101:
{
"UserId": "AROAQX3SNXZG6KL4YENFZ:botocore-session-1631089277",
"Account": "xxxxxxxxx",
"Arn": "arn:aws:sts::xxxxxxxxx:assumed-role/role101/botocore-session-1631089277"
}
Share Your Comments & Feedback: