web-dev-qa-db-fra.com

obtenir l'ID de compte d'utilisateur actuel dans boto3

J'ai besoin d'obtenir le account-id de 'l'utilisateur actuel' dans un boto3 script. Jusqu'à présent, ma meilleure solution est d'analyser l'utilisateur actuel arn :

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

mais je me demandais s'il y avait une approche plus "légère". En réalité

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

et je n'ai en fait pas besoin de la ressource CurrentUser dans mon script.

29
Stefano M

Vous pouvez obtenir l'ID de compte à l'aide de l'API STS:

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

EDIT: Il y a maintenant une API que vous pouvez appeler, voir la réponse de mixja.

Tout d'abord, il n'y a aucun moyen d'obtenir l'ID de compte directement à partir de boto3. Aucune information stockée localement ne peut vous le dire, et aucune API de service ne la renvoie en dehors du contexte d'un ARN. Il n'y a donc aucun moyen de l'obtenir à partir de boto3 sans inspecter un ARN.

Deuxièmement, l'utilisation de timeit peut être très trompeuse avec boto3 ou botocore car il y a un peu de temps de préchauffage lorsque vous créez un client ou une ressource pour la première fois (les définitions de service sont chargées à la volée).

1
Jordon Phillips