【目次】

  1. 1. はじめに
  2. 2. 設定方法
  3. 3. ユースケース
  4. 4. おわりに

1. はじめに

2023年7月20日にレートベースルールのカスタムキーに URI を指定できるようになりました。

これまでレートベースルールでカスタムキーを利用して集約できた項目は、ヘッダーやCookieなどでしたが、こちらに URI が追加されています。

スコープダウンステートメントを利用することで対象の URI を指定することはできたものの、複数の URI に対して個別のカウントをするためにはルールを複数作成する必要がありました。今回の変更により一つのルールで複数の URI の集計が可能となります。

レートベースルールの使い方
レートベースルールの条件を詳細に指定できるようになりました

2. 設定方法

レートベースの設定の「Custom Key」の項目を選択します。

「Request aggregation key」の項目を確認すると「URI path」が存在しますので、選択するのみで設定ができます。

「Add a request aggregation key」を選択することで、複合条件とすることも可能です。

集約するための条件を付与するイメージとなります。

{
  "Name": "rate-based-rule",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "rate-based-rule"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": "100",
      "AggregateKeyType": "CUSTOM_KEYS",
      "CustomKeys": [
        {
          "UriPath": {
            "TextTransformations": [
              {
                "Type": "NONE",
                "Priority": 0
              }
            ]
          }
        },
        {
          "IP": {}
        }
      ]
    }
  }
}

上記 JSON の例は、同じ URI かつ同じ IP アドレスで追跡する例となります。

さらに条件を絞り込むためにスコープダウンステートメントを利用することも可能です。

3. ユースケース

URI で集約することが可能なため、「/contact」以下のページに対してスコープダウンステートメントを利用して一律カウントしていたケースの場合、「Custom Key」での制限に変えることにより、「/contact/XXX」、「/contact/YYY」に対してそれぞれでカウントして制限を加えることができます。

閾値に該当する場合に限りますが、単純に Action を COUNT にして傾向を掴むという目的での利用も考えられるかと思います。
URI のみでの制限という考え方はあまりないかもしれませんが、傾向を掴んだ上で、URI と IP を「Custom Key」として Block するというルールを追加する形でもいいかもしれません。

4. おわりに

今回の変更は、URI ( ページ ) 単位でのレート制限ができるという意味でシンプルなものかと思います。いざ複合したルールを作成するという場合は、指定方法も複数あり、やや面倒と感じることはあるかと思います。WafCharm をご利用の場合はカスタマイズという形でルールを作成しますので、ご利用いただければ幸いです。