Создать профиль ARL
- В консоли управления
выберите каталог, в котором вы хотите создать профиль ARL. - Перейдите
в сервис Smart Web Security. - На панели слева выберите
Профили ARL и нажмите Создать профиль ARL. - Введите имя профиля.
- (Опционально) Введите описание.
- (Опционально) Добавьте профилю метки.
- (Опционально) Выберите или создайте шаблон ответа, который будет возвращаться клиенту при срабатывании любого правила в профиле. По умолчанию используется стандартный шаблон Yandex Cloud.
-
(Опционально) Выберите или создайте шаблон ответа, который будет возвращаться клиенту при срабатывании любого правила в профиле. По умолчанию используется стандартный шаблон Yandex Cloud.
- Добавьте правила ARL.
- Нажмите Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
-
Посмотрите описание команды:
yc smartwebsecurity advanced-rate-limiter advanced-rate-limiter-profile create --help -
Создайте профиль ARL с правилом, которое ограничивает число запросов к
/api/loginдля каждого IP-адреса. В примере лимит составляет 20 запросов за 60 секунд. РежимdryRunпозволит проверить правило без блокировки запросов.yc smartwebsecurity advanced-rate-limiter advanced-rate-limiter-profile create \ --folder-id <идентификатор_каталога> \ --name login-rate-limit \ --description "Ограничение запросов к форме входа" \ --labels environment=production,component=authentication \ --advanced-rate-limiter-rules '[ { "name": "login-per-ip", "priority": 100, "description": "Не более 20 запросов к /api/login с одного IP за минуту", "dryRun": true, "dynamicQuota": { "action": "DENY", "limit": "20", "period": "60", "condition": { "requestUri": { "path": { "exactMatch": "/api/login" } }, "httpMethod": { "httpMethodMatcher": { "exactMatch": "POST" } } }, "characteristics": [ { "simpleCharacteristic": { "type": "IP" } } ] } } ]'Где:
--folder-id— идентификатор каталога, в котором будет создан профиль.--name— уникальное имя профиля от 1 до 50 символов. Может содержать буквы, цифры, дефисы, символы подчеркивания или точки.- (Опционально)
--description— описание профиля. - (Опционально)
--labels— метки профиля в форматеключ=значение. - (Опционально)
--advanced-rate-limiter-rules— массив правил в формате JSON.
В каждом правиле укажите уникальные name и priority. Чем меньше значение priority, тем выше приоритет правила.
Для staticQuota сервис считает все подходящие запросы вместе. Для dynamicQuota сервис группирует запросы по характеристикам. Можно указать до трех характеристик: REQUEST_PATH, HTTP_METHOD, IP, GEO или HOST.
Чтобы проверить правило без блокировки запросов, укажите "dryRun": true. Для перевода правила в рабочий режим укажите "dryRun": false.
-
Чтобы настроить правила ARL в файле запроса, сформируйте шаблон в формате JSON или YAML:
yc smartwebsecurity advanced-rate-limiter advanced-rate-limiter-profile create --example-json > request.jsonyc smartwebsecurity advanced-rate-limiter advanced-rate-limiter-profile create --example-yaml > request.yamlОтредактируйте файл и передайте его в команде создания профиля:
yc smartwebsecurity advanced-rate-limiter advanced-rate-limiter-profile create \ --request-file request.yaml
Terraform
Terraform распространяется под лицензией Business Source License
Подробная информация о ресурсах провайдера в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
Чтобы создать профиль ARL:
-
Опишите в конфигурационном файле Terraform параметры ресурсов, которые необходимо создать:
# Профиль ARL resource "yandex_sws_advanced_rate_limiter_profile" "arl-profile" { name = "<имя_профиля>" description = "<описание_профиля>" # Правило 1 advanced_rate_limiter_rule { name = "<имя_правила>" priority = <приоритет_правила> description = "<описание_правила>" dry_run = true static_quota { action = "DENY" limit = <лимит_правила> period = <период_правила> condition { request_uri { path { exact_match = "/api" } } } } } }Где:
name— имя профиля ARL.description— описание профиля ARL. Необязательный параметр.labels— метки профиля ARL. Необязательный параметр.advanced_rate_limiter_rule— блок правил.name— имя правила.priority— приоритет правила, уникальное число от1до999999. Первыми применяются правила с меньшим числовым значением.description— описание правила. Необязательный параметр.dry_run— флаг пробного запуска. Установите значениеtrue, чтобы протестировать правило и оценить нагрузку на веб-сервис. В этом режиме запросы блокироваться не будут, но информация о срабатывании правила будет записываться в логи. Необязательный параметр.static_quota— способ подсчета запросов, при котором считается каждый запрос по отдельности, без группировки. Может быть указан только один из блоков:static_quotaилиdynamic_quota.action— действие при превышении лимита. Единственное возможное значение —DENY.limit— максимальное количество разрешенных запросов за период.period— период времени в секундах, в течение которого считается лимит.condition— условие применения правила. Необязательный параметр. Описание условий смотрите в документации провайдера, в разделе описания структурыadvanced_rate_limiter_rule.static_quota.condition.
dynamic_quota— способ подсчета запросов, при котором считаются группы запросов, объединенных одной или несколькими характеристиками. Может быть указан только один из блоков:static_quotaилиdynamic_quota.action— действие при превышении лимита. Единственное возможное значение —DENY.limit— максимальное количество разрешенных запросов за период.period— период времени в секундах, в течение которого считается лимит.condition— условие применения правила. Необязательный параметр. Описание условий смотрите в документации провайдера, в разделе описания структурыadvanced_rate_limiter_rule.dynamic_quota.condition.characteristic- описание характеристик для группировки запросов. Может быть указан один из блоков:simple_characteristicилиkey_characteristic.case_insensitive:true— не учитывать регистр,false— учитывать регистр.key_characteristic— блок параметров, для которых надо указать ключ (строку) для группировки запросов.type– тип группировки. Возможные значения:COOKIE_KEY,HEADER_KEY,QUERY_KEY.value— значение ключа (строка), по которому будут группироваться запросы.
simple_characteristic— блок параметров с автоматической группировкой. Т.е. запросы группируются автоматически по указанному параметру.type– тип группировки. Возможные значения:REQUEST_PATH,HTTP_METHOD,IP,GEO,HOST.
Подробнее о параметрах ресурса
yandex_sws_advanced_rate_limiter_profileв документации провайдера. -
Создайте ресурсы:
-
В терминале перейдите в директорию с конфигурационным файлом.
-
Проверьте корректность конфигурации с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список планируемых изменений: ресурсы и/или выходные переменные. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление ресурсов можно в консоли управления
. -
После создания профиля ARL вы можете добавить правило в профиль.
Воспользуйтесь методом REST API create для ресурса AdvancedRateLimiterProfile или вызовом gRPC API AdvancedRateLimiterProfile/Create.