ECS Exec の有効化で update-service が InvalidParameterException で失敗するときの対処方法

2022.05.09

この記事は公開されてから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.