我使用此代码通过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安全凭据;所有auth信息都包含在调用本身的参数中。尽管如此,如果我设置了与身份验证相关的AWS_
环境变量,则对boto3.client()
的调用会立即尝试使用它们进行身份验证。通常,我设置了AWS_PROFILE
,并且我运行此代码的原因是因为命名的配置文件的安全令牌已过期,因此调用失败,我必须取消设置{{1}然后再试一次。
我当然可以在致电AWS_PROFILE
之前手动浏览os.environ
查找和删除相关变量,但我想知道是否有更清晰的方式说& #34;嘿,Boto,只是给我一个STS客户端对象而不试图验证任何东西,好吗?"
答案 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))