68

我需要在脚本中获取“当前用户”的帐户 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脚本中的资源。

4

2 回答 2

148

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

>>> import boto3
>>> boto3.client('sts').get_caller_identity().get('Account')
'012345678901'
于 2016-06-09T10:23:04.807 回答
1

编辑:现在有一个您可以调用的 api,请参阅 mixja 的答案。

首先,没有办法直接从boto3. 没有本地存储的信息可以告诉您这一点,也没有服务 API 在 ARN 的上下文之外返回它。boto3因此,如果不检查 ARN ,就无法从中获取它。

其次,第一次创建客户端或资源(服务定义是动态加载的)时,使用timeit可能会产生很大的误导,boto3或者botocore因为有一点预热时间。

于 2015-10-27T06:32:46.713 回答