【AWS備忘録】ecs-cliにて「UnrecognizedClientException: The security token included in the request is invalid.」が発生
こんにちはこぐまです。
AWS備忘録です。
ecs-cliコマンドを利用していたとある処理が、先日以下のエラーを出力しました。
[ec2-user@ip-xxx-xxx AAA]$ ecs-cli compose ps
ERRO[0000] Error listing tasks
error="UnrecognizedClientException: The security token included in the request is invalid.
\n\tstatus code: 400, request id: XXXXX"
request="{xxxxxxx}"
FATA[0000] UnrecognizedClientException: The security token included in the request is invalid.
status code: 400, request id: XXXXX
UnrecognizedClientException: The security token included in the request is invalid.\n\tstatus code: 400, request id: XXXXX"
今日はその備忘録です。
結論
1.「AWS CLI」と「ecs-cli」のクレデンシャル情報が異なっていた かつ
2.削除したアクセスキーの情報を参照していた。
メモ解説
AWSサービスの操作をEC2インスタンスなどからコマンドで実行する方法として「AWS CLI」があるかと思いますが、特にECSの操作に特化したCLIとして「ecs-cli」なるものがあります。
しかし残念ながら現在ではあまりアクティブな開発はされていないようです。(代わりにAWS Copilot CLIというものが利用されるようになっています。)また、ECS周りの操作はAWSCLI側でも対応できる(aws ecs list-services等)ので、ますます存在感が薄れている印象があります。
EC2インスタンス上で「ecs-cliコマンド」を実行するには、AWSCLIと同様に認証情報(アクセスキー、シークレットアクセスキー)が必要です。
そして、以下の特徴があります。
ecs-cliは独自の認証情報を持つことができます。これはコマンド実行ユーザのホームディレクトリ(/home/ec2-userなど)配下に「.ecs/credentials」として定義することができます。定義の記載方法はAWSCLIの時と同じです。
★AWSCLI認証情報の定義例(~/.aws/credentials)
[default]
aws_access_key_id = XXXXXXX
aws_secret_access_key = YYYYYY
★ecs-cli認証情報の定義例(~/.ecs/credentials)
version: v1
default: test
ecs_profiles:
test:
aws_access_key_id: XXXXXXX
aws_secret_access_key: YYYYYYY
AWSCLIとecs-cliには別々の認証情報を記載することは可能ですが、記載した認証情報に相当するアクセスキーがIAM側で定義されていない場合、以下エラーとなります。
背景
「TrustedAdvisor」にて「ローテーションされていない古いアクセスキーが存在します」という警告が出ていたので、アクセスキーを新規作成、古いアクセスキーを削除しました。
AWSCLI側の認証情報(.aws/credentials)は新しいアクセスキーを利用するように変更したのですが、ecs-cli側にも認証情報がセットされていることを失念していて、そちらを変更しないまま旧アクセスキーを削除したので上記のエラーに遭遇しました。
対応として、実行ユーザ配下の「.ecs/credentials」ファイルを参照しないようにリネームしました。(「credentials」→「_credentials.back」など)
そうすると、「./aws/credentials」ファイルを参照するようになり、新しいアクセスキー情報にてコマンドが正常終了することを確認できました。
対処としては済んだのですが、今後の対応としては、ecs-cliコマンドを利用している部分をAWSCLI側のコマンド(aws ecs ・・・)に統一することを検討したいと思います。そのうえで、IAMロール(EC2インスタンスプロファイル)を利用することですね。IAMロールの場合はいちいちアクセスキーを更新する作業が不要となります。なぜIAMロールが便利なのか、実体験で学ぶことができました。
読んで下さってありがとうございました!