# ルートのレート制限の設定

### はじめに <a href="#introduction" id="introduction"></a>

Aikido の Zen Firewall では、**ルートにレート制限を設定**して、パスワードリセットリクエストの過剰送信などの悪用からアプリケーションを保護できます。Web ページ、REST API ルート、GraphQL API にレート制限をかけることができます。

{% hint style="warning" %}
レート制限は Lambda やサーバーレス環境では利用できません
{% endhint %}

### サポートされる機能 <a href="#supported-functionality" id="supported-functionality"></a>

* 特定のルートにレート制限を設定
* ワイルドカード\*ルートを追加して、複数のルートにレート制限を設定
* IP アドレス、[ユーザー ID](https://help.aikido.dev/doc/block-users-with-zen/docbO6Nm6Zb1#how-to-identify-and-block-users)、または[カスタムグループ ID](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/setting-up-rate-limiting-for-routes#how-it-works)（例：B2B SaaS の企業 ID）単位でレート制限を設定
* アプリ全体ではなく、特定のルートの保護を無効化
* [Localhost](http://localhost) または 127.0.0.1 がレート制限されることはありません

> レート制限は、個々の IP アドレスまたは[ユーザー識別](https://help.aikido.dev/doc/block-users-with-zen/docbO6Nm6Zb1#how-to-identify-and-block-users)に基づきます。\
> たとえば、制限が 1 分あたり 10 リクエストの場合：
>
> * ❌ **ブロック**：単一の IP が 11 回リクエストした場合
> * ✅ **許可：** 11 個の異なる IP がそれぞれ 1 回ずつリクエストした場合
>
> これにより、複数ユーザーからの通常のトラフィックを許可しつつ、悪用を防止できます。

### レート制限の設定方法 <a href="#how-to-set-up-rate-limiting" id="how-to-set-up-rate-limiting"></a>

ステップ 1：対象のアプリに移動し、Routes タブを開きます

ステップ 2：レート制限を適用したいルートのアクションメニューを開きます。Setup rate limiting をクリックするとモーダルが開きます。

![メソッド、ルート、アプリ名、レート制限、ステータスを表示する API ルート管理画面。](https://help.aikidogov.us/_assets/5c97a4dd85f0/Screenshot-2025-10-30-at-10.38.17.png)

**ステップ 3**：**Enable Rate Limiting** を有効にし、時間枠あたりに許可するリクエスト数を指定します。ルートを更新して保存します。

![/api/v2/posts/:number への PATCH リクエストのレート制限を有効化して設定する画面。](https://help.aikidogov.us/_assets/0912ad7affe7/Screenshot-2025-10-30-at-12.06.25.png)

> 設定の変更が反映されるまで最大 1 分かかります。

### 複数のルートにまとめてレート制限を設定する <a href="#setting-up-rate-limiting-for-multiple-endpoints-at-once" id="setting-up-rate-limiting-for-multiple-endpoints-at-once"></a>

ワイルドカードルートを追加することで、複数のルートにまとめてレート制限を設定できます。

**ステップ 1.** ルートページで **Add Route** をクリックします。

![ルート、アプリ名、レート制限、保護ステータスを表示する API ルート一覧。](https://help.aikidogov.us/_assets/1c31e4047d6f/Screenshot-2025-10-30-at-12.06.53.png)

**ステップ 2.** ルートに `*` を含めてワイルドカードルートを追加します。

![Aikido Firewall の設定でレート制限付きの API ルートを追加する画面。](https://help.aikidogov.us/_assets/2887b088176e/Screenshot-2025-10-30-at-12.06.59.png)

**ステップ 3.** ワイルドカードが一覧に表示されます。上記と同じ手順でレート制限を設定します。

![POST /auth/\* ルート：Demo アプリ、10 リクエスト/分、Protected ステータス。](https://help.aikidogov.us/_assets/ee55c5774c19/Screenshot-2025-10-30-at-12.07.54.png)

## 仕組み <a href="#how-it-works" id="how-it-works"></a>

### **処理の順序**

Aikido Zen は、以下の優先順位でレート制限を適用します：

1. グループレベル
2. ユーザーレベル
3. IP レベル

リクエストが上位レベル（例：グループ）でレート制限されると、下位レベル（ユーザーまたは IP）は評価されません。

### **スライディングウィンドウ**

継続的に前方へスライドする移動時間枠を使用してイベントを追跡します。特定の時刻にリセットされる固定ウィンドウとは異なり、スライディングウィンドウは直近の期間（例：直近 60 秒）のローリングカウントを維持します。これにより、ウィンドウの境界で短時間のトラフィックスパイクが制限をすり抜けるといったエッジケースを防ぎます。

### **ルートの選択（ワイルドカード）**

Zen はまず、レート制限を適用するために完全一致するルート（ワイルドカードなし）を選択します。完全一致するルートが見つからない場合は、最も低い制限に基づいてワイルドカード一致が適用されます。一度に適用される制限は 1 つのみで、1 つのリクエストが複数の制限に該当することはありません。

### **グループベースのレート制限**

ユーザーグループ単位でリクエスト数を制限するには、`setRateLimitGroup` 関数を使用できます。これはチームや企業ごとにリクエスト数を制限したい場合に便利です。レート制限グループが設定されている場合、設定されたレート制限はグループにのみ適用され、個々のユーザーや IP アドレスには適用されないことに注意してください。

対応言語：

* [Node.js](https://github.com/AikidoSec/firewall-node/blob/main/docs/user.md#rate-limiting-groups)
* [Python](https://github.com/AikidoSec/firewall-python/blob/main/docs/user.md#rate-limiting-groups)
* [Java](https://github.com/AikidoSec/firewall-java/blob/main/docs/user.md#rate-limiting-groups)
* [PHP](https://github.com/AikidoSec/firewall-php/blob/main/docs/user.md#rate-limiting-groups)
* [Go](https://pkg.go.dev/github.com/AikidoSec/firewall-go/zen#SetRateLimitGroup)
* [.NET](https://github.com/AikidoSec/firewall-dotnet/blob/main/docs/user.md#rate-limiting-groups)
* [Ruby](https://github.com/AikidoSec/firewall-ruby/blob/main/docs/rails.md#rate-limiting-groups)

## 例外

* [特定のユーザーのレート制限を解除するには、レート制限を無効化できます。](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-users-with-zen-firewall#remove-rate-limiting)これにより、そのユーザーに対するすべてのレート制限がバイパスされます。
