Защита API Gateway при помощи Smart Web Security
Yandex API Gateway поддерживает интеграцию с сервисом Yandex Smart Web Security. Благодаря этому вы можете настроить для API-шлюза защиту от DDoS-атак и ботов на прикладном уровне L7 модели OSI
Профили безопасности Smart Web Security позволяют настроить защиту с различными условиями. Например, вы можете установить лимит запросов с группировкой запросов по параметрам, а также настроить блокировку запросов по IP-адресу пользователя. Для этого:
- Подготовьте облако к работе.
- Создайте профиль ARL и профиль безопасности Smart Web Security.
- Создайте API-шлюз.
- Проверьте работу созданных ресурсов.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Создайте профиль ARL и профиль безопасности Smart Web Security
-
Создайте профиль ARL с именем
arl-profile
. -
Добавьте в профиль правило с лимитом запросов и группировкой запросов по параметру
token
. Укажите следующие параметры:- Имя —
query-limit-rule
; - Приоритет —
999900
; - Группировать запросы — По характеристикам;
- Характеристика —
Query params
; - Группировать по —
token
; - Лимит запросов на группу —
1
за1 минуту
.
- Имя —
-
Создайте профиль безопасности
sws-profile
по преднастроенному шаблону. При создании выберите в поле Профиль ARL созданный ранее профильarl-profile
. -
Чтобы настроить блокировку по IP-адресу пользователя, добавьте правило к профилю безопасности Smart Web Security со следующими параметрами:
-
Имя —
ip-block-rule
; -
Приоритет —
999700
; -
Тип правила — Базовое;
-
Действие — Разрешить;
-
Условия на трафик:
- Трафик — При условии;
- Условия —
IP
; - Условия на IP —
Совпадает или принадлежит диапазону
; - IP совпадает или принадлежит диапазону — укажите ваш IP-адрес.
-
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации api-gw-sws-integration.tf
.В этом файле описаны:
- Профиль ARL, устанавливающий лимит запросов и группировку запросов по параметру
token
. - Профиль безопасности Smart Web Security, который использует профиль ARL и дополнительно устанавливает блокировку по IP-адресу.
- API-шлюз, настроенный на работу с профилем безопасности Smart Web Security.
- Профиль ARL, устанавливающий лимит запросов и группировку запросов по параметру
-
В блоке с локальными переменными файла
api-gw-sws-integration.tf
укажите следующие параметры:arl_name
— имя профиля ARL.folder_id
— идентификатор каталога, в котором будет создан профиль ARL.sws_name
— имя профиля Smart Web Security.allowed_ips
— список IP-адресов, с которых разрешен доступ к API-шлюзу.api-gw-name
— имя API-шлюза.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Создайте API-шлюз
Создайте API-шлюз my-gateway
. При создании добавьте в поле Спецификация следующую спецификацию:
openapi: "3.0.0"
x-yc-apigateway:
smartWebSecurity:
securityProfileId: <идентификатор_профиля_безопасности_SWS>
info:
version: 1.0.0
title: Protected application
license:
name: MIT
paths:
/:
get:
x-yc-apigateway-integration:
type: dummy
content:
'*': "This application is protected by SWS!"
httpCode: 200
Остальные параметры оставьте без изменений.
-
В файле
api-gw-sws-integration.tf
:-
В параметре
securityProfileId
спецификации API-шлюза укажите идентификатор созданного ранее профиля безопасности Smart Web Security. -
В блоке локальных переменных укажите значение
create-api-gw = 1
.
-
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Проверьте работу созданных ресурсов
Протестируйте работу настроек Smart Web Security:
Проверка лимита запросов
-
Выполните GET-запрос к API-шлюзу:
curl <служебный_домен_API-шлюза>
Результат выполнения команды:
This application is protected by SWS!
-
Сразу же повторите запрос. В ответ вы получите веб-страницу с кодом ошибки 429. Это значит, что лимит количества запросов сработал и заблокировал ваш запрос.
-
Подождите минуту и повторите запрос. Ответ должен быть идентичен ответу на первый запрос:
This application is protected by SWS!
Проверка группировки запросов
-
Выполните GET-запрос к API-шлюзу с параметром
token=token
:curl <служебный_домен_API-шлюза>?token=token
Результат выполнения команды:
This application is protected by SWS!
-
Сразу же повторите запрос. В ответ вы получите веб-страницу с кодом ошибки 429. Это значит, что лимит количества запросов сработал и заблокировал ваш запрос.
-
В эту же минуту повторите запрос, но измените значение параметра
token
:curl <служебный_домен_API-шлюза>?token=token2
Результат выполнения команды:
This application is protected by SWS!
Это значит, что ваш запрос попал в новую группу, для которой еще не срабатывал лимит количества запросов. Поэтому запрос был успешно выполнен.
Проверка блокировки по IP
-
Выполните GET-запрос к API-шлюзу с IP-адреса, который вы указали в профиле безопасности Smart Web Security:
curl <служебный_домен_API-шлюза>
Результат выполнения команды:
This application is protected by SWS!
-
Выполните запрос с другого IP-адреса, например с ВМ в облаке:
curl --verbose <служебный_домен_API-шлюза>
В ответ вы получите веб-страницу с капчей. Это значит, что Smart Web Security заблокировал запрос с IP-адреса, который не входит в список разрешенных.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать, в зависимости от способа их создания:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-