使用AWS CLI Profile时候遇到 报告”Key不存在” 的解决办法

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工作正常。