← Cloudflare Ruleset Engine / ruleset-engine / custom-rulesets
Развёртывание пользовательского набора правил
Чтобы развернуть пользовательский набор правил, добавьте правило с execute действие к списку правил фазы ruleset точки входа на уровне аккаунта или зоны. Выражение нового правила будет определять, когда будет выполняться пользовательский набор правил.
Пользовательские наборы правил можно развернуть только в наборе правил точки входа того же уровня. Например, пользовательский набор правил, заданный на уровне аккаунта, можно развернуть только на уровне аккаунта.
Если вы используете Terraform, см. Настройка пользовательских правил WAF с помощью Terraform для примеров создания и развёртывания пользовательских наборов правил.
Если вы используете панель управления Cloudflare, обратитесь к Работа с пользовательскими наборами правил в дашборде.
Перед началом работы
- Получение имени фаза где вы хотите развернуть пользовательский набор правил.
- Создание пользовательского набора правил и сохраните ID нового пользовательского набора правил.
- Получите правила, уже присутствующие в наборе правил точки входа фазы. Необходимо включить в
PUTзапросе все существующие правила, которые нужно сохранить.
Пример A: развёртывание на уровне аккаунта
Следующие PUT запрос добавляет правило, которое выполняет пользовательский набор правил, если имя зоны совпадает с example.com.
В PUT запросе необходимо указать ID всех существующих правил, которые нужно сохранить. Ответ будет содержать все правила входного набора правил фазы после обновления.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Mass URL Redirects WriteMagic Firewall WriteL4 DDoS Managed Ruleset WriteTransform Rules WriteSelect Configuration WriteAccount WAF WriteAccount Rulesets WriteLogs Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/phases/http_request_firewall_custom/entrypoint" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"action": "execute",
"description": "Execute custom ruleset",
"expression": "(cf.zone.name == \"example.com\") and cf.zone.plan eq \"ENT\"",
"action_parameters": {
"id": "<CUSTOM_RULESET_ID>"
}
},
{
"id": "<EXISTING_PHASE_RULE_ID_1>"
},
{
"id": "<EXISTING_PHASE_RULE_ID_2>"
}
]
}'{
"result": {
"id": "<ACCOUNT_PHASE_RULESET_ID>",
"name": "http_request_firewall_custom phase entry point ruleset for my account",
"description": "Execute several rulesets",
"kind": "root",
"version": "3",
"rules": [
{
"id": "<PHASE_RULE_ID>",
"version": "1",
"action": "execute",
"description": "Execute custom ruleset",
"action_parameters": {
"id": "<CUSTOM_RULESET_ID>",
"version": "latest"
},
"expression": "(cf.zone.name == \"example.com\") and cf.zone.plan eq \"ENT\"",
"last_updated": "2021-03-18T18:35:14.135697Z",
"ref": "<PHASE_RULE_REF>",
"enabled": true
},
{
"id": "<EXISTING_PHASE_RULE_ID_1>",
"version": "1",
"action": "execute",
"action_parameters": {
"id": "<EXECUTED_RULESET_ID_1>",
"version": "latest"
},
"expression": "(cf.zone.name eq \"example.com\") and cf.zone.plan eq \"ENT\"",
"last_updated": "2021-03-16T15:51:49.180378Z",
"ref": "<EXISTING_PHASE_RULE_REF_1>",
"enabled": true
},
{
"id": "<EXISTING_PHASE_RULE_ID_2>",
"version": "1",
"action": "execute",
"action_parameters": {
"id": "<EXECUTED_RULESET_ID_2>",
"version": "latest"
},
"expression": "(cf.zone.name eq \"example.com\") and cf.zone.plan eq \"ENT\"",
"last_updated": "2021-03-16T15:50:29.861157Z",
"ref": "<EXISTING_PHASE_RULE_REF_2>",
"enabled": true
}
],
"last_updated": "2021-03-18T18:35:14.135697Z",
"phase": "http_request_firewall_custom"
},
"success": true,
"errors": [],
"messages": []
}Пример B: развёртывание на уровне зоны
Следующие PUT запрос добавляет в набор правил точки входа на уровне зоны правило, которое выполняет пользовательский набор правил с ID "<CUSTOM_RULESET_ID>" для запросов, направленных к /login путь URI.
Вы должны указать в PUT запросе ID всех существующих правил, которые нужно сохранить. Ответ будет содержать все правила входного набора правил фазы после обновления.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Response Compression WriteConfig Settings WriteDynamic URL Redirects WriteCache Settings WriteCustom Errors WriteOrigin WriteManaged headers WriteZone Transform Rules WriteMass URL Redirects WriteMagic Firewall WriteL4 DDoS Managed Ruleset WriteHTTP DDoS Managed Ruleset WriteSanitize WriteTransform Rules WriteSelect Configuration WriteBot Management WriteZone WAF WriteAccount WAF WriteAccount Rulesets WriteLogs WriteLogs Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_firewall_custom/entrypoint" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"action": "execute",
"description": "Execute custom ruleset (zone)",
"expression": "(http.request.uri.path eq \"/login\")",
"action_parameters": {
"id": "<CUSTOM_RULESET_ID>"
}
},
{
"id": "<EXISTING_PHASE_RULE_ID_1>"
}
]
}'{
"result": {
"id": "<ZONE_PHASE_RULESET_ID>",
"name": "http_request_firewall_custom phase entry point ruleset for my zone",
"description": "",
"kind": "zone",
"version": "3",
"rules": [
{
"id": "<PHASE_RULE_ID>",
"version": "1",
"action": "execute",
"description": "Execute custom ruleset (zone)",
"action_parameters": {
"id": "<CUSTOM_RULESET_ID>",
"version": "latest"
},
"expression": "(http.request.uri.path eq \"/login\")",
"last_updated": "2025-08-18T18:35:14.135697Z",
"ref": "<PHASE_RULE_REF>",
"enabled": true
},
{
"id": "<EXISTING_PHASE_RULE_ID_1>",
"version": "1",
"action": "managed_challenge",
"expression": "(cf.waf.score lt 20 and http.request.uri.path wildcard \"/admin/*\")",
"last_updated": "2025-08-16T15:51:49.180378Z",
"ref": "<EXISTING_PHASE_RULE_REF_1>",
"enabled": true
}
],
"last_updated": "2025-08-18T18:35:14.135697Z",
"phase": "http_request_firewall_custom"
},
"success": true,
"errors": [],
"messages": []
}