1、故障现象
在AWS CLI下,执行aws s3 ls命令的时候,报告如下错误。
An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.
经过测试,执行其他CLI命令也会遇到相同的错误。
2、尝试不同的解决办法
在本机上使用了AWS Profile,配置了多个Profile和区域的支持,可以通过导出环境变量快速切换区域。参考文档见这里。
使用Profile切换到某特定区域后有效,但仅在另外的区域无效,且会报告如上错误。
尝试一下办法后未能解决:
- 重装AWS CLI,使用brew instlal awscli重新安装新版本未能解决;
- 使用AWS官方下载MacOS下的pkg格式的安装包重新安装,问题未能解决;
- 清空 ~/.aws/ 目录下的config文件和credential文件,并重新配置Access Key未能解决;
- 在IAM上更换新的Access Key,未能解决。
3、使用configure list排查问题
执行如下命令。
aws configure list
返回结果如下。
Name Value Type Location
---- ----- ---- --------
profile sgp manual --profile
access_key ****************SGVW shared-credentials-file
secret_key ****************BmZz shared-credentials-file
region cn-northwest-1 env ['AWS_REGION', 'AWS_DEFAULT_REGION']
通过如上结果,可以发现当前使用的Profile和Access_key是匹配的,但是与Region的名称是不匹配的。
现在profile切换,执行如下命令。
export AWS_PROFILE=us-east-1
这个命令将切换cli使用的profile到us-east-1。具体配置profile的方法,参考文档见这里。
切换后,再次执行检查CLI配置,执行如下命令。
aws configure list
查看输出结果。
Name Value Type Location
---- ----- ---- --------
profile us-east-1 manual --profile
access_key ****************SGVW shared-credentials-file
secret_key ****************BmZz shared-credentials-file
region cn-northwest-1 env ['AWS_REGION', 'AWS_DEFAULT_REGION']
通过以上结果,可以发现,虽然profile切换了,但是region依然锁定在了”cn-northwest-1″并没有变化。并且在Type类型中提示,这个参数是通过env环境变量’AWS_REGION’, ‘AWS_DEFAULT_REGION’加载生效的。
接下来排查为何会有这个环境变量锁死不能被切换。检查 ~/.zshrc 的配置,在其中找到了如下一段:
export AWS_DEFAULT_REGION=cn-northwest-1
export AWS_REGION=cn-northwest-1
经确认,这两条是在执行EKS GCR实验过程中的添加到环境变量配置文件中的。这两条的优先级更高,因此将覆盖掉 ~/.aws/config 配置文件中的。将这两条注释掉,保存退出。
执行如下命令清空环境变量。
unset AWS_REGION
unset AWS_DEFAULT_REGION
再次执行加载profile的命令。
export AWS_PROFILE=sgp
再次执行查看配置的命令。
aws configure list
返回结果如下。
Name Value Type Location
---- ----- ---- --------
profile sgp manual --profile
access_key ****************SGVW shared-credentials-file
secret_key ****************BmZz shared-credentials-file
region ap-southeast-1 config-file ~/.aws/config
从上文的返回结果中,可以看到region的Type已经变成了”config-file”,也就是从配置文件中夹在,加载的Location是”~/.aws/config”。
由此,AWS CLI工作正常。