パブリック IP を割り当てる ECS サービス

ECS タスクにパブリック IP が必要かを確認し、公開する入口と内部通信の経路を制限してください。

説明

Fargate の ECS サービスで assign_public_ip: true を使用すると、タスクのネットワークインターフェイスにパブリック IPv4 アドレスを割り当てられます。インターネットゲートウェイへの経路やセキュリティグループなどが許可していれば、タスクに直接接続できるため、直接公開する必要がないアプリケーションでは不要な公開経路を減らしてください。

パブリック IP だけでサービスへのアクセスや認証が許可されるわけではありません。内部タスクは通常プライベートサブネットに配置し、外部向けサービスが必要ならロードバランサーなどの管理された入口を使用します。

想定される影響

  • ネットワークとサービスの設定が許可していれば、タスクが外部からのスキャンや接続試行にさらされる可能性があります。
  • ロードバランサーの制御を通らない直接経路が開くと、意図したアクセス制限が回避される可能性があります。

対処方法

  • 直接公開する必要がないタスクは assign_public_ip を false に設定し、適切なプライベートサブネットとセキュリティグループを使用してください。
  • イメージの取得、ログ送信、外部サービスの呼び出しに必要な NAT 接続や、対応するプライベートエンドポイントを先に用意してください。
  • ロードバランサーとタスク間の通信を制限し、IPv6 を含む実際の経路を確認してください。新しいタスクの配備後に、動作と接続を確認してください。

例

実際のクラスター、awsvpc のタスク定義、サブネット、セキュリティグループが必要な抜粋です。二つの例ではサービス名が異なります。

変更前

yaml
- name: ECS 서비스 생성
  community.aws.ecs_service:
    state: present
    name: example-public-ip-service
    cluster: my-ecs-cluster
    task_definition: my-task-def:1
    desired_count: 2
    launch_type: FARGATE
    network_configuration:
      subnets:
        - subnet-aaaa1111
        - subnet-bbbb2222
      security_groups:
        - sg-cccc3333
      assign_public_ip: true

タスクへのパブリック IP の割り当てを要求します。実際の外部アクセスは、ルーティング、セキュリティグループ、アプリケーションの設定によって決まります。

変更後

yaml
- name: ECS 서비스 생성
  community.aws.ecs_service:
    state: present
    name: example-private-service
    cluster: my-ecs-cluster
    task_definition: my-task-def:1
    desired_count: 2
    launch_type: FARGATE
    network_configuration:
      subnets:
        - subnet-aaaa1111
        - subnet-bbbb2222
      security_groups:
        - sg-cccc3333
      assign_public_ip: false

パブリック IPv4 の割り当てを無効にしたサービスを定義します。既存サービスの公開経路を自動的に削除するものではないため、そのサービスは別途変更または廃止してください。アドレスの割り当てを無効にするだけで、すべてのネットワーク経路が隔離されるわけではありません。

参考資料