How to execute aws ec2 describe-instances for different account

Assuming we have two AWS acounts: Account-A, Account-B and an ec2 instance running on AccountA.

aws ec2 describe-instances works as expected for the instance's own account without an ~/.aws/credentials file with an instance role.

My goal is to run aws ec2 describe-instances for Account-B from this instance.

The following command works and outputs credentials:

$ aws sts assume-role --role-arn arn:aws:iam::012345678901:role/accountb-role --role-session-name test

However, this does not:

$ aws ec2 describe-instances --profile AccountB

'aws_access_key_id'

~/.aws/config

[default]
region = us-east-1

[profile AccountB]
role_arn = arn:aws:iam::012345678901:role/accountb-role
source_profile = default

As I mentioned, ~/.aws/credentials does not exist as the instance uses an instance role for IAM.

accountb-role Trust Relationship Policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678900:role/accounta-role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

instance inline policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1490625590000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::012345678901:role/accountb-role"
            ]
        }
    ]
}

Both the accounta-role instance role and accountb-role also have the stock ReadOnlyAccess IAM policy attached.


Solution 1:

If anyone is still interested in the answer, you have to save the aws credentials to be able to use AccountB between these calls:

aws sts assume-role --role-arn arn:aws:iam::012345678901:role/accountb-role --role-session-name test

<< save aws_access_key_id, aws_secret_access_key, AWS_SESSION_TOKEN here>>

You then call

aws configure --profile AccountB 

to make sure you have them set up. also, can AWS_SESSION_TOKEN expire after some time

aws ec2 describe-instances --profile AccountB

This article explains in detail