由于保密原因,我不能提供太多细节,但我会尽力说明。
我有一个 AWS 角色,该角色将用于调用 API,并且具有正确的权限。 我正在使用 Boto3 来尝试担任该角色。
在我的 python 代码中,我有
sts_client = boto3.client('sts')
response = sts_client.assume_role(
RoleArn="arn:aws:iam::ACCNAME:role/ROLENAME",
RoleSessionName="filler",
)
使用此代码,我收到此错误: "调用 AssumeRole 操作时出错 (InvalidClientTokenId(:请求中包含的安全令牌无效。">
任何帮助将不胜感激。谢谢
当你以这种方式构造客户端时,例如sts_client = boto3.client('sts')
,它使用 boto3DEFAULT_SESSION
,它从您的~/.aws/credentials
文件中提取(可能在其他地方;我没有进一步调查(。
当我遇到这种情况时,aws_access_key_id
、aws_secret_access_key
和aws_session_token
的值已经过时了。在默认配置文件中更新它们(或只是在client
调用中直接覆盖它们(解决了这个问题:
sts_client = boto3.client('sts',
aws_access_key_id='aws_access_key_id',
aws_secret_access_key='aws_secret_access_key',
aws_session_token='aws_session_token')
顺便说一句,我发现启用流日志记录很有帮助,并使用输出深入研究 boto3 源代码并找到问题:boto3.set_stream_logger('')
.