使用aws-vault获取凭证失败:InvalidClientTokenId错误求助
解决aws-vault exec报错InvalidClientTokenId的问题
我之前排查过类似的aws-vault问题,结合你描述的情况(密码错误会触发Mac钥匙串提示、本地配置文件确认无误),大概率是缓存的凭据失效或者角色信任配置/源凭据的隐性问题,可以按以下步骤逐一排查:
1. 清除aws-vault的本地缓存凭据
aws-vault会把生成的临时凭据存在Mac钥匙串里,如果这些凭据已经过期或者失效,即使密码正确,取出来的也是无效令牌。你可以:
- 执行命令直接清除缓存:
aws-vault clear - 或者手动清理钥匙串:打开「钥匙串访问」应用,搜索
aws-vault,删除所有相关条目,之后重新执行aws-vault exec命令,会重新生成有效的临时凭据。
2. 验证源用户凭据的有效性
你用来AssumeRole的源IAM用户(就是存在~/.aws/credentials里的用户)可能已经失效,比如Access Key被禁用/过期。可以直接用这个用户的凭据执行:
aws sts get-caller-identity --profile <你的源用户profile名>
如果这个命令报错InvalidClientTokenId,那就是源用户的密钥有问题,需要去AWS控制台重新生成Access Key并更新到本地配置文件。
3. 检查目标角色的信任关系
AWS的错误提示有时候不够精准,InvalidClientTokenId也可能是因为目标角色的信任策略没有允许你的源用户Assume它。你可以登录AWS控制台:
- 进入IAM → 角色 → 找到
role_name - 查看「信任关系」标签,确认策略里包含你的源用户ARN,比如:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/你的源用户名" }, "Action": "sts:AssumeRole" } ] }
如果没有这个条目,需要添加进去。
4. 尝试移除--no-session参数
--no-session参数会让aws-vault直接使用长期凭据(如果角色允许的话),但有些角色配置了必须使用会话才能Assume。你可以试试不带这个参数执行:
aws-vault exec --debug role_name
如果成功的话,说明你的目标角色不允许无会话的AssumeRole请求,需要去掉这个参数使用。
内容的提问来源于stack exchange,提问作者mrc
相关产品推荐
相关产品推荐

