INTEGRITY Документация

Создание правила rate limiting через API

Используйте Rulesets API , чтобы создать правило rate limiting через API на уровне зоны.

Правило rate limiting похоже на обычное правило, обрабатываемое Ruleset Engine, но содержит дополнительный ratelimit объект с конфигурацией rate limiting. См. Параметры правил rate limiting — там приведена дополнительная информация об этом поле и его параметрах.

Вы должны развернуть правила rate limiting в фазе http_ratelimit набор правил точки входа фазы.

Правила rate limiting должны находиться в конце списка правил.

Если вы используете Terraform, см. Настройка правил rate limiting с помощью Terraform.

Создание правила rate limiting

Чтобы создать правило rate limiting для зоны, добавьте правило с ratelimit объект в http_ratelimit набора правил точки входа фазы.

  1. Вызовите Получение набора правил точки входа зоны (операция), чтобы получить определение набора правил точки входа для фазы http_ratelimit (фаза). Вам понадобится ID зоны для этой задачи.

  2. Если набор правил точки входа уже существует (то есть если вы получили 200 OK код состояния и определение набора правил), запишите ID набора правил из ответа. Затем вызовите Создание правила в наборе правил зоны (операция), чтобы добавить правило rate limiting в существующий набор. Подробности — в примерах ниже.

  3. Если набор правил точки входа не существует (то есть если вы получили 404 Not Found код состояния на шаге 1), создайте его с помощью Создание набора правил зоны операции. Включите ваше правило rate limiting в rules (массив). См. Create ruleset для примера.

Пример A — rate limiting на основе свойств запроса

Этот пример добавляет правило rate limiting в http_ratelimit (набор правил точки входа этой фазы) для зоны с ID $ZONE_ID. Набор правил точки входа фазы уже существует, его ID — $RULESET_ID.

Создание правила в наборе правил зоны
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "My rate limiting rule",
		"expression": "(http.request.uri.path matches \"^/api/\")",
		"action": "block",
		"ratelimit": {
				"characteristics": [
						"cf.colo.id",
						"ip.src",
						"http.request.headers[\"x-api-key\"]"
				],
				"period": 60,
				"requests_per_period": 100,
				"mitigation_timeout": 600
		}
	}'

Чтобы задать конкретную позицию нового правила, включите position (объект) в теле запроса в соответствии с рекомендациями в Изменение порядка правила в наборе правил.

Инструкции по созданию набора правил точки входа и определению его правил одним вызовом API см. в Добавление правил в наборы правил точек входа фаз.

Пример B — rate limiting с пользовательским ответом

Этот пример добавляет правило rate limiting в http_ratelimit (набор правил точки входа этой фазы) для зоны с ID $ZONE_ID. Набор правил точки входа фазы уже существует, его ID — $RULESET_ID.

Новое правило определяет пользовательский ответ для запросов, заблокированных из-за rate limiting.

Создание правила в наборе правил зоны
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "My rate limiting rule",
		"expression": "(http.request.uri.path matches \"^/api/\")",
		"action": "block",
		"action_parameters": {
				"response": {
						"status_code": 403,
						"content": "You have been rate limited.",
						"content_type": "text/plain"
				}
		},
		"ratelimit": {
				"characteristics": [
						"cf.colo.id",
						"ip.src",
						"http.request.headers[\"x-api-key\"]"
				],
				"period": 60,
				"requests_per_period": 100,
				"mitigation_timeout": 600
		}
	}'

Чтобы задать конкретную позицию нового правила, включите position (объект) в теле запроса в соответствии с рекомендациями в Изменение порядка правила в наборе правил.

Инструкции по созданию набора правил точки входа и определению его правил одним вызовом API см. в Добавление правил в наборы правил точек входа фаз.

Пример C — rate limiting без учёта кэшированных ресурсов

Этот пример добавляет правило rate limiting в http_ratelimit (набор правил точки входа этой фазы) для зоны с ID $ZONE_ID. Набор правил точки входа фазы уже существует, его ID — $RULESET_ID.

Новое правило не учитывает запросы к кешированным ресурсам при вычислении частоты ("requests_to_origin": true).

Создание правила в наборе правил зоны
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "My rate limiting rule",
		"expression": "(http.request.uri.path matches \"^/api/\")",
		"action": "block",
		"ratelimit": {
				"characteristics": [
						"cf.colo.id",
						"ip.src",
						"http.request.headers[\"x-api-key\"]"
				],
				"period": 60,
				"requests_per_period": 100,
				"mitigation_timeout": 600,
				"requests_to_origin": true
		}
	}'

Чтобы задать конкретную позицию нового правила, включите position (объект) в теле запроса в соответствии с рекомендациями в Изменение порядка правила в наборе правил.

Инструкции по созданию набора правил точки входа и определению его правил одним вызовом API см. в Добавление правил в наборы правил точек входа фаз.

Пример D — правило rate limiting на основе сложности

Этот пример добавляет правило rate limiting в http_ratelimit (набор правил точки входа этой фазы) для зоны с ID $ZONE_ID. Набор правил точки входа фазы уже существует, его ID — $RULESET_ID.

Новое правило — это правило rate limiting на основе сложности, которое учитывает my-score для вычисления суммарной оценки сложности для клиента. Счётчик с суммарной оценкой обновляется при совпадении с выражением подсчёта правила rate limiting (в данном случае оно совпадает с выражением правила, поскольку counting_expression — пустая строка). Когда эта суммарная оценка превышает 400 за период 60 секунд (одна минута), последующие запросы клиента будут блокироваться в течение 600 секунд (10 минут).

Создание правила в наборе правил зоны
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "My complexity-based rate limiting rule",
		"expression": "(http.request.uri.path wildcard \"/graphql/*\")",
		"action": "block",
		"ratelimit": {
				"characteristics": [
						"cf.colo.id",
						"http.request.headers[\"x-api-key\"]"
				],
				"score_response_header_name": "my-score",
				"score_per_period": 400,
				"period": 60,
				"mitigation_timeout": 600,
				"counting_expression": ""
		}
	}'

Чтобы задать конкретную позицию нового правила, включите position (объект) в теле запроса в соответствии с рекомендациями в Изменение порядка правила в наборе правил.

Инструкции по созданию набора правил точки входа и определению его правил одним вызовом API см. в Добавление правил в наборы правил точек входа фаз.


Дальнейшие шаги

Используйте различные операции в Rulesets API для работы с только что созданным правилом. В следующей таблице перечислены типовые задачи по работе с правилами rate limiting на уровне зоны:

Задача Порядок действий
Список всех правил в наборе

Используйте Получение набора правил точки входа зоны операцию с http_ratelimit (имя фазы), чтобы получить список настроенных правил rate limiting и их идентификаторы.

Подробнее см. Просмотр конкретного набора правил.

Обновление правила

Используйте Обновление правила набора правил зоны (операция API).

Потребуется указать ID набора правил и ID правила. Чтобы получить эти ID, можно использовать Получение набора правил точки входа зоны операцию с http_ratelimit имя фазы.

Подробнее см. Обновление правила в наборе правил.

Удаление правила

Используйте Удаление правила из набора правил зоны (операция API).

Потребуется указать ID набора правил и ID правила. Чтобы получить эти ID, можно использовать Получение набора правил точки входа зоны операцию с http_ratelimit имя фазы.

Подробнее см. Удаление правила из набора.

Эти операции описаны в документации по Ruleset Engine. Ruleset Engine лежит в основе различных продуктов Cloudflare, включая правила rate limiting.

Дополнительные ресурсы

Инструкции по развёртыванию правил rate limiting на уровне аккаунта через API см. в Создание набора правил rate limiting через API.