パブリックIPが割り当てられたECSサービス

直接公開する必要がないECSタスクには、パブリックIPを割り当てないでください。

説明

FargateのECSサービスにパブリックIPを割り当てると、ルーティングとセキュリティグループで許可されている場合、インターネットからタスクにアクセスできます。サービスに必要な通信に応じて、割り当ての要否を判断してください。

想定される影響

意図しない直接アクセス経路ができると、タスクが外部からのスキャンや攻撃にさらされるおそれがあります。

対処方法

直接公開する必要がなければ、assign_public_ip = falseを設定し、プライベートサブネットに配置してください。必要な公開はALB/NLB経由とし、イメージのダウンロードなどの送信通信にはNATやVPCエンドポイントを構成してください。

例

以下は、同じサービスでパブリックIPの割り当てを無効にする例です。サブネットとセキュリティグループのIDは実際の値に置き換え、ルーティングは別途設定してください。

変更前

hcl
resource "aws_ecs_service" "example" {
  name            = "example_service_dev"
  cluster         = aws_ecs_cluster.example_cluster.id
  task_definition = aws_ecs_task_definition.example_task.arn
  desired_count   = 2
  launch_type     = "FARGATE"

  network_configuration {
    assign_public_ip = true
    subnets          = ["subnet-0123456789abcdef0", "subnet-0fedcba9876543210"]
    security_groups  = ["sg-0123456789abcdef0"]
  }
}

変更後

hcl
resource "aws_ecs_service" "example" {
  name            = "example_service_dev"
  cluster         = aws_ecs_cluster.example_cluster.id
  task_definition = aws_ecs_task_definition.example_task.arn
  desired_count   = 2
  launch_type     = "FARGATE"

  network_configuration {
    assign_public_ip = false
    subnets          = ["subnet-0123456789abcdef0", "subnet-0fedcba9876543210"]
    security_groups  = ["sg-0123456789abcdef0"]
  }
}

参考資料