boto3内省用户aws配置以确定配置文件中的mfa_saserial



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_configbotocore会话对象方法:

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

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

最新更新