Ответ 1
Вы можете получить идентификатор учетной записи с помощью API STS:
>>> import boto3
>>> boto3.client('sts').get_caller_identity().get('Account')
'012345678901'
Мне нужно получить идентификатор учетной записи текущего пользователя в 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.
Вы можете получить идентификатор учетной записи с помощью API STS:
>>> import boto3
>>> boto3.client('sts').get_caller_identity().get('Account')
'012345678901'
EDIT: теперь вы можете вызвать api, см. ответ mixja.
Во-первых, нет способа получить идентификатор учетной записи прямо с boto3
. Нет информации, хранящейся локально, что может сказать вам об этом, и нет API-интерфейса службы, который возвращает его вне контекста ARN. Таким образом, нет способа получить его от boto3
без проверки ARN.
Во-вторых, использование timeit
может очень ввести в заблуждение с помощью boto3
или botocore
, потому что есть немного времени разминки при создании клиента или ресурса в первый раз (определения сервисов загружаются на летать).