2021.10.05 会社の顔「Webサイト」を守れ!AWS WAFとは? ~構築・運用編~

この記事では、AWS WAFの構築・運用方法について解説します。なお、本記事では最新バージョン(執筆時)のAWS WAF(AWS WAF v2)を前提としており、前バージョン AWS WAF Classic(AWS WAF v1)は記事の対象外です。

AWS WAFを構築する前の事前準備として、Webサーバの構築・稼働確認、ALBの構築・稼働確認を解説した記事もありますので参考にしてください。

会社の顔「Webサイト」を守れ!AWS WAFとは?~構築前の事前準備編~|AWS活用法

AWS WAFを構築する

AWS WAFを下記の構成になるように構築していきます。今回は、ルール設定の例としてIPアドレス制限を追加します。

AWS WAFの構築図

1. Web ACLを作成する

  1. (1)

    AWS WAF 新規ウィンドウで開くを開きます。「Create web ACL」をクリックします。

  2. (2)

    各パラメータ項目を入力し、入力完了後に「Next」をクリックしてください。

    パラメータ項目 入力事項
    Name Web ACL名を入力する。
    • 今回は「TOKAI-WEBACL」と入力
    Description - optional 任意でコメントを記入する。
    CloudWatch metric name Web ACL名が自動で入力する。
    Resource type ご自身の目的に合ったリソースタイプを選択する。
    • 今回は「Regional resources」を選択
    Region ご自身が利用しているリージョンを選択する。
    • 今回は「Asia Pacific(Tokyo)」を選択
  3. (3)

    「Default Web ACL action for requests that don't match any rules」に「Default action」を設定します。

    このタイミングで、「Add rules and rule groups」にルールを設定できます。
    設定後は、ルールにマッチしない場合の動作を選択します。今回は「Allow」を選択し、選択完了後「Next」を選択してください。

    • 今回は後にルールを設定するため、このタイミングでルールを設定していません。ルール設定の詳細は「3. Web ACLにルールを追加する」の手順で解説しています。
  4. (4)

    入力してきたパラメータ事項を確認し、「Create Web ACL」をクリックしてください。これで、Web ACLが作成できました。

2. Web ACLとAWSリソースを紐づける

  1. (1)

    AWS マネジメントコンソール 新規ウィンドウで開くより、「AWS WAF」を選択します。

    「Web ACLs」を選択してください。次に、「1. Web ACLを作成する」際に選択したリージョンをタブより選択します。

  2. (2)

    選択したWeb ACLとAWSリソースを紐づけていきます。

    「Associate AWS resources タブ」を選択し、「Add AWS resources」をクリックしてください。

  3. (3)

    紐づけたいAWSリソースを選択します。

    今回はResource typeを「Application Load Balancer」に設定します。
    その後、Application Load Balancerの一覧が表示されますので、WAFと紐づけたいリソースを選択します。今回は「ALB」を選択します。
    これで、Web ACLとAWSリソースが紐づけられました。

3. Web ACLにルールを追加する

AWSリソースと紐づけたWeb ACLにIPアドレス制限のルールを追加していきます。

3.1 IP setを登録する

  1. (1)

    AWS WAFに戻り、「IP sets」を選択します。「Create IP set」をクリックしてください。

  2. (2)

    パラメータ項目を入力し、制限を加えたいIPアドレスを記載してください。入力完了後、「Create IP set」をクリックしてください。

    パラメータ項目 入力事項
    IP set name IP set名を入力する。
    • 今回は「Ip-limit」と入力
    Description - optional 任意でコメントを記入する。
    • 今回は「limit」と入力
    Region ご自身が利用しているリージョンを選択する。
    • 今回は「Asia Pacific(Tokyo)」を選択
    IP version ご自身のIPバージョンを選択する。
    • 今回は「IPv4」を選択
    IP addresses 制限を加えたいIPアドレスを記入する。

3.2. IPアドレス制限 ルールを追加する

  1. (1)

    AWS WAFに戻り「Web ACLs」を選択し、「1. Web ACLを作成する」際に選択したリージョンを選択します。作成したWeb ACLが表示されるので、選択してください。

  2. (2)

    選択したWeb ACLにルールを追加します。「Rules」 タブを選択し、「Add rules」をクリックし、タブを開いてください。「Add my own rules and rule groups」をクリックしてください。

  3. (3)

    各種パラメータを入力して、ルールを追加してください。今回はルールにIPアドレス制限を追加したいので、「IP set」を選択します。入力完了後、「Add rules」をクリックしてください。

    • 一般的なWebページは、情報の共有・周知を目的としてページを公開していることがほとんどです。WAFの一般的なルール設定として"正常なリクエストは通し、攻撃になるような内容のみをブロックする形式"をとることが多いため、今回はルールにIPアドレス制限を追加しています。
    パラメータ項目 入力事項
    Rule type 追加したいルールを選択する。
    • 今回は「IP set」を選択
    Rule ルール名を入力する。
    • 今回は「Ip-limit」と入力
    IP set 「3.1 IP setを登録する」で作成したIP set名をタブより選択する。
    IP address to use the originating address ソースIPの種類を選択する。
    • 今回は、「Source IP address」を選択
    Action ルールとマッチした場合の動作を選択する。
    • 今回は「Block」を選択
  4. (4)

    ルールの優先順位を選択します。今回の場合はルールを1つだけ追加したため、このまま「Save」をクリックします。

    これでWeb ACLにルール(今回はIPアドレス制限)を追加することができ、AWS WAFを構築することができました。

(検証)制限したIPアドレスからWebページにアクセスをする

それでは実際に、制限したIPアドレスから事前作成したWebページにアクセスをしてみます。
403エラーが返ってきてしまいました。一体、何故でしょうか?

AWS WAFは「手動でルールを更新し、管理していく仕組み」が備わっている

制限したIPアドレスからWebページにアクセスしたのに、403エラーになってしまった理由を、AWSマネジメントコンソールより確認してみます。

  1. (1)

    AWS WAFに戻り「Web ACLs」を選択し、「1. Web ACLを作成する」際に選択したリージョンを選択します。作成したWeb ACLが表示されるので、選択してください。

  2. (2)

    選択したWeb ACLの運用状況を確認していきます。「Overview」を選択すると、運用状況が分かるグラフが表示されます。

    今回は1ルール(Ip-limit)のみ作成したため、Ip-limit BlockedRequests(下図の青)とALL BlockedRequestsが同値になり、変化を目視で確認することができていません。しかしルールを複数作成することで、ルールマッチブロックリクエスト数とブロックリクエスト数の差異が発生し、運用状況の変化を目視で確認することができます。ルールを複数作成すると、折れ線グラフの本数・グラフの項目は増えます。

    グラフの項目 グラフの意味
    Ip-limit BlockedRequests
    (青のグラフ)
    ルールにマッチしたブロックリクエスト数を表す。
    ALL BlockedRequests
    (オレンジのグラフ)
    ブロックしたリクエスト数を表す。
    TOKAI-WEBACL AllowdRequest
    (緑のグラフ)
    許可されたリクエスト数を表す。
  3. (3)

    さらに同ページを下にスクロールをすると、サンプルリクエストが表示されます。

    今回作成したルール(Ip-limit)に一致しているリクエストは、サンプルリクエスト Metric Nameです。
    下の図ではお見せしていませんが、Source IPは、制限を加えたIPアドレスです。したがって、Actionを確認すると、状態がBLOCKになっており、リクエストが遮断されているのが分かります。

    項目 内容
    Metric Name リクエストが一致したルール名のこと。
    Source IP リクエストの発生元IPアドレスのこと。
    URI URL 内でリソースを識別する部分のこと。
    (https://www.cloudsolution.tokai-com.co.jp/contact/index.php の赤字部分)
    Rule inside rule group rule groupというルールをまとめる機能があり、その機能を使用した場合にリクエストと一致したrule groupのこと。
    Action リクエストに対するWAFの動作のこと。
    Time リクエストの発生時間のこと。

ここまでは、AWS WAFの基本的な構築・運用方法をご紹介しました。実際のシステムに複数のルールを追加し運用をおこなっていく場合、ルールの手動管理はあまりにも手間がかかります。当社がオススメするAWS WAFの運用方法は以下となります。

  • マネージドルール:AWSやその他のセキュリティベンダーが管理するルール集
  • WafCharm:AWSリソースのアクセスログから適切なルールを機械学習により生成するツール

次回以降の記事で、これらの運用方法について詳しくご紹介します。

まとめ

今回は、基本的なAWS WAFの構築・運用方法について解説をしました。このほかにもAWS WAFには、Web Botのアクセスを制御するAWS WAF Bot ControlやCloudFrontと組み合わせてブロックされた場合に表示されるページのカスタム等を行うことができます。構築や運用にお悩みの方、当記事を読んでAWS WAFに興味がある方など、是非弊社までお問い合わせ 新規ウィンドウで開くください。

関連サービス

おすすめ記事

導入のお問い合わせはこちら

AWSやAmazon WorkSpacesの導入から接続回線、運用・保守まで何でもお任せください。

お問い合わせ・資料請求