← Cloudflare Ruleset Engine / ruleset-engine / rulesets-api
Добавление правила в набор правил
Добавляет одно правило в существующий набор правил. Используйте эту конечную точку, чтобы добавить правило, не указывая в запросе все остальные правила набора.
Используйте одну из следующих конечных точек API:
- Создание правила набора правил аккаунта
POST /accounts/{account_id}/rulesets/{ruleset_id}/rules - Создание правила набора правил зоны
POST /zones/{zone_id}/rulesets/{ruleset_id}/rules
Включите определение правила в тело запроса.
По умолчанию правило добавляется в конец существующего списка правил в наборе. Чтобы задать конкретную позицию для правила, укажите position объект в теле запроса в соответствии с рекомендациями из Изменение порядка правила в наборе правил.
Вызов этого метода создаёт новую версию набора правил.
Пример
Следующие POST запрос добавляет правило в набор правил $RULESET_ID зоны $ZONE_ID. ID набора правил был ранее получен с помощью Список наборов правил зоны операции и соответствует набору правил точки входа для http_request_firewall_custom фазы.
В ответе будет возвращён полный набор правил после добавления правила.
Необходимые разрешения 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/$RULESET_ID/rules" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"action": "js_challenge",
"expression": "(ip.src.country in {\"GB\" \"FR\"} and cf.bot_management.score < 20 and not cf.bot_management.verified_bot)",
"description": "challenge GB and FR based on bot score"
}'{
"result": {
"id": "<RULESET_ID>",
"name": "Zone Ruleset 1",
"description": "My phase entry point ruleset at the zone level",
"kind": "zone",
"version": "11",
"rules": [
{
"id": "<RULE_ID_1>",
"version": "1",
"action": "challenge",
"expression": "not http.request.uri.path matches \"^/api/.*$\"",
"last_updated": "2023-11-23T11:36:24.192361Z",
"ref": "<RULE_REF_1>",
"enabled": true
},
{
"id": "<NEW_RULE_ID>",
"version": "1",
"action": "js_challenge",
"expression": "(ip.src.country in {\"GB\" \"FR\"} and cf.bot_management.score < 20 and not cf.bot_management.verified_bot)",
"description": "challenge GB and FR based on bot score",
"last_updated": "2024-06-22T12:35:58.144683Z",
"ref": "<NEW_RULE_REF>",
"enabled": true
}
],
"last_updated": "2024-06-22T12:35:58.144683Z",
"phase": "http_request_firewall_custom"
},
"success": true,
"errors": [],
"messages": []
}Определение позиции правила в наборе правил
Чтобы задать позицию нового правила в наборе правил, укажите position объект в запросе, содержащий один из следующих элементов:
-
"before": "<RULE_ID>": помещает правило перед правилом<RULE_ID>. Используйте этот аргумент с пустым значением ID правила (""), чтобы сделать правило первым в наборе правил. -
"after": "<RULE_ID>": помещает правило после правила<RULE_ID>. Используйте этот аргумент с пустым значением ID правила (""), чтобы сделать правило последним в наборе правил. -
"index": <POSITION_NUMBER>: помещает правило точно в позицию, заданную целым числом<POSITION_NUMBER>. Нумерация позиций начинается с1. Существующие правила в наборе правил, начиная с указанного номера позиции, сдвигаются на одну позицию (ни одно правило не перезаписывается). Например, если поместить правило в позицию n с помощьюindex, существующие правила с индексом n, n+1, n+2 и так далее, сдвигаются на одну позицию: их новая позиция будет n+1, n+2, n+3, и так далее. Если индекс выходит за пределы диапазона, метод возвращает400код статуса HTTP.
Примеры использования position объект, см. Обновление правила в наборе правил.