はじめに
ECS上でタスクを起動しようとした際に、IAMロール関連のエラーが発生することがあります。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
本記事では、実際に遭遇した以下のエラーに対する原因と解決策を、備忘録としてまとめます。
エラーメッセージ
service aa failed to launch a task with (error ECS was unable to assume the role 'arn:aws:iam::xxx:role/ecsTaskExecutionRole' that was provided for this task. Please verify that the role being passed has the proper trust relationship and permissions and that your IAM user has permissions to pass this role.).
接続エラーの原因と解決策
このエラーは、Amazon ECS がタスクを起動しようとした際に、指定された IAM ロール(ecsTaskExecutionRole)を引き受けることができなかったことが原因です。
原因
-
信頼関係(Trust Relationship)の設定ミス
- ecs.amazonaws.com がロールを引き受けられるようになっていない
-
必要なポリシーがアタッチされていない
- AmazonECSTaskExecutionRolePolicy などが付与されていない
-
IAMユーザーに iam:PassRole 権限がない
- IAMユーザーが ecsTaskExecutionRole を渡す許可がない
解決方法
1. 信頼関係を確認・修正
IAM ロール ecsTaskExecutionRole
の信頼関係タブを以下のように設定:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
2. 必要なポリシーをアタッチ
以下のポリシーを付ける:
AmazonECSTaskExecutionRolePolicy
3. iam:PassRole 権限を追加
IAMユーザーまたは使用中のロールに以下のようなポリシーを追加:
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::xxx:role/ecsTaskExecutionRole"
}
まとめ
このエラーは ECS タスクの起動において、IAM ロールの信頼関係と権限が正しく構成されていないと発生します。以下の3点をチェックすることで解決できるケースがほとんどです:
- ecs-tasks.amazonaws.com を信頼できるエンティティに設定
- 必要な IAM ポリシー(AmazonECSTaskExecutionRolePolicy)のアタッチ
- IAM ユーザー/ロールに iam:PassRole 権限の付与
ECSのデプロイエラーはIAMに起因することが多いため、慌てずにロール設定とポリシーを順番に確認してみてください!