user14226172
user14226172

Reputation:

Get the UserID for an IAM user programatically using Boto3

I am trying to get the UserId after the creation of user, suing "account_id = boto3.client('sts').get_caller_identity().get('some_other_user')", but for output I get none, what could be the reason. I am very new to boto and python so it might be something very small.

import boto3
import sys
import json
iam = boto3.resource('iam') #resource representing IAM
group = iam.Group('group1') # Name of group
created_user = iam.create_user(
    UserName='some_other_user'
)
account_id = boto3.client('sts').get_caller_identity().get('some_other_user')
print(account_id)    
create_group_response = iam.create_group(GroupName = 'group1')
response = group.add_user(
UserName='some_other_user' #name of user
)
group = iam.Group('group1')
response = group.attach_policy(
    PolicyArn='arn:aws:iam::196687784:policy/boto-test'
)

Upvotes: 3

Views: 1922

Answers (1)

jarmod
jarmod

Reputation: 78563

The get_caller_identity() function returns a dict containing:

{
    'UserId': 'AIDAEXAMPLEHERE',
    'Account': '123456789012',
    'Arn': 'arn:aws:iam::123456789012:user/james'
}

So, to use this:

import boto3
sts = boto3.client('sts')
response = sts.get_caller_identity()
print('User ID:', response['UserId'])

Or you can use response.get('UserId') to get the user ID. The key to the user ID in the response dictionary is always the literal UserId. It doesn't vary (you cannot call response.get('james'), for example).

You cannot retrieve the identity of an arbitrary IAM principal using sts.get_caller_identity(). It only gives you the identity associated with the credentials that you implicitly used when making the call.

Upvotes: 4

Related Questions