【目次】
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 をご利用の場合はカスタマイズという形でルールを作成しますので、ご利用いただければ幸いです。
