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

Мне нужно получить идентификатор учетной записи "текущего пользователя" в boto3 скрипт. До сих пор моим лучшим решением является анализ текущего пользователя 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 ресурс в моем сценарии.

3 ответа

Решение

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

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

РЕДАКТИРОВАТЬ: Теперь есть API, который вы можете позвонить, см. Ответ Mixja.

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

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

      sts            = boto3.client('sts')
AWS_ACCOUNT_ID = sts.get_caller_identity()["Account"]

print(AWS_ACCOUNT_ID)
Другие вопросы по тегам