【问题标题】:boto3 introspect user aws configuration to determine mfa_serial in profileboto3 内省用户 aws 配置以确定配置文件中的 mfa_serial
【发布时间】:2021-06-25 08:31:44
【问题描述】:

TL;DR

似乎没有一种内省 AWS 配置 (CLI) 以确定配置文件是否需要用于 STS 的 MFA 令牌的好方法,而 boto 不会自动管理它。

我已经尝试创建一个client 以便可以使用类似这样的东西进行自省:

       c = boto3.client('sts', region_name = region,)
       print('{}'.format(c.mfa_serial))
       time.sleep(1)

这只是产生:

'STS' object has no attribute 'mfa_serial'

是的,这是有道理的。所以我也尝试了一个会话:

        session = boto3.session.Session(profile_name = profile['name'],
                                        region_name  = region,)
        import time
        print('{}'.format(session.mfa_serial))
        time.sleep(1)

产生:

'Session' object has no attribute 'mfa_serial'

总结

上下文:

  • 我们有几个帐户
    • 一个人的$HOME/.aws/credentials 通常包含几个帐户 IE:
[default]
aws_access_key_id...
aws_secret_access_key...

[org1-admin]
aws_access_key_id...
aws_secret_access_key...
mfa_serial...

[org2-admin]
aws_access_key_id...
aws_secret_access_key...

[org3-admin]
aws_access_key_id...
aws_secret_access_key...
...
  • 其中一个帐户(mfa_serial 的存在指出的 org1-admin)使用子帐户,因此有一个配置
    • $HOME/.aws/config 的内容定义了上述指定帐户之一下的配置文件:
[profile gen3-prod]
role_arn = ...
source_profile = org3-admin

[profile gen3-preprod]
role_arn = ...
source_profile = org3-admin

[profile gen3-dev]
role_arn = ...
source_profile = org3-admin

那么问题来了:

我们有一个库存 CLI 工具,需要进行资源查询。问题是 MFA 最近被设置为仅对一个主要帐户 org1-admin 强制执行。 CLI 工具需要能够向 CLI 管理员询问他们的 MFA 令牌如果 CLI 工具正在查询 org1-admin 资源,然后仅为该帐户承担 sts 角色。没关系。问题是脚本没有理由尝试查询 MFA,直到有必要(当它需要从 org1-admin 寻求资源时)。

由于 boto 似乎不够聪明,无法注意到帐户何时需要 MFA 进行授权,所以我需要将其编码。我的主要问题是我不确定如何自省 boto3 对象以查看是否mfa_serial 存在。

【问题讨论】:

  • 让你的程序解析config文件并在那里检查mfa_serial怎么样?
  • 这是一个选项,但如果 boto 框架已经提供了一种方法,那么它比我更喜欢做的工作。如果没有,那当然是我唯一的选择。
  • 是的,已经开始实施并且已经使用了 configparser。这有点不稳定,但它可能会起作用。不幸的是,该库尚未公开此功能,因为它显然必须解析这些文件。

标签: amazon-web-services boto3


【解决方案1】:

根据我发布的here 的问题,以下建议对我很有效:

感谢您的耐心等待。有几种不同的方法可以做到这一点, 但从boto3/botcore [原文如此] 本身,您可以使用full_config botocore 会话对象方法:

import botocore.session

session = botocore.session.Session()
config = session.full_config 

这会在您的配置文件中生成一个包含配置文件的对象。你可以 也可以使用 Python ini 解析器或 AWS CLI 的 configure get 方法。

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 2016-11-04
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多