如何在没有任何身份验证尝试的情况下获得 boto3 STS 客户端?

How to get a boto3 STS client without any authentication attempt?

我正在使用此代码通过 SAML 身份验证承担 Amazon Web Services 角色:

client = boto3.client('sts', region_name = region)
token = client.assume_role_with_saml(role, principal, saml)

如记录 here 所述,assume_role_with_saml 调用 不需要使用 AWS 安全凭证;所有身份验证信息都包含在调用本身的参数中。尽管如此,如果我设置了与身份验证相关的 AWS_ 环境变量,对 boto3.client() 的调用会立即尝试使用它们进行身份验证。通常,我有 AWS_PROFILE 设置,而我 运行 这段代码的原因是因为命名配置文件的安全令牌已过期,所以调用失败,我必须取消设置 AWS_PROFILE 和再试一次。

我当然可以在调用 boto3.client() 之前手动通过 os.environ 查找和删除相关变量,但我想知道是否有任何更简洁的方式来表达 "Hey, Boto, just give me an STS client object without trying to authenticate anything, OK?"

通过检查 boto3 和 botocore 代码,我找到了一个解决方案,但我不确定它是否比取消设置环境变量有所改进:

import boto3, botocore
bs = botocore.session.get_session({ 'profile': ( None, ['', ''], None, None ) })
bs.set_credentials('','','')
s = boto3.session.Session(botocore_session = bs)
client = s.client('sts', region_name = region)

暂时接受我自己的回答,但如果有人有更好的主意,我会洗耳恭听。

来自 this response on GitHub,以下是设置不会尝试使用 IAM 凭据签署传出请求的客户端的方法:

import boto3                      
from botocore import UNSIGNED     
from botocore.config import Config

client = boto3.client('sts', region_name=region, config=Config(signature_version=UNSIGNED))