カスタムルールセットは、ゾーンまたは アカウントレベル でデプロイできるカスタムルールの集まりです。
カスタムルール と同様に、カスタムルールセットではリクエストを絞り込んで受信トラフィックを制御できます。
たとえば、ゾーンのすべての受信リクエスト、または受信リクエストの一部にカスタムルールセットを適用できます。
ゾーンレベルでは、すべてのお客様がカスタムルールセットを作成してデプロイできます。アカウントレベルのカスタムルールセットには Enterprise プランが必要です。詳細は 利用可否 を参照してください。
カスタムルールセットを作成しただけでは有効になりません。execute アクションのルールが フェーズエントリポイントルールセット から参照したときだけ実行されます。フェーズエントリポイントルールセットは、指定した フェーズ で各リクエストに対して Cloudflare が評価する最上位のルールセットです。
ゾーンにカスタムルールセットをデプロイするには、次の手順を行います。
- ゾーンレベルで、1 つ以上のルールを持つカスタムルールセットを作成します。または、デプロイしたい既存のカスタムルールセットを List zone rulesets API 操作で特定します。
http_request_firewall_customフェーズのエントリポイントルールセットに、executeアクションのルールを追加し、カスタムルールセット ID を参照します。このルールは、式が一致したときにカスタムルールセットを実行するよう Cloudflare に指示します。
次のリクエストは、ゾーンレベルで 2 つのルールを持つ新しいカスタムルールセットを作成します。レスポンスの id フィールドに、新しいカスタムルールセットの ID が含まれます。
Required API token permissions
At least one of the following token permissions is required:Zone WAF Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Custom Ruleset 1",
"description": "My First Custom Ruleset (zone)",
"kind": "custom",
"phase": "http_request_firewall_custom",
"rules": [
{
"expression": "(ip.src.country in {\"GB\" \"FR\"} and cf.bot_management.score < 20 and not cf.bot_management.verified_bot)",
"action": "challenge",
"description": "challenge GB and FR based on bot score"
},
{
"expression": "not http.request.uri.path wildcard \"/api/*\"",
"action": "challenge",
"description": "challenge not /api"
}
]
}'{
"result": {
"id": "f82ccda3d21f4a02825d3fe45b5e1c10",
"name": "Custom Ruleset 1",
"description": "My First Custom Ruleset (zone)",
"kind": "custom",
"version": "1",
"rules": [
{
"expression": "(ip.src.country in {\"GB\" \"FR\"} and cf.bot_management.score < 20 and not cf.bot_management.verified_bot)",
"action": "challenge",
"description": "challenge GB and FR based on bot score"
},
{
"expression": "not http.request.uri.path wildcard \"/api/*\"",
"action": "challenge",
"description": "challenge not /api"
}
],
"last_updated": "2025-11-09T10:27:30.636197Z",
"phase": "http_request_firewall_custom"
},
"success": true,
"errors": [],
"messages": []
}http_request_firewall_custom フェーズのエントリポイントルールセットに "action": "execute" のルールを追加して、カスタムルールセットをデプロイします。
-
Get a zone entry point ruleset オペレーションを呼び出し、
http_request_firewall_customフェーズのエントリポイントルールセットの定義を取得します。この作業には ゾーン ID が必要です。
At least one of the following token permissions is required:Required API token permissions
Zone WAF WriteZone WAF Read
Get a zone entry point rulesetbash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_firewall_custom/entrypoint" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"{ "result": { "description": "Zone-level phase entry point", "id": "<ENTRY_POINT_RULESET_ID>", "kind": "zone", "last_updated": "2025-11-16T15:40:08.202335Z", "name": "zone", "phase": "http_request_firewall_custom", "rules": [ // ... ], "version": "10" }, "success": true, "errors": [], "messages": [] } -
エントリポイントルールセットがすでに存在する場合(つまり、
200 OKステータスコードとルールセット定義を受け取った場合)は、レスポンス内のルールセット ID を控えます。次に、ゾーンルールセットのルールを作成する 操作を呼び出して、既存のルールセットに ステップ 1 で作成したカスタムルールセット(f82ccda3d21f4a02825d3fe45b5e1c10をカスタムルールセット ID に置き換えます)。
式がtrueのため、カスタムルールセットはすべての受信リクエストに対して実行されます をデプロイするexecuteルールを追加します。デフォルトでは、ルールはルールセット内の既存ルール一覧の末尾に追加されます。
At least one of the following token permissions is required:Required API token permissions
Zone WAF Write
Create a zone ruleset rulebash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$ENTRY_POINT_RULESET_ID/rules" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "action": "execute", "expression": "true", "action_parameters": { "id": "f82ccda3d21f4a02825d3fe45b5e1c10" }, "description": "Execute custom ruleset" }'{ "result": { "id": "<ENTRY_POINT_RULESET_ID>", "name": "zone", "description": "Zone-level phase entry point", "kind": "zone", "version": "11", "rules": [ // ... any existing rules { "id": "<RULE_ID>", "version": "1", "action": "execute", "action_parameters": { "id": "f82ccda3d21f4a02825d3fe45b5e1c10" }, "expression": "true", "description": "Execute custom ruleset", "last_updated": "2025-11-18T18:08:14.003361Z", "ref": "<RULE_REF>", "enabled": true } ], "last_updated": "2025-11-18T18:08:14.003361Z", "phase": "http_request_firewall_custom" }, "success": true, "errors": [], "messages": [] } -
エントリポイントルールセットが存在しない場合(ステップ 1 で
404 Not Foundステータスコードを受け取った場合)、ゾーンルールセットを作成する 操作で作成します。rules配列に、カスタムルールセット を ゾーンのすべての受信リクエスト 向けに実行するルールを 1 件含めます。f82ccda3d21f4a02825d3fe45b5e1c10をカスタムルールセット ID に置き換えます。
At least one of the following token permissions is required:Required API token permissions
Zone WAF Write
Create a zone rulesetbash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "name": "zone", "description": "Zone-level phase entry point", "kind": "zone", "phase": "http_request_firewall_custom", "rules": [ { "action": "execute", "action_parameters": { "id": "f82ccda3d21f4a02825d3fe45b5e1c10" }, "expression": "true", "description": "Execute custom ruleset" } ] }'
作成してデプロイしたカスタムルールセットは、Rulesets API の各操作で扱えます。ゾーンレベルのカスタムルールセットでよく行う作業は次のとおりです。
| 作業 | 手順 |
|---|---|
| カスタムルールセットの一覧を取得する | List zone rulesets 操作を使い、 詳細は 既存のルールセットを一覧する を参照してください。 |
| カスタムルールセット内のすべてのルールを一覧する | カスタムルールセット ID を指定して Get a zone ruleset 操作を使い、設定済みルールとその ID の一覧を取得します。 詳細は 特定のルールセットを表示する を参照してください。 |
| カスタムルールを更新する | Update a zone ruleset rule 操作を使います。カスタムルールセット ID とルール ID が必要です。 詳細は ルールセット内のルールを更新する を参照してください。 |
| カスタムルールを削除する | Delete a zone ruleset rule 操作を使います。カスタムルールセット ID とルール ID が必要です。 詳細は ルールセット内のルールを削除する を参照してください。 |
Cloudflare API でカスタムルールセットを扱う詳細は、Ruleset Engine ドキュメントの カスタムルールセットを使う を参照してください。