概要
- Classic ELB から ALB + WAF へ移行するに辺り、CloudWatch アラーム設定をどうしようか考えてみる(結局、結論は出ず。。)
bad behavior なリクエストが来た場合
※ 例えば、PHPMyAdminを狙った /PMA/
Classic ELB (WAFなし) のとき
- CloudWatch HTTPCode_Backend_4XX は、作業ミスやコードの不具合・バグ検知用に入れたはずが、クローラー/愉快犯/画像泥棒/攻撃事前調査(Probe)などによるアラートの方が多い。
- PHPMyAdmin を狙った攻撃事前調査系の bad behavior も、PHPMyAdmin なんて入れていないので HTTPCode_Backend_4XX (=404) アラートが飛ぶ (最近特に多い)。
- そこで、AWS WAF を導入したら HTTPCode_Backend_4XX アラートが減るんじゃないかなと期待してみた(けど。。)
AWS ALB + AWS WAF
-
実際に bad behavior なリクエストをブロックするのは、WAF ではなく ALB の方だった。
よくある質問: 2. AWS WAF はどのようにトラフィックをブロックまたは許可しますか? - なので、ALB の CloudWatach HTTPCode_ELB_4XX_Count (=403) アラートが飛ぶのだろう。。
- WAF の CloudWatch BlockedRequests を設定するのもどうかと。。(正常にブロックして当たり前、ブロックしたゼ通知がくるのはうざい)
うーむ
- CloudWatchサービスはまだまだ進化しているので、HTTPCode_ELB_404_Count とか HTTPCode_ELB_403_Count というように細かく設定ができる機能が出るのを期待する?
- カスタムメトリクスを作ればなんとかなる?
- AWS WAF にも、CloudFronにある地域制限の機能が追加して欲しい(外国を遮断するだけでもかなり減る)
とりあえず?
- ALB CloudWatach HTTPCode_ELB_4XX_Count と WAF CloudWatch BlockedRequests を設定する。
- で、
ALB の CloudWatach HTTPCode_ELB_4XX_Count アラートが飛ぶ
↓
WAF の CloudWatch BlockedRequests アラートが来なかったら、Kibanaなどで状況を確認する
メモ
AWS ALB のみの場合
構成
ALB ---> httpd on EC2
bad behavior request が来た
① ALB が受ける
② ターゲットグループの httpd on EC2 が受ける
アクセスログ
① ALBアクセスログ
- elb_status_code: 404
- target_status_code: 404
② httpd on EC2 アクセスログ
- GET /PMA/ HTTP/1.1" 404
Amazon CloudWatch メトリクス
ALB
- elb_status_code: 404 ⇒ HTTPCode_ELB_4XX_Count (統計: 最も有用な統計は Sum)
- target_status_code: 404 ⇒ HTTPCode_Target_4XX_Count (統計: 最も有用な統計は Sum)
AWS ALB + AWS WAF の場合
構成
ALB ---> httpd on EC2
+--> WAF (rule:bad-behaviorをブロック)
bad behavior request が来た
① ALB が受ける
② AWS WAF へ転送
③ AWS WAF が ルールに基いて検査
④ AWS WAF が ALB へリクエストのブロックを指示
⑤ ALB がブロックする (403 Forbidden)
アクセスログ
① ALBアクセスログ
- elb_status_code: 403
- target_status_code: -
② httpd on EC2 アクセスログ
- なし
Amazon CloudWatch メトリクス
ALB
- elb_status_code: 403 ⇒ HTTPCode_ELB_4XX_Count (統計: 最も有用な統計は Sum)
WAF
- BlockedRequests (有効な統計: Sum)