ググっても事例見あたらず、トラシューでめっちゃ格闘してしまったのでメモ。
TL;DR
AWS CLIにアクセスキーを設定してもなぜか権限エラーになってしまうときは、awsコマンド実行端末に意図せぬ環境変数がセットされてしまっていることが原因かも?
起こったこと
AWS CLIの初期設定では aws configure
コマンドでアクセスキー等を設定できる。
しかし、正しい権限を付与したIAMユーザーのアクセスキーをちゃんと設定したはずなのに、何度やってもawsコマンド操作が権限エラーになってしまった。
$ 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.
試したこと
AWS CLI設定の確認コマンドを実行。
$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************4G6N env
secret_key ****************T/DQ env
region ap-northeast-1 env ['AWS_REGION', 'AWS_DEFAULT_REGION']
どうもアクセスキーとシークレットキーが aws configure
で設定したはずのものと異なっている。
続いて、AWS CLIの設定ファイルを確認。
$ cat ~/.aws/config
[default]
region = ap-northeast-1
output = json
$ cat ~/.aws/credentials
[default]
aws_access_key_id = ****************DDTS
aws_secret_access_key = ****************2/Lf
こちらは aws configure
で設定したとおりの内容。
これがうまく読み込まれていない模様。
わかったこと
どうも自分のMacにはAWS CLI関連の環境変数がローカルに直接設定されていた模様。そのために .aws
ディレクトリー内のコンフィグが読み込まれず、環境変数が優先して参照されてしまっていたことが判明。
※過去にAWS CLIを使う際にネット記事を見ながらガチャガチャ環境変数をいじってしまっていたものと思われる。。
以下を実施することで本件解決!
$ unset AWS_PROFILE
$ unset AWS_DEFAULT_PROFILE
$ unset AWS_ACCESS_KEY_ID
$ unset AWS_SECRET_ACCESS_KEY
$ unset AWS_DEFAULT_REGION
解消後の設定確認コマンド結果は以下のようになった。
aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************DDTS shared-credentials-file
secret_key ****************2/Lf shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
おまけ
後日、新たにターミナルを立ち上げ直すと事象再発。
どうもzshのプロファイルに直接、AWS CLI用の環境変数を追記してしまっていた模様。
$ open ~/.zshrc
上記コマンドでプロファイルを開き、当該処理を削除してターミナル再起動すれば一件落着。