Boto3会话get_credentials()未返回令牌



我的应用程序需要使用AWS v4身份验证,并且我能够更早地检索令牌。现在它返回None:

session = boto3.Session()
credentials = session.get_credentials().get_frozen_credentials()
ACCESS_KEY_ID = credentials.access_key
ACCESS_SECRET_KEY = credentials.secret_key
SESSION_TOKEN = credentials.token # Not working
region = session.region_name
print(f'SESSION_TOKEN: {SESSION_TOKEN}')

输出:

SESSION_TOKEN: None

以下是我的本地配置文件的内容:

$ cat ~/.aws/credentials
[default]
aws_access_key_id = <DEFAULT_ACCESS_KEY_ID>
aws_secret_access_key = <DEFAULT_SECRET_ACCESS_KEY>

原因是什么?我如何检索令牌?

原因是您没有可用的凭据来源。

当您调用Session.get_credentials()时,它会尝试从一系列源加载凭据,例如$HOME/.aws中的配置文件或EC2实例角色。

当您能够检索令牌时,您正在支持其中一个方法的环境中运行——很可能是EC2实例或Lambda函数。当你现在尝试这样做的时候——可能是在你的个人电脑上——你没有。

解决此问题的方法是按照上面的链接在当前环境中配置凭据。

使用凭据时,请注意并非所有凭据源都使用安全令牌。你应该为任何一种情况做好准备。

最新更新