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