🔑

AWS CLIでECSコンテナにログインできない時の対処法

2023/02/28に公開

対象者

  • 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

今後同じエラーに遭遇したら、真っ先にこのコマンドで正しいクレデンシャルが設定されているか確認するのが良さそうだ。

Discussion