説明
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 を使用します。タスク定義を登録するだけで既存サービスが新しいリビジョンを使うわけではないため、サービスの配備も確認してください。