ECS タスク定義のネットワークモードの確認

ECS の実行環境に対応するネットワークモードを選び、タスクに必要な通信だけを許可してください。

説明

ECS タスク定義の network_mode は、タスクのネットワーク接続方法を定めます。Fargate では awsvpc が必須です。EC2 タスクでは、OS やワークロードに応じてほかのモードも使用でき、外部ネットワーク通信を無効にする none などが常に危険なわけではありません。

awsvpc はタスクごとにネットワークインターフェイスを提供し、タスク単位でセキュリティグループを適用できるようにします。このモードでも、セキュリティグループ、サブネット、ルーティングを適切に制限する必要があります。

想定される影響

  • 実行環境が対応していないモードを使うと、タスクの登録や実行に失敗する可能性があります。
  • 必要以上の通信を許可すると、タスクやホストへのアクセス範囲が想定より広くなる可能性があります。

対処方法

  • Fargate では network_mode: awsvpc を使用してください。EC2 ではホスト共有やポートマッピングの要件を確認し、ワークロードに合うモードを選んでください。
  • awsvpc を使うサービスには、適切なサブネットと最小権限のセキュリティグループを指定してください。
  • 新しいタスク定義のリビジョンをサービスに適用し、ポート、ロードバランサーとの接続、必要な外向き通信を確認してください。

例

ネットワークモードを比較する抜粋です。標準の NGINX イメージの待ち受けポートに合わせ、ポートマッピングを 80 にしています。サービスのサブネット、セキュリティグループ、実行ロールなどは別途構成してください。

変更前

yaml
- name: Task Definition 생성
  community.aws.ecs_taskdefinition:
    family: nginx
    containers:
      - name: nginx
        essential: true
        image: nginx
        portMappings:
          - containerPort: 80
            hostPort: 80
    launch_type: FARGATE
    cpu: 512
    memory: 1024
    state: present
    network_mode: default

Linux では default は bridge として扱われ、この例の Fargate 構成とは互換性がありません。

変更後

yaml
- name: Task Definition 생성
  community.aws.ecs_taskdefinition:
    family: nginx
    containers:
      - name: nginx
        essential: true
        image: nginx
        portMappings:
          - containerPort: 80
            hostPort: 80
    launch_type: FARGATE
    cpu: 512
    memory: 1024
    state: present
    network_mode: awsvpc

Fargate に必要な awsvpc を使用します。タスク定義を登録するだけで既存サービスが新しいリビジョンを使うわけではないため、サービスの配備も確認してください。

参考資料