不正アクセスを速攻で把握、AWS WAFの通知設定を徹底解説

はじめに

どうもこんにちは、大橋です。私は会員管理システムの開発・運用担当であると同時にサービス監視チームの一員でもあります。だいぶ前にAWS WAFでセキュリティを強化、AWS WAF設定方法を徹底解説でAWS WAFについて解説しましたが、その最後に「通知してくれない」と「現在時刻から遡って3時間までのリクエスト情報しか保存できない」という問題が残っていました。これを解決するために、アトラスの監視チームはAWS WAFで検知したアクセスをリアルタイムでSlackに通知するように設定しています。今回はその設定方法を紹介したいと思います。前回の内容と関連している部分が多いので、AWS WAFについてあまり理解していない方は前回の記事を先に読むことをお勧めします。

全体のフロー

通知設定を実現するには、少なくともAWSのCloudWatchとSNS(Simple Notification Service)が必要です。CloudWatchはWAFで検知したアクセスログをメトリクスとして収集し、条件付きでアラームを作成します。SNSはそのアラームの情報を受け取り、外部に送信してくれます。AWS WAFをこの二つのサービスと連携させることで外部に通知できるようになります。CloudWatchもSNSも無料枠があるので料金の心配はいりません。

アトラスでは、検知したアラートは全てOpsGenieに集約しているので、OpsGenieへのアラート設定をしておけば自動的にSlackに通知します。OpsGenieからSlackへ通知する方法はこちらの記事に記載してあるので今回は割愛させていただきます。

設定手順

設定手順を大きく分けて「OpsGenie – SNSの連携設定」と「CloudWatchのアラーム作成」の2つがあります。サービス間に行ったり来たりはしますが、プログラムを組むなど難しいことはしませんし、この手順で進めれば楽に設定することができます。

OpsGenie – SNSの連携設定

1. OpsGenieのIntegration作成

OpsGenieにログインし、左メニューからSetting -> Integration Listを選択します。右にあるAWS CloudWatchのアイコンに移動し、Addをクリックします。そうすると下記の画面が表示されるので、赤い枠の中は連携のためのURLなのでコピーしておきます。Save Integrationを押したら作成完了です。

2. AWS SNSのトピックの作成


作成したトピックへのサブスクリプションを作成し、エンドポイント欄に先ほどコピーしたIntegrationのURLを貼り付けます。これで一旦連携設定は完了です。

Step 1:

Step 2:

CloudWatchのアラーム作成

1. メトリクス生成

最初、通知設定に必要なデータがないので、それを一度出力させる必要があります。前回紹介したAdvanced Client Requestを使ってわざとWAFの条件に引っかかるURLでアクセスします。そうすると該当するCloudWatchのメトリクスが生成されます。メトリクスという単語に馴染みない方もいるかと思いますが、単純にログデータだと思っていただいて結構です。

左メニューからメトリクスを選択し、右下のWAF -> Region, Rule, WebACLを選択すると、WAFのメトリクス一覧が表示されます。

2. アラーム閾値設定

その中から設定したいメトリクスにチェックを入れ、グラフ化したメトリクス(1)をクリックし、その選択されたメトリクスの右側にある鐘アイコンをクリックします。

「メトリクスと条件の指定」という画面が表示されるので、そこでアラームの出力や閾値を設定します。

メトリクス名、WebACL、Region、Ruleは出力内容となります。またその下にある統計と期間を変更すると、左側のグラフが変わります(画像はサンプルなのでデータがないだけです)。さらに、下にある条件枠と合わせてアラームの閾値設定になります。

上記の例では、5分間にWAFで検知したアクセス数の平均値が1より大きい場合、アラームが作成されると設定しています。「次へ」をクリックしてどのような通知をどこに出すかの設定をします。

3. SNS連携

先ほど作成したWAF_TESTというSNSを選択したら「次へ」をクリックします。

4. アラーム完成

後はアラーム名と説明を入れ、プレビュー画面で一通り確認して、問題なければ「アラームの作成」を押して完成です。

動作確認

前回紹介したAdvanced Client Requestを用いて、わざとWAFの条件に引っかかるURLでアクセスすると、SlackにOpsGenieのアラートが来ます。

まとめ

これで怪しいアクセスをWAFで検知したらすぐにSlackに通知するようになります。ただどんなアクセスだったかは出してくれないので、その後調査はWAFの画面を確認するなり、サーバログを見るなり調べてくださいね。またOpsGenieのようなアラート管理サービスを使わずに、Slackに直接通知したいという方もいるかと思います。その場合は、AWS ChatbotやSlack APIを利用して実現できます。それにしてもCloudWatchのアラームとSNSトピックの作成は必要不可欠ですね。という訳で、WAFの通知設定や活用方法に悩んでいるならこの記事が少しでも役に立ったら嬉しく思います。