【问题标题】:getting the current user account-id in boto3在 boto3 中获取当前用户帐户 ID
【发布时间】:2019-02-22 21:08:00
【问题描述】:

我需要在boto3 脚本中获取“当前用户”的account-id。到目前为止我最好的解决方案是解析当前用户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 资源。

【问题讨论】:

    标签: boto3 botocore


    【解决方案1】:

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

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

    【讨论】:

    • 此解决方案仅比加载资源快一点。我看到的唯一解决方案是使用异步代码。
    • 由于某种原因,这似乎不再起作用。我现在得到AttributeError: 'STS' object has no attribute 'get_caller_identity'
    【解决方案2】:

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

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

    其次,使用timeit 可能会非常误导boto3botocore,因为当您第一次创建客户端或资源时(服务定义加载到飞)。

    【讨论】:

    • 感谢您的回答,但让我补充一点,我知道在boto3 中,属性被延迟评估,因此第一次访问比后续访问花费的时间更长。关键是我的脚本作为 CLI 以交互方式使用,第一次访问时大约 500 毫秒的延迟会导致“滞后”的用户体验。
    • mixja,这个答案在撰写本文时是正确的。您的答案中使用的操作是在 2016 年 4 月 5 日添加的。我编辑了我的评论以指向您的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多