ECSクラスターにおけるContainer Insightsの有効化について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、ECSクラスターにおいてContainer Insightsが有効化されていない状態について、リスクと対策を解説します。

ポリシーの説明
Amazon ECS の Security Hub コントロール – AWS Security Hub
このコントロールは、ECS クラスターが Container Insights を使用しているかどうかをチェックします。クラスターで Container Insights がセットアップされていない場合、このコントロールは失敗します。
リスク
Amazon Elastic Container Service (ECS) は、コンテナ化されたアプリケーションを大規模に実行、停止、管理できるフルマネージドなコンテナオーケストレーションサービスです。ECSクラスターでContainer Insightsが有効化されていない場合、コンテナ環境の健全性やパフォーマンスの可視性が著しく低下し、以下のような運用上およびセキュリティ上のリスクが発生します。
- パフォーマンス問題の特定困難: CPU、メモリ、ディスクI/O、ネットワーク利用率といった重要なコンテナおよびクラスターレベルのメトリクスが自動的に収集されないため、アプリケーションのパフォーマンスボトルネックやリソース枯渇の問題を特定するのが困難になります。
- 障害発生時の原因究明の遅延: コンテナの再起動失敗、タスクの異常終了、コンテナインスタンスのヘルス低下など、運用上の問題が発生した際に、詳細な診断情報が得られません。これにより、根本原因の特定と解決に時間がかかり、ダウンタイムが長期化する可能性があります。
- リソースの最適化不足: 各コンテナやサービスの実際のメトリクスが分からないため、リソース割り当て(CPU、メモリ)が適切に行われているか判断できません。過剰なリソース割り当てはコストの無駄につながり、不足しているとパフォーマンス問題を引き起こします。
- セキュリティインシデントの検知遅延: コンテナの異常な挙動(例: 予期しないリソース消費増大)は、セキュリティ侵害の兆候である可能性があります。Container Insightsが有効でないと、これらの異常を自動で検知する仕組みが不足し、インシデントへの対応が遅れる可能性があります。
- 運用上のオーバーヘッド増加: メトリクスやログを手動で収集・分析する必要が生じ、運用チームの負担が増大します。これは、特に大規模なコンテナ環境において非効率的です。
対策
ECSクラスターでContainer Insightsを有効化することは、コンテナ化されたアプリケーションのパフォーマンス監視、問題解決、およびリソース最適化を大幅に改善するために不可欠です。
- Container Insightsの有効化: ECSクラスターの作成時、または既存のクラスターに対して、Container Insightsを有効にします。これにより、CPU、メモリ、ストレージ、ネットワークなどのコンテナとクラスターレベルのメトリクスが自動的にCloudWatchに収集されます。
- 高解像度メトリクスの活用: Container Insightsは高解像度メトリクス(1秒間隔)を収集するため、より粒度の細かいパフォーマンスデータに基づいた監視とアラートが可能です。
- ダッシュボードでの可視化: Container Insightsによって収集されたメトリクスと診断情報を、CloudWatchダッシュボードで可視化します。これにより、クラスター全体の健全性、各サービスのパフォーマンス、リソース使用状況などを一目で把握できます。
- CloudWatchアラームの設定: 重要なメトリクス(例: コンテナのメモリ使用率がしきい値を超過、タスクのCPU使用率が異常値を示す、コンテナ再起動の失敗回数など)に対してCloudWatchアラームを設定し、問題が発生した場合に通知を受け取れるようにします。
- ログデータとの連携: Container InsightsはCloudWatch Logsにも診断情報を送信します。これらのログとメトリクスを連携させて分析することで、問題の根本原因をより深く掘り下げて特定できます。
修復方法
AWSコンソールでの修復手順
AWSコンソールを使用して、ECSクラスターでContainer Insightsを有効にします。
- ECSサービスへ移動:
- AWSコンソールにログインし、ECSサービスを開きます。
- クラスターの選択または新規作成:
- 左側のナビゲーションペインで「クラスター」を選択します。
- 既存のクラスターで有効にする場合は、対象のクラスター名をクリックします。
- 新規クラスターを作成する場合は、「クラスターの作成」をクリックします。
- Container Insightsの有効化:
- 既存のクラスターの場合:
- クラスターの詳細ページで「設定」タブを選択します。
- 「編集」をクリックします。
- 「Container Insights」セクションを見つけ、「Container Insights を有効にする」にチェックを入れます。
- 「変更の保存」をクリックします。
- 新規クラスターの作成の場合:
- クラスター作成ウィザードの「監視」セクションで、「Container Insights を有効にする」にチェックを入れます。クラスターの作成を続行します。
- 既存のクラスターの場合:

Terraformでの修復手順
TerraformでECSクラスターにおいてContainer Insightsを有効化するには、aws_ecs_cluster
リソースの setting
ブロックを使用します。
# ECSクラスターの定義
resource "aws_ecs_cluster" "my_ecs_cluster" {
name = "my-application-cluster"
# Container Insightsを有効化する設定
setting {
name = "containerInsights"
value = "enabled"
}
tags = {
Environment = "Development"
}
}
# (オプション) クラスターに紐づくEC2インスタンスまたはFargateプロファイルなど、
# その他のECS関連リソースもここで定義できます。
/*
# 例: EC2インスタンスを登録するECS容量プロバイダー
resource "aws_ecs_capacity_provider" "example" {
name = "example"
auto_scaling_group_provider {
auto_scaling_group_arn = aws_autoscaling_group.example.arn
managed_draining = "ENABLED"
managed_termination_protection = "ENABLED"
}
}
resource "aws_autoscaling_group" "example" {
# ... オートスケーリンググループの設定 ...
}
# 例: ECSサービスとタスク定義
resource "aws_ecs_task_definition" "example" {
family = "my-app"
cpu = "256"
memory = "512"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
execution_role_arn = aws_iam_role.ecs_task_execution_role.arn
container_definitions = jsonencode([
{
name = "my-container"
image = "nginx:latest"
portMappings = [
{
containerPort = 80
hostPort = 80
protocol = "tcp"
}
]
logConfiguration = {
logDriver = "awslogs"
options = {
"awslogs-group" = "/ecs/my-app"
"awslogs-region" = "ap-northeast-1" # あなたのリージョンに置き換え
"awslogs-stream-prefix" = "ecs"
}
}
}
])
}
resource "aws_ecs_service" "example" {
name = "my-app-service"
cluster = aws_ecs_cluster.my_ecs_cluster.id
task_definition = aws_ecs_task_definition.example.arn
desired_count = 2
launch_type = "FARGATE"
network_configuration {
subnets = [aws_subnet.public_a.id] # あなたのサブネットに置き換え
security_groups = [aws_security_group.ecs_sg.id] # あなたのセキュリティグループに置き換え
assign_public_ip = true
}
}
*/
上記のTerraformコードでは、aws_ecs_cluster
リソース内で setting
ブロックを定義し、その中に name = "containerInsights"
と value = "enabled"
を指定することで、ECSクラスターのContainer Insightsを有効にしています。
my-application-cluster
などのプレースホルダーは、実際の環境に合わせて修正してください。
最後に
この記事では、ECSクラスターにおいてContainer Insightsが有効化されていない状態について、リスクと対策を解説しました。ECSクラスターでContainer Insightsを有効化することは、コンテナ環境の健全性、パフォーマンス、および運用の可視性を確保するために不可欠です。これにより、問題の早期発見、迅速なトラブルシューティング、そしてリソースの効率的な利用が可能となり、安定したコンテナアプリケーションの運用をサポートします。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。