Получение текущего идентификатора учетной записи пользователя в 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)