AWS凭证重配后仍提示InvalidAccessKeyId问题求助
核心原因梳理
AWS CLI的凭证读取有严格优先级,你修改环境变量后仍报错,大概率是以下几个细节没处理到位:
当前Shell会话没加载新的环境变量
修改.bash_aws后,旧的环境变量还在当前终端会话里生效,新配置没被读取。执行下面的命令让更改立即生效:source ~/.bash_aws嫌麻烦的话直接关掉当前终端,重新开一个新窗口就行,新会话会自动加载更新后的配置。
其他Shell配置文件残留旧凭证
除了.bash_aws,Shell还会从.bashrc、.bash_profile、.profile(如果用Zsh就是.zshrc)这些文件加载环境变量。去这些文件里搜一下AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,要是有旧配置就删掉,然后重新加载对应文件(比如source ~/.bashrc)。配置文件名称拼写不一致
你说aws configure list-profiles显示的是mapichanach,但credentials里配置的是markovich——这俩拼写不一样,AWS CLI根本找不到对应的凭证,只能 fallback 用之前的旧值。要么手动改~/.aws/credentials和~/.aws/config里的配置段名称,要么用命令修正:aws configure rename-profile mapichanach markovich存在更高优先级的凭证来源
AWS CLI的凭证优先级是:命令行参数 > 环境变量 >~/.aws/credentials> 临时角色凭证。检查你执行aws s3 ls时有没有带旧的密钥参数,或者之前用过aws sts assume-role这类命令生成的临时凭证还在缓存里。可以清掉缓存试试:rm -rf ~/.aws/cli/cache测试时没指定正确的配置文件
如果新凭证存在markovich配置里,执行命令时没加--profile markovich,CLI会默认用default配置。要么检查default的凭证是否正确,要么执行命令时明确指定配置文件:aws s3 ls --region us-east-1 --profile markovich
内容的提问来源于stack exchange,提问作者Richard Rublev

