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

时间:2018-06-07 21:18:55

标签: python amazon-web-services boto boto3

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

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

根据文档hereassume_role_with_saml调用不需要使用AWS安全凭据;所有auth信息都包含在调用本身的参数中。尽管如此,如果我设置了与身份验证相关的AWS_环境变量,则对boto3.client()的调用会立即尝试使用它们进行身份验证。通常,我设置了AWS_PROFILE,并且我运行此代码的原因是因为命名的配置文件的安全令牌已过期,因此调用失败,我必须取消设置{{1}然后再试一次。

我当然可以在致电AWS_PROFILE之前手动浏览os.environ查找和删除相关变量,但我想知道是否有更清晰的方式说& #34;嘿,Boto,只是给我一个STS客户端对象而不试图验证任何东西,好吗?"

2 个答案:

答案 0 :(得分:1)

通过检查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)

现在接受我自己的答案,但如果有人有更好的想法,我会全力以赴。

答案 1 :(得分:0)

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))