使用AWS CLI获取会话令牌遇ExpiredToken错误求助
解决AWS CLI执行
get-session-token时的ExpiredToken错误 清理过期的现有凭证
当前CLI缓存的过期凭证会干扰get-session-token请求,先排查并清除:- 执行
aws configure list查看当前生效的凭证信息,确认是否存在过期的aws_access_key_id、aws_secret_access_key或aws_session_token。 - 删除对应配置文件中的过期条目:Linux/macOS路径为
~/.aws/credentials,Windows路径为C:\Users\<你的用户名>\.aws\credentials,直接移除相关的凭证行即可。
- 执行
使用IAM长期密钥执行命令
get-session-token必须依赖IAM用户的长期访问密钥(而非临时会话凭证)调用,确保当前CLI使用的是有效长期密钥:- 重新配置长期密钥:执行
aws configure,输入有效的aws_access_key_id和aws_secret_access_key(无需输入session token),完成后再运行目标命令。 - 临时测试可直接在命令中指定长期密钥(不推荐长期使用):
aws sts get-session-token --serial-number arn:aws:iam::<Account>:mfa/**** --token-code <MFA CODE> --aws-access-key-id <你的长期Access Key> --aws-secret-access-key <你的长期Secret Key>
- 重新配置长期密钥:执行
校验MFA相关参数有效性
- 确认MFA设备ARN正确:替换命令中的
<Account>为你的AWS账号ID,****为实际的MFA设备名称(通常是你的IAM用户名)。 - 确保
<MFA CODE>是当前30秒内的有效令牌,避免输入已过期的6位验证码。
- 确认MFA设备ARN正确:替换命令中的
检查环境变量中的过期凭证
AWS CLI会优先读取环境变量中的凭证,若之前设置过AWS_SESSION_TOKEN且已过期,会直接导致请求失败:- Linux/macOS下执行
echo $AWS_SESSION_TOKEN,若有输出则用unset AWS_SESSION_TOKEN清除。 - Windows命令提示符下执行
set AWS_SESSION_TOKEN=清除该环境变量。
- Linux/macOS下执行
内容的提问来源于stack exchange,提问作者Nikul Panchal
相关产品推荐
相关产品推荐

