Windows 10下AWS CLI报InvalidAccessKeyId错误排查求助
我帮你梳理几个容易被忽略的细节,这些都是我碰到过很多用户踩过的坑:
环境变量优先级覆盖了配置文件
Windows系统中,AWS CLI会优先读取环境变量里的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,而不是~/.aws目录下的配置文件。你提到配置了session key作为环境变量,有可能不小心把主access key也设成了环境变量,而且值和你验证的有效密钥不一致。
先打开命令提示符,运行echo %AWS_ACCESS_KEY_ID%和echo %AWS_SECRET_ACCESS_KEY%检查环境变量里的密钥值。如果不对,要么修正环境变量,要么暂时删除这两个环境变量,再测试aws s3 ls(这是ListBuckets的快捷命令)。混淆了config和credentials文件的用途
AWS CLI有两个核心配置文件:~/.aws/credentials专门用来存access key、secret key和session token,而~/.aws/config负责region、profile这类配置。很多人会把密钥写到config里,但格式不对的话CLI根本读不到。
正确的credentials文件格式应该是这样的:[default] aws_access_key_id = 你的有效Access Key aws_secret_access_key = 你的有效Secret Key aws_session_token = 你的Session Token(如果用临时凭证的话)而config文件只需要保留region等配置:
[default] region = 你的目标Region output = json检查下你的密钥是不是放错了文件,格式有没有问题。
临时凭证的三个值必须配套
如果你用的是session key这类临时凭证,必须同时提供aws_access_key_id、aws_secret_access_key和aws_session_token,而且这三个值是一一对应的有效组合。不能只配置session token的环境变量,却用配置文件里的主密钥,这样肯定会出错。要么把三个值都放到credentials文件里,要么都设为环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN)。Windows文件的隐藏字符或编码问题
有时候在Windows下用记事本编辑.aws里的文件,会不小心引入UTF-8 BOM或者密钥前后的空格,导致CLI读取密钥时出错。你可以用VS Code打开文件,开启“显示控制字符”的选项,检查密钥有没有多余的空格或不可见字符;或者用记事本另存为,选择编码为“ANSI”,再试试。多profile场景下用错了默认配置
如果你配置了多个AWS profile,但测试时没指定--profile参数,CLI会默认用defaultprofile。可以运行aws configure list --profile 你的Profile名检查指定profile的配置是否正确,然后测试时加上--profile参数,比如aws s3 ls --profile 你的Profile名。
最后可以做个快速验证:直接在命令行里指定正确的所有凭证(临时测试用,别在生产环境这么干):
aws s3 ls --region 你的Region --aws-access-key-id 有效Access Key --aws-secret-access-key 有效Secret Key --aws-session-token 有效Session Token
如果这个命令能成功,说明你的凭证是有效的,问题肯定出在CLI的配置读取环节,回到上面的点排查就行。
内容的提问来源于stack exchange,提问作者Govind Kalyankar

