【发布时间】: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。这有点不稳定,但它可能会起作用。不幸的是,该库尚未公开此功能,因为它显然必须解析这些文件。