Search code examples
amazon-web-servicesamazon-ec2aws-lambdaassume-role

lambda assume role empty results


I'm trying to get EC2 instances from Account B using Lambda in Account A. Not sure what I'm missing.

Account A: Lambda code is running. Account B: EC2 Instances are running. below Assume Role prints access key and session token ID, but does not return any results.

IAM role in Account B has AmazonEC2ReadOnlyAccess policy attached and trust relationship has arn:aws:iam::ACCOUNT_A:role/role-name_ACCOUNT_A

This is the code:

import json
import boto3
from collections import OrderedDict
from pprint import pprint
import time
from time import sleep
from datetime import date
import datetime
def lambda_handler(event, context):
    # Assume Role To connect to other Account
    sts_connection = boto3.client('sts')
    acct_b = sts_connection.assume_role(
        RoleArn="arn:aws:iam::ACCOUNT_B:role/role_name_account_B",
        RoleSessionName="cross_acct_lambda"
    )
    
    ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
    SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
    SESSION_TOKEN = acct_b['Credentials']['SessionToken']
    # create service client using the assumed role credentials, e.g. S3
    ec2 = boto3.client(
        "ec2",
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )
    status = ec2.describe_instance_status()
    pprint(status)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

Result:

Response:
{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\""
}

Result:

Response:
{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\""
}

Request ID:
"ZZZZZZZZZZZZZZZZZZZZ"

Function logs:

START RequestId: ZZZZZZZZZZZZZZZZZZ Version: $LATEST
{'InstanceStatuses': [],

Thanks.


Solution

  • Once I added the region I could see the results, Thanks John Rotenstein and Jarmod for your guidance.