【目次】

  1. 1. はじめに
  2. 2. 実現したい構成イメージ
  3. 3. Default Actionについて
  4. 4. 特定のユーザー以外からのアクセスをブロックする方法
  5. 5. おわりに

1. はじめに

WafCharmでは、一般的なWeb攻撃を検知するためのルールをご提供しております。そのため、AWS WAF上では不審なリクエストはルールで検知し、検知されなかったリクエストについては正規のものとして許可するような構成でのご利用を想定しております。

しかしながら、AWS WAFの利用対象によっては、特定のユーザー以外からのアクセスをそもそも想定していないというケースもあるかと思います。

本ブログ記事では、特定のユーザー以外からのアクセスを想定していない場合に、それ以外のリクエストをブロックするためのルールの作成についてご紹介します。

2. 実現したい構成イメージ

今回実現したい構成のイメージは、以下の通りです。
ALBやCloudFrontにAWS WAF(Web ACL)をアタッチしていて、その後ろのサーバーに対して許可ユーザーはアクセスを許可しつつ、許可外ユーザーはブロックします。

また、許可ユーザーであってもWafCharmルールでの検査は行い、不審なリクエストはブロックする想定です。

3. Default Actionについて

Default Actionは、AWS WAF上のWeb ACLごとに設定する項目です。リクエストをAWS WAFで検査する際に、登録されているどのルールにもマッチしなかったリクエストをどのように処理するかを決めるアクションを指定します。

例えば、AWS WAFにルールA、B、Cが登録されているWeb ACLで、どのルールにもマッチしなかったリクエストを最終的に許可したい場合には、Default ActionはAllowを選択します。

反対に、ルールA、B、Cのどれにもマッチしなかった場合にリクエストを遮断したい場合は、Default ActionはBlockを選択します。こちらの設定を実施している場合、受け付ける想定のリクエストを許可するためのルールを設定する必要があります。許可ルールが存在しない場合、どのようなリクエストであっても遮断されてしまうので注意が必定です。

不特定多数のアクセス元からのリクエストを受け付ける想定の場合、Default ActionはAllowを選択する必要がありますが、アクセス元が限られている場合、Default ActionはBlockでも問題ないケースもあります。

しかしながら、上記の実現したい構成のように想定しているアクセス元も一度チェックはしておきたいといったようなケースや、WafCharmをご利用いただいている場合には、Default ActionがBlockですと想定通り動作しないケースや、許可ルールによって実際にはチェックを行いたいルールをスキップしてしまう懸念があります。

今回はWafCharmをご利用いただいている構成を想定しておりますので、Default ActionはAllowであることを前提とします。

Default Actionの詳細については、以下のAWS公式ドキュメントもご参考ください。
AWS WAF での保護パック (ウェブ ACL) のデフォルトアクションの設定

4. 特定のユーザー以外からのアクセスをブロックする方法

特定のユーザー以外からのアクセスをブロックには、IPアドレスベースで許可したいユーザーを特定し、それ以外をブロックするという方法で実現します。
そのため、ルールとしては特定のIPアドレス以外をブロックするルールを作成します。

手順としては、以下の通りです。
※上記の手順は、新しい WAF コンソール画面を前提としています。古い WAF コンソールの場合は手順が異なる場合があります。
※実際の画面と手順に差がある場合には、AWS公式ドキュメントに記載の内容をご利用ください。

  1. AWS WAFのコンソールを開きます。
  2. IP セット画面を開きます。
  3. IP アドレスセットを作成します。
    詳細な手順は、IP セットの作成と管理もご参考ください。
  4. 対象のWeb ACLにて、ルールを追加します。
  5. カスタムルールを選択します。
  6. IP ベースのルールのルールを選択します。
  7. アクションにBlockを選択します。
  8. ルール名を入力します。
  9. 既存の IP セットを使用を選択します。
  10. 2番で作成したIP Setを選択します。
  11. ルール設定にて、「ステートメント結果を否定します」を選択します。
  12. 必要に応じて、「オリジンの送信元 IP アドレス」の設定を変更します。
  13. ルール編集画面にて、「ビジュアル」から「JSON」に切り替えます。
  14. "Priority": の横に記載された数字(1など)を0〜99の数字に変更します。
    本ルールは、登録されているIPアドレス以外からのリクエストをブロックすることが目的のため、基本的には他のルールより先に評価を実施します。本ルールより前に配置すべきルールがない場合には、0や1を入力してください。
    WafCharmをご利用の場合、WafCharmが提供するルールの位置は仕組み上決まっています。WafCharmルールの順序については、以下のヘルプページをご参考ください。
    WafCharmルールについて (AWS WAF v2)
  15. ルールを追加します。

上記を実施すると、以下のようなルールが追加されます。

{
    "Name": "ルール名",
    "Priority": 1,
    "Statement": {
        "NotStatement": {
            "Statement": {
                "IPSetReferenceStatement": {
                    "ARN": "IP SetのARN"
                }
            }
        }
    },
    "Action": {
        "Block": {}
    },
    "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "ルール名"
    }
}

これ以降は、登録したIPアドレス以外で対象の環境にアクセスすると、このルールによってブロックされます。

IPアドレスの追加・削除を行う場合には、IPセットの画面から3番で作成したIPアドレスセットを編集してください。

AWS WAFコンソールの操作方法や詳細は以下のAWS公式ドキュメントなどもご参考ください。
AWS WAF で保護を設定する

5. おわりに

ご利用状況によっては、特定のユーザー以外からのアクセスを想定していないなどでアクセスを制限したいケースもあるかと存じます。

その場合には、上記の手順で特定のIPアドレス以外をブロックするルールのご利用をご検討いただけますと幸いです。