web-dev-qa-db-ja.com

boto3で現在のユーザーアカウントIDを取得する

account-id を取得する必要があります 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 リソースは実際には必要ありません。

29
Stefano M

STS APIを使用して、アカウントIDを取得できます。

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

編集:呼び出すことができるapiがあります。mixjaの答えを参照してください。

まず、boto3からアカウントIDを直接取得する方法はありません。それを伝えることができるローカルに保存された情報はなく、ARNのコンテキスト外でそれを返すサービスAPIもありません。そのため、ARNを検査せずにboto3から取得する方法はありません。

第二に、timeitを使用することは、boto3またはbotocoreと非常に誤解を招く可能性があります。定義はその場でロードされます)。

1
Jordon Phillips