Получение текущего идентификатора учетной записи пользователя в boto3

Мне нужно получить идентификатор учетной записи текущего пользователя в boto3 script. До сих пор мое лучшее решение - разобрать текущего пользователя arn:

>>> import boto3
>>> account_id = boto3.resource('iam').CurrentUser().arn.split(':')[4]

но мне было интересно, есть ли более "легкий" подход. Фактически

>>> timeit.timeit("boto3.resource('iam').CurrentUser().arn",
... 'import boto3', number=10)
4.8895583080002325

и мне действительно не нужен ресурс CurrentUser в моем script.

Ответ 1

Вы можете получить идентификатор учетной записи с помощью API STS:

>>> import boto3    
>>> boto3.client('sts').get_caller_identity().get('Account')
'012345678901'

Ответ 2

EDIT: теперь вы можете вызвать api, см. ответ mixja.

Во-первых, нет способа получить идентификатор учетной записи прямо с boto3. Нет информации, хранящейся локально, что может сказать вам об этом, и нет API-интерфейса службы, который возвращает его вне контекста ARN. Таким образом, нет способа получить его от boto3 без проверки ARN.

Во-вторых, использование timeit может очень ввести в заблуждение с помощью boto3 или botocore, потому что есть немного времени разминки при создании клиента или ресурса в первый раз (определения сервисов загружаются на летать).