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.
Vous pouvez obtenir l'ID de compte à l'aide de l'API STS:
>>> import boto3
>>> boto3.client('sts').get_caller_identity().get('Account')
'012345678901'
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).