アカウントレベルのカスタムルールセットには、次のクォータ上限があります。
- ルールセットの上限: 10
- ルールセットあたりのルール上限: 100
- ルールの合計クォータ: リクエストパス上の全ルールセットで 1,000 ルール
合計 1,000 ルールのクォータは、すべてのプランに適用される固定の上限で、引き上げできません。この上限はアカウントレベルのカスタムルールセットだけでなく、リクエストが通過するすべてのルールセットに適用されます。
ルールセット間のルール配分を変えたい場合(たとえば、ルールセット数を減らし、1 セットあたりのルール数を増やすなど)は、Cloudflare Support に問い合わせてください。アカウントレベルの利用枠を更新して、ルールセットとルールの配分を変えられるのは Cloudflare Support だけです。
問い合わせの前に、次の最適化を検討してください。
- ルールをまとめる: 条件やアクションが似ているルールを、より広い一致条件を持つ 1 本のルールにまとめます。
- 未使用のルールを削除する: ルールセットを監査し、発火しなくなったルールや機能が重複しているルールを削除します。
- IP lists を使う: 個別の IP アドレスごとにルールを作る代わりに、IP lists で IP をまとめ、1 本のルールから参照します。
アカウントレベルでカスタムルールをデプロイするには、次の手順を行います。
- 1 本以上のルールを含むカスタムルールセットを作成します。または、List account rulesets API オペレーションで、デプロイしたい既存のカスタムルールセットを特定します。
- カスタムルールセットを実行されるようにデプロイします。デプロイするには、
executeアクションのルールを作成します。
API でカスタムルールセットを扱うには、Rulesets API を使います。
Terraform を使う場合は、Terraform で WAF カスタムルールを設定する を参照してください。
カスタムルールセットをデプロイする一般的な流れは次のとおりです。
http_request_firewall_customフェーズに、1 本以上のルールを含むカスタムルールセットを作成します。- そのルールセットを、
http_request_firewall_customフェーズの エントリポイントルールセット にデプロイします。
次の例は、アカウントレベルで、rules 配列にルールを 1 本持つカスタムルールセットを作成します。
Required API token permissions
At least one of the following token permissions is required:Account WAF WriteAccount Rulesets Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"description": "",
"kind": "custom",
"name": "My custom ruleset",
"rules": [
{
"description": "Challenge web traffic (not /api)",
"expression": "not starts_with(http.request.uri.path, \"/api/\")",
"action": "managed_challenge"
}
],
"phase": "http_request_firewall_custom"
}'レスポンスのルールセット ID を保存し、次の手順で使います。
カスタムルールセットをデプロイするには、http_request_firewall_custom フェーズのエントリポイントルールセットに、"action": "execute" のルールを追加します。
-
アカウントのエントリポイントルールセットを取得する 操作を呼び出し、
http_request_firewall_customフェーズのエントリポイントルールセットの定義を取得します。この作業には アカウント ID が必要です。
At least one of the following token permissions is required:Required API token permissions
Account WAF WriteAccount WAF ReadAccount Rulesets ReadAccount Rulesets Write
Get an account entry point rulesetbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/phases/http_request_firewall_custom/entrypoint" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"{ "result": { "description": "Account-level phase entry point", "id": "<RULESET_ID>", "kind": "root", "last_updated": "2024-03-16T15:40:08.202335Z", "name": "root", "phase": "http_request_firewall_custom", "rules": [ // ... ], "version": "9" }, "success": true, "errors": [], "messages": [] } -
エントリポイントルールセットがすでに存在する場合(つまり、
200 OKステータスコードとルールセット定義を受け取った場合)は、レスポンス内のルールセット ID を控えます。次に、アカウントルールセットのルールを作成する 操作を呼び出して、既存のルールセットに custom ruleset をデプロイするexecuteルールを追加します。デフォルトでは、ルールはルールセット内の既存ルール一覧の末尾に追加されます。次のリクエストは、アカウント内のすべての Enterprise ゾーンに対して、ID が
<CUSTOM_RULESET_ID>のカスタムルールセットを実行するルールを作成します。
At least one of the following token permissions is required:Required API token permissions
Account WAF WriteAccount Rulesets Write
Create an account ruleset rulebash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/$RULESET_ID/rules" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "description": "Execute custom ruleset", "expression": "(cf.zone.plan eq \"ENT\")", "action": "execute", "action_parameters": { "id": "<CUSTOM_RULESET_ID>" }, "enabled": true }' -
エントリポイントルールセットが存在しない場合(ステップ 1 で
404 Not Foundステータスコードを受け取った場合)、アカウントルールセットを作成する 操作で作成します。rules配列に、custom ruleset を all incoming requests of Enterprise zones in your account 向けに実行するルールを 1 件含めます。
At least one of the following token permissions is required:Required API token permissions
Account WAF WriteAccount Rulesets Write
Create an account rulesetbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "description": "", "kind": "root", "name": "Account-level phase entry point", "rules": [ { "action": "execute", "expression": "(cf.zone.plan eq \"ENT\")", "action_parameters": { "id": "<CUSTOM_RULESET_ID>" } } ], "phase": "http_request_firewall_custom" }'
作成してデプロイしたカスタムルールセットは、Rulesets API の各オペレーションで操作します。アカウントレベルでカスタムルールセットを扱う一般的な作業は、次の表のとおりです。
| 作業 | 手順 |
|---|---|
| カスタムルールセットの一覧を取得する | List account rulesets オペレーションを使い、 詳細は 既存のルールセットを一覧する を参照してください。 |
| カスタムルールセット内の全ルールを一覧する | カスタムルールセット ID を指定して Get an account ruleset オペレーションを呼び、設定済みルールとその ID の一覧を取得します。 詳細は 特定のルールセットを表示する を参照してください。 |
| カスタムルールを更新する | Update an account ruleset rule オペレーションを使います。カスタムルールセット ID とルール ID が必要です。 詳細は ルールセット内のルールを更新する を参照してください。 |
| カスタムルールを削除する | Delete an account ruleset rule オペレーションを使います。カスタムルールセット ID とルール ID が必要です。 詳細は ルールセット内のルールを削除する を参照してください。 |
ゾーンレベルで API からカスタムルールセットを作成する手順は、カスタムルールセット(ゾーンレベル) を参照してください。
カスタムルールセットの操作について詳しくは、Ruleset Engine ドキュメントの カスタムルールセットを扱う を参照してください。