CloudTrailとCloudWatch Logsでマネージメントコンソールの不正ログインを検知する
CloudTrailちょっと使ってみようと思って、CloudWatch Logsと連携してマネージメントコンソールにログインするIPが想定のレンジかどうかを監視するのを試してみた。
まずはCloudTrailの設定。マネージメントコンソールから以下の設定する。
- CloudTrail
(※2017/09/12追記: いつのまにかApply trail to all regionsをYesにしないと検知しないようになってたようです。)
Turn Onで有効化したら試しにマネージメントコンソールにログアウトしてログインしなおしてみる。
しばらく待つとAPI Activity HistoryにConsoleLoginというイベントが表示されるので、現在のIPを確認しておく。
ちなみに生ログはS3の先ほど指定したバケットに飛んできてるのが確認できるけど、json.gzが定期的に生成されてて保存はされてるかんじで、これは全然ユーザーフレンドリーではないのであんまり直接人が見るもんではない。
CloudWatch Logsと連携する設定する。
- CloudTrail
- Configuration
- CloudWatch Logs
- New or existing log group: CloudTrail/DefaultLogGroup
- CloudWatch Logs
- Configuration
Continueを押すとCloudTrailからCloudWatchにログを送るためのIAM Roleを付与してよいかの確認画面が出るのでAllowで許可する。
CloudWatch側に行って、Logsを見ると先ほどのロググループができてるのが確認できててLog Streamsでログの中身が見える。
- CloudWatch
- Logs
- CloudTrail/DefaultLogGroup
- Log Streams: xxxx_CloudTrail_ap-northeast-1
- CloudTrail/DefaultLogGroup
- Logs
フィルタ条件を作る。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
- Logs
フィルタができたら、フィルタから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
- Filter -> Create Alarm
- CloudTrail/DefaultLogGroup
- Logs
Create Alarmするとトピックの承認メールがメールアドレス宛に届くのでリンクを踏んで承認する。
試しにスマホなど違うIPからログインしてみるとアラートメールが飛んでこればOK。
参考