
ECS Exec の有効化で update-service が InvalidParameterException で失敗するときの対処方法
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
ECS で稼働しているコンテナのデバックのため、AWS公式ドキュメントを参考に ECS Exec の有効化を行なっています。既存の ECS サービスのためupdate-serviceでECS Execの有効化を行なったところ、InvalidParameterExceptionで失敗します。なぜでしょうか?
$ aws ecs update-service \
    --cluster hato-cluster \
    --service hato-exec-Service \
    --enable-execute-command
An error occurred (InvalidParameterException) when calling the UpdateService operation: The service couldn't be updated because a valid taskRoleArn is not being used. Specify a valid task role in your task definition and try again.
どう対応すればいいの?
タスクロールのアクセス許可をご確認ください。
ECS サービスに対して ECS Exec を有効にするには、次のアクセス許可が必要です。
{
   "Version": "2012-10-17",
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}
アクセス許可は、ECS サービスに設定したタスク定義のタスクロールを通して付与する必要があり、権限が付与されていない場合、update-serviceコマンドはInvalidParameterExceptionで失敗します。
※アクセス許可が必要になるのは、ECS タスクの起動時や ECS Exec の接続タイミングではありませんのでご注意ください。
ECS サービスのタスクロールを確認する方法
ECS コンソールを開き、「クラスター」をクリック

確認したい ECS サービスが含まれる ECS クラスターをクリック

確認したい ECS サービスをクリック

タスク定義をクリック

タスクロールが表示されます。クリックすると IAM ロールの詳細画面に遷移します。

タスクロール:なし
タスクロールは必須項目ではないため、設定されていない場合があります。その場合「なし」と表示されます。
ECS Exec を有効にする場合はタスクロール(IAMロール)が必要なため、まずはタスクロールの設定からお試しください。

参考資料
The ECS Exec feature requires a task IAM role to grant containers the permissions needed for communication between the managed SSM agent (execute-command agent) and the SSM service.











