この記事は、Zennに投稿した以下の記事の再投稿になります
対象者
aws sts
で取得したクレデンシャルをaws configure
で設定したはずなのにECSコンテナにログインできない人
動作環境・前提
バージョン | |
---|---|
Mac | 12.x |
aws-cli | 2.9.21 |
経緯
以下のコマンドでMFA認証し、クレデンシャルを受け取る。
$ aws sts \
--profile dummy-profile get-session-token \
--serial-number arn:aws:iam::xxxxxxxxxxxx:mfa/dummyuser \
--token-code xxxxxx \
--output json
"Credentials": {
"AccessKeyId": "xxxxxxxxxxxxxxxx1234",
"SecretAccessKey": "xxxxxxxxxxxxxxxx1234",
"SessionToken": "xxxxxxxxxxxxxxxx1234",
"Expiration": "2023-02-23T20:24:23+00:00"
}
受け取ったクレデンシャルをconfigureにて設定
$ aws configure --profile dummy-profile
AWS Access Key ID [****************0000]:xxxxxxxxxxxxxxxx1234
AWS Secret Access Key [****************0000]: xxxxxxxxxxxxxxxx1234
Default region name [ap-northeast-1]:ap-northeast-1
Default output format [json]: json
これで準備万端。ECSコンテナにログインするために以下のコマンドを入力する。
$ aws --profile dummy-profile ecs execute-command \
--cluster dummy-ecs-cluster \
--task arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task/dummy-ecs-cluster/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
--container dummy-web-app \
--interactive \
--command "/bin/bash"
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
An error occurred (UnrecognizedClientException) when calling the ExecuteCommand operation: The security token included in the request is invalid.
あれ、エラーになった、、?
解決方法
コンソールからアクセスキーを新しく作成してそちらを設定してみたり、プロファイル名を変更してみたりしたが、原因には辿り着けなかった。
最終的に同僚に相談すると、
「一旦、~/.aws/credentials
を直接書き換えてみるのはどうですか?」
とアドバイスを貰った。なるほど、その手があったかと早速実践。
$ vim ~/.aws/credentials
上記コマンドで~/.aws/credentials
を開く。すると、驚くべきことが判明した。
なんと、先ほど設定したはずのクレデンシャルとは全く別のものが設定されていたのである。
aws configure
コマンドで書き換えたつもりになっていたが、実際には上手く書き換えられていなかったのか、、😢
[dummy-profile]
aws_access_key_id = xxxxxxxxxxxxxxxx0000
aws_secret_access_key = xxxxxxxxxxxxxxxx0000
しかも、よく見るとaws_session_token
がない。
ということで、INSERTモードにしてこのファイルを直接書き換える。
[dummy-profile]
aws_access_key_id = xxxxxxxxxxxxxxxx1234
aws_secret_access_key = xxxxxxxxxxxxxxxx1234
aws_session_token = xxxxxxxxxxxxxxxx1234
こんな感じ。
これで、もう一度ECSコンテナへのログインを試みる。
$ aws --profile dummy-profile ecs execute-command \
--cluster dummy-ecs-cluster \
--task arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task/dummy-ecs-cluster/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
--container dummy-web-app \
--interactive \
--command "/bin/bash"
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
Starting session with SessionId: ecs-execute-command-xxxxxxxxxxxxxxxxx
root@ip-00-0-00-000:/var/www/html#
ログインできた!
最後に
このことを同僚に報告すると、「たまにありますよね」とのこと。そういうもんなのか。
何にせよ、「正しく設定できている」と思い込まず早々に~/.aws/credentials
を確認していれば大慌てせず済んだ話である。
今後似たような場面に遭遇したら、ググったり人に聞いたりする前にまずは設定ファイルの確認から入るようにしようと思う。
後で知ったことだが、わざわざ~/.aws/credentials
そのものを開かずとも、以下のコマンドで現在設定されているクレデンシャルが見れるようだった。
$ aws configure list --profile dummy-profile
Name Value Type Location
---- ----- ---- --------
profile default manual --profile
access_key ****************1234 shared-credentials-file
secret_key ****************1234 shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
今後同じエラーに遭遇したら、真っ先にこのコマンドで正しいクレデンシャルが設定されているか確認するのが良さそうだ。