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工具正在查询org1-admin
资源,则CLI工具需要能够向CLI管理员询问其MFA令牌,然后仅为该帐户扮演sts角色。没关系。问题是,在必要的时候(当它需要从org1管理员那里寻求资源时(,脚本没有理由尝试查询MFA。
由于boto似乎不够智能,无法注意到帐户何时需要MFA进行授权,我需要将其编码。我的主要问题是,我真的不知道如何内省boto3对象以查看mfa_serial
是否存在。
根据我在这里发布的问题,建议了以下内容,对我来说效果很好:
感谢您的耐心等待。有几种不同的方法可以做到这一点,但从
boto3/botcore
(原文如此(本身来看,您可以使用full_config
botocore会话对象方法:
import botocore.session
session = botocore.session.Session()
config = session.full_config
它在配置文件中生成一个包含配置文件的对象。你可以也可以使用类似Python ini解析器或AWS CLI的configure get方法。