首页 > 解决方案 > 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>

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

标签: amazon-web-servicesboto3

解决方案


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

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

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

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

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


推荐阅读