CloudTrailとCloudWatch Logsでマネージメントコンソールの不正ログインを検知する

CloudTrailちょっと使ってみようと思って、CloudWatch Logsと連携してマネージメントコンソールにログインするIPが想定のレンジかどうかを監視するのを試してみた。

まずはCloudTrailの設定。マネージメントコンソールから以下の設定する。

  • CloudTrail
    • Get Started Now
      • Create a new S3 bucket?: Yes
      • S3 bucket: cloudtrail-minamijoyo
      • Log file prefix: (なし)
      • SNS notification for every log file delivery?: No

(※2017/09/12追記: いつのまにかApply trail to all regionsをYesにしないと検知しないようになってたようです。)

Turn Onで有効化したら試しにマネージメントコンソールにログアウトしてログインしなおしてみる。
しばらく待つとAPI Activity HistoryにConsoleLoginというイベントが表示されるので、現在のIPを確認しておく。

  • CloudTrail
    • API Activity History
      • Event Name: ConsoleLogin
        • Source IP address: xxxx

ちなみに生ログはS3の先ほど指定したバケットに飛んできてるのが確認できるけど、json.gzが定期的に生成されてて保存はされてるかんじで、これは全然ユーザーフレンドリーではないのであんまり直接人が見るもんではない。

CloudWatch Logsと連携する設定する。

  • CloudTrail
    • Configuration
      • CloudWatch Logs
        • New or existing log group: CloudTrail/DefaultLogGroup

Continueを押すとCloudTrailからCloudWatchにログを送るためのIAM Roleを付与してよいかの確認画面が出るのでAllowで許可する。

CloudWatch側に行って、Logsを見ると先ほどのロググループができてるのが確認できててLog Streamsでログの中身が見える。

  • CloudWatch
    • Logs
      • CloudTrail/DefaultLogGroup
        • Log Streams: xxxx_CloudTrail_ap-northeast-1

フィルタ条件を作る。IPアドレスは/24でレンジ指定したい場合は*でワイルドカード使えばよいっぽい。

  • CloudWatch
    • Logs
      • CloudTrail/DefaultLogGroup
      • Create Metric Filter
        • Filter Pattern: { $.responseElements.ConsoleLogin = "Success" && $.sourceIPAddress != "xxx.xxx.xxx.*" }
        • Metric Details
          • Metric Namespace: LogMetrics
          • Metric Name: out-of-range-ip-login

フィルタができたら、フィルタからCreate Alarmでアラームを作る。

  • CloudWatch
    • Logs
      • CloudTrail/DefaultLogGroup
        • Filter -> Create Alarm
          • Name: alarm-out-of-range-ip-login
          • Description: alarm-out-of-range-ip-login
          • Whenever: out-of-range-ip-login
          • is >= 1
          • for 1 consecutive period(s)
          • Whenever this alarm: State is ALARM
          • Send notification to: new list -> topic-cloudtrail
          • Email list: xxxx

Create Alarmするとトピックの承認メールがメールアドレス宛に届くのでリンクを踏んで承認する。

試しにスマホなど違うIPからログインしてみるとアラートメールが飛んでこればOK。

参考