Amazon ECS Exec Checkerでもエラーが出ない場合はネットワーク疎通性も確認しましょう

エンドポイントへの接続をブロックしていないかセキュリティグループ等も確認しましょう
2022.10.11

アノテーション・テクニカルサポートチームの hato です。

「Amazon ECS Exec が実行できません。Amazon ECS Exec Checker も試しましたがエラーはありません」というお問い合わせを頂いた際に、サポート担当者が確認する内容と調査方法をご紹介します。

デバッグ用にAmazon ECS Exec を使用 - Amazon Elastic Container Service

Amazon ECS Exec チェッカーを使用して検証する

Amazon ECS Exec チェッカー スクリプトを使用すると、Amazon ECS クラスターとタスクが ECS Exec 機能を使用するための前提条件を満たしていることを確認および検証できます。

確認すること

ネットワーク疎通性を確認します。

2022年10月時点の挙動として、Amazon ECS Exec Checker はエンドポイントへのネットワーク疎通性までは確認していないため、セキュリティグループ等でエンドポイントへの通信を遮断し、エラーが起きている可能性が考えられます。

そのため、Amazon ECS Exec Checker でもエラーが見つけられない場合は、ECS タスクや(設定している場合)VPC エンドポイントのセキュリティグループ等を確認し、ネットワーク疎通性に問題がないか確認しましょう。

やってみた

VPC エンドポイントを使用している環境で、VPC エンドポイントのセキュリティグループでインバウンド通信を許可していない場合の例となります。

エラーの状況

ECS Exec は次のようなエラーになります。

$ aws ecs execute-command --cluster hato-cluster \
    --task 11beb0f844354e7da8e88100f0a0da81 \
    --container hato-container \
    --interactive \
    --command "/bin/sh"

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.


Starting session with SessionId: ecs-execute-command-0123456789abcdefg


SessionId: ecs-execute-command-0123456789abcdefg : Your session timed out due to inactivity and has been terminated.

Amazon ECS Exec Checker ではエラー(赤色)がない状況です。

$ ./check-ecs-exec.sh hato-cluster  11beb0f844354e7da8e88100f0a0da81
-------------------------------------------------------------
Prerequisites for check-ecs-exec.sh v0.7
-------------------------------------------------------------
  jq      | OK (/opt/homebrew/bin/jq)
  AWS CLI | OK (/usr/local/bin/aws)

-------------------------------------------------------------
Prerequisites for the AWS CLI to use ECS Exec
-------------------------------------------------------------
  AWS CLI Version        | OK (aws-cli/2.7.18 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off)
  Session Manager Plugin | OK (1.2.339.0)

-------------------------------------------------------------
Checks on ECS task and other resources
-------------------------------------------------------------
Region : ap-northeast-1
Cluster: hato-cluster
Task   : 11beb0f844354e7da8e88100f0a0da81
-------------------------------------------------------------
  Cluster Configuration  | Audit Logging Not Configured
  Can I ExecuteCommand?  | arn:aws:iam::123456789012:user/hato
     ecs:ExecuteCommand: allowed
     ssm:StartSession denied?: allowed
  Task Status            | RUNNING
  Launch Type            | Fargate
  Platform Version       | 1.4.0
  Exec Enabled for Task  | OK
  Container-Level Checks | 
    ----------
      Managed Agent Status
    ----------
         1. RUNNING for "exec-container"
    ----------
      Init Process Enabled (bastion-fargate-taskdef:4)
    ----------
         1. Disabled - "exec-container"
    ----------
      Read-Only Root Filesystem (bastion-fargate-taskdef:4)
    ----------
         1. Disabled - "exec-container"
  Task Role Permissions  | arn:aws:iam::123456789012:role/bastion-fargate
     ssmmessages:CreateControlChannel: allowed
     ssmmessages:CreateDataChannel: allowed
     ssmmessages:OpenControlChannel: allowed
     ssmmessages:OpenDataChannel: allowed
  VPC Endpoints          | 
    Found existing endpoints for vpc-abcd123456789:
      - com.amazonaws.ap-northeast-1.ecr.dkr
      - com.amazonaws.ap-northeast-1.s3
      - com.amazonaws.ap-northeast-1.ecr.api
      - com.amazonaws.ap-northeast-1.logs
      - com.amazonaws.ap-northeast-1.ssmmessages
  Environment Variables  | (bastion-fargate-taskdef:4)
       1. container "exec-container"
       - AWS_ACCESS_KEY: not defined
       - AWS_ACCESS_KEY_ID: not defined
       - AWS_SECRET_ACCESS_KEY: not defined

ネットワーク疎通性を確認する

ECS タスクからエンドポイントまでのセキュリティグループやネットワーク ACLを順に確認しても良いですが、ネットワーク疎通性をチェックできる Reachability Analyzer が提供されているため、今回はこちらを使用します。

Reachability Analyzer を使用して VPC 接続の問題をトラブルシューティングする

Reachability Analyzer は起点と終点(どこから、どこまで)を指定する必要があります。
まず、起点となる ECS タスクの ENI を確認します。(例:eni-0daa14330c594083d

同様に終点となる VPC エンドポイントの ID を確認します。(例:vpce-09a6795e4ecd6db04

Reachability Analyzer のパス設定にそれぞれの情報を指定して「パスの作成と分析」をクリックします。

ネットワーク疎通性がないことが確認できました。

疎通性がない原因は「説明」セクションからも確認できますが、その下の「パスの詳細」からも確認できます。
個人の好みですが「パスの詳細」の方が経路も含めて確認できるのでおすすめです。

VPC エンドポイントのインバウンドルールに一致するルール(許可)がないことが確認できます。

リンクをクリックしてインバウンドルールの許可を追加すると、Amazon ECS Exec が実行できるようになります。

最後に

サポートにお問い合わせいただく際はお試し頂いた内容と結果を添えると、効率的かつ迅速な解決が期待できますのでご協力をお願いいたします。

技術的なお問い合わせに関するガイドライン | AWS サポート

すでに試した対応策があればご教示ください

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。