ルートテーブル変更を監視するアラームの未設定

AWS ルートテーブルの変更を監視する CloudWatch フィルターとアラームがないと、通信経路の変更の把握が遅れる場合があります。

説明

CreateRoute、ReplaceRoute、DeleteRoute などのルートテーブル変更を監視するログフィルターとアラームがないと、通信経路の変化に気付くのが遅れる場合があります。ルーティングの変更は、サービスの接続性やセキュリティ上の経路に影響することがあります。

誤ったルーティングは迂回経路や通信障害を生む可能性があります。実際の到達可能性はゲートウェイやセキュリティグループなどにも依存するため、変更イベントと併せて確認してください。

想定される影響

  • 通信経路の変更の把握が遅れる場合があります。
  • 誤ったルーティングによるサービス障害の原因調査が遅れる場合があります。
  • ネットワークのセキュリティ経路の変化への対応が遅れるおそれがあります。

対処方法

  • 重要な CloudTrail ルートテーブル変更イベントを CloudWatch Logs に配信し、ログメトリクスフィルターを設定してください。
  • 生成されるメトリクス名と名前空間をアラームに接続し、評価条件と SNS 配信経路を設定してください。
  • 運用で必要な作成、置換、削除、関連付けの変更が対象に含まれることを確認してください。アラーム条件を満たすテストイベントで通知を検証してください。

例

フィルターとメトリクスの接続を示す抜粋です。比較演算子、評価期間、統計と集計期間、通知アクション、CloudTrail 配信、SNS のサブスクリプションは別途補う必要があります。ここではフィルター名とメトリクス名が同じため、フィルターの id を参照しています。

変更前

hcl
resource "aws_cloudwatch_metric_alarm" "example" {
  alarm_name  = "CIS-3.13-RouteTableChanges"
  metric_name = "XXXX NOT YOUR FILTER XXXX"
  namespace   = "CIS_Metric_Alarm_Namespace"
  threshold   = "1"
}

変更後

hcl
resource "aws_cloudwatch_log_metric_filter" "example" {
  name           = "CIS-RouteTableChanges"
  pattern        = "{ ($.eventName = CreateRoute) || ($.eventName = CreateRouteTable) || ($.eventName = ReplaceRoute) || ($.eventName = ReplaceRouteTableAssociation) || ($.eventName = DeleteRouteTable) || ($.eventName = DeleteRoute) || ($.eventName = DisassociateRouteTable) }"
  log_group_name = aws_cloudwatch_log_group.CIS_CloudWatch_LogsGroup.name

  metric_transformation {
    name      = "CIS-RouteTableChanges"
    namespace = "CIS_Metric_Alarm_Namespace"
    value     = "1"
  }
}

resource "aws_cloudwatch_metric_alarm" "example" {
  alarm_name  = "CIS-3.13-RouteTableChanges"
  metric_name = aws_cloudwatch_log_metric_filter.example.id
  namespace   = "CIS_Metric_Alarm_Namespace"
  threshold   = "1"
}

補足:

  • 変更前: アラームのメトリクス名がルート変更のメトリクスに接続されていません。
  • 変更後: 列挙したルーティングイベントをメトリクスに変換し、アラームに接続します。必要なイベント範囲と省略された設定を確認してください。通知によって経路変更が阻止されるわけではありません。

参考資料