在 boto3中获取当前用户帐户 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资源。

62454 次浏览

编辑: 现在有一个 api,你可以调用,看到混合的答案。

首先,没有办法直接从 boto3获得帐户 ID。没有本地存储的信息可以告诉您这一点,也没有服务 API 在 ARN 的上下文之外返回它。因此,没有办法得到它从 boto3没有检查一个 ARN。

其次,对于 boto3botocore,使用 timeit可能会产生很大的误导,因为当您第一次创建客户机或资源时(服务定义是动态加载的)会有一些预热时间。

您可以使用 STS API 获得帐户 ID:

>>> import boto3
>>> boto3.client('sts').get_caller_identity().get('Account')
'012345678901'
sts            = boto3.client('sts')
AWS_ACCOUNT_ID = sts.get_caller_identity()["Account"]


print(AWS_ACCOUNT_ID)