Централизованная публикация в интернете и защита от DDoS-атак приложений, размещенных в разных каталогах Yandex Cloud
В этом руководстве рассматривается сценарий, в котором с облачными ресурсами Yandex Cloud работает несколько независимых команд. Сервисы и приложения, которые разрабатывают команды, публикуются в интернете. Для разделения ресурсов используются каталоги Yandex Cloud, и каждая команда имеет доступ только к своему каталогу. Также по требованию службы информационной безопасности (СИБ) командам не разрешено напрямую публиковать ресурсы из своих каталогов в интернете.
С реализацией такой схемы помогут сервисы Yandex Cloud — Yandex Application Load Balancer (ALB) и Yandex Smart Web Security (SWS).
Сервис Application Load Balancer позволяет создавать балансировщики на уровне L7 модели OSI
Сервис Smart Web Security позволяет защитить ваши ресурсы от DDoS-атак и ботов на уровне L7. Дополнительно можно подключить WAF и ограничить нагрузку на ваш ресурс с помощью модуля Advanced Rate Limiter (ARL). Параметры защиты ваших ресурсов настраиваются в профиле безопасности Smart Web Security. Профиль безопасности подключается к L7-балансировщику.
Чтобы настроить такую схему работы, надо решить несколько задач:
- Централизованная публикация сервисов в интернете — это позволяет сделать L7-балансировщик.
- Проверка входящего трафика на наличие информационных угроз — для этого используется сервис Smart Web Security.
- Ограничение доступа команд к L7-балансировщикам и профилю безопасности — для этого надо разместить L7-балансировщики в отдельном каталоге. Доступ к этому каталогу должны иметь только избранные сотрудники. Например, сотрудники СИБ.
- Организация сетевого взаимодействия между L7-балансировщиками и целевыми ресурсами команд в разных каталогах — для этого можно использовать Multi-folder VPC. При этом L7-балансировщики и ресурсы команд должны находиться в разных подсетях одной сети VPC.
Схема размещения ресурсов в Yandex Cloud
На схеме обозначены следующие ресурсы:
- ALB — L7-балансировщики Application Load Balancer, через которые сервисы публикуются в интернете.
- SWS — сервис Smart Web Security для защиты на уровне приложений (L7).
- Каталог СИБ — каталог L7-балансировщиков ALB, доступ к которому имеют только сотрудники службы информационной безопасности.
- VPC — облачная сеть, в которой находятся подсети ALB и команд.
- alb-subnet-a, alb-subnet-b, alb-subnet-d — подсети с узлами ALB.
- subnet-team-1, subnet-team-2 — подсети с ресурсами команд.
- Каталоги команд — каталоги, в которых размещены целевые ресурсы команд. Например, виртуальные машины (ВМ), базы данных, балансировщики L3-L4 Network Load Balancer (NLB) и другие.
В этом руководстве предполагается, что целевые ресурсы ваших сервисов уже созданы и находятся в разных каталогах.
Поэтому будут рассмотрены:
- Требования и рекомендации по дополнительной настройке ресурсов.
- Настройка защиты и публикация сервисов в интернете.
Требования и рекомендации по настройке ресурсов
Сеть
-
Для организации сетевой связности между L7-балансировщиками и целевыми ресурсами команд используйте Multi-folder VPC, расширяющий область действия сети VPC с одного каталога на несколько.
-
Для разграничения сетевого доступа между ресурсами разных команд используйте группы безопасности:
-
Группы безопасности целевых ресурсов должны разрешать входящий трафик от подсетей L7-балансировщика.
-
Группы безопасности L7-балансировщика должны разрешать входящий трафик на подсети целевых ресурсов.
Рекомендации по настройке групп безопасности см. в разделе Группы безопасности.
-
L7-балансировщики
-
Разместите все L7-балансировщики в одном каталоге, доступ к которому имеют только сотрудники СИБ.
-
(Опционально) Подключите защиту от DDoS-атак на уровне L3-L4. Для этого:
- Зарезервируйте статический публичный IP-адрес с защитой от DDoS-атак и используйте его для обработчика L7-балансировщика.
- Настройте порог
для срабатывания механизмов защиты на уровне L3-L4, который будет соответствовать объему легитимного трафика на ваши сервисы. - На целевых ресурсах задайте MTU —
1450
.
-
Для обработчиков одного L7-балансировщика нельзя использовать разные публичные IP-адреса.
-
Для обработчиков одного L7-балансировщика используйте разные порты.
Для HTTPS-протокола можно использовать обработчики SNI с одинаковым портом. Допустимое количество обработчиков SNI см. в лимитах.
-
(Опционально) Для отказоустойчивости разместите L7-балансировщики в разных зонах доступности.
-
Для узлов L7-балансировщика учитывайте размеры подсетей.
-
Настройте для L7-балансировщика минимальное количество ресурсных единиц в каждой зоне согласно правилам автомасштабирования. Количество ресурсных единиц определяется ожидаемой нагрузкой на ваши сервисы по следующим параметрам:
- количество запросов в секунду (RPS);
- количество одновременных активных соединений;
- количество новых соединений в секунду;
- объем трафика в секунду.
-
При большой нагрузке на L7-балансировщик, учитывайте его лимиты. Если не получается масштабировать сервис за счет ресурсов внутри одного балансировщика, распределите его на несколько L7-балансировщиков.
-
Для высоконагруженных сервисов выделите для каждого сервиса свой L7-балансировщик.
-
При публикации нескольких сервисов через один L7-балансировщик ALB учитывайте SLA
. -
Учитывайте, что внешние запросы к веб-серверам будут приходить от IP-адресов из диапазона внутренних IP-адресов подсетей L7-балансировщика. IP-адреса источников запросов (пользователей) будут сохраняться в HTTP-заголовке X-Forwarded-For
(XFF). Поэтому для логирования IP-адреса пользователей из XFF на веб-серверах целевых ресурсов может потребоваться изменение конфигурации.
Целевые ресурсы
- В целевой группе L7-балансировщика укажите IP-адреса ваших сервисов из каталогов команд, которые должны быть доступны в интернете.
- Эти адреса должны входить в частные диапазоны по RFC 1918
. - При изменении внутреннего IP-адреса у целевого ресурса вручную обновите настройки целевой группы L7-балансировщика.
Настройка безопасной публикации сервисов в интернете
Чтобы настроить безопасную публикацию ваших сервисов в интернете:
- Создайте каталог СИБ.
- Предоставьте доступ к каталогу только сотрудникам СИБ.
- Настройте сетевое взаимодействие ресурсов из разных каталогов.
- Настройте группы безопасности согласно рекомендациям.
- Зарезервируйте публичный IP-адрес, включите защиту от DDoS-атак на уровнях L3-L4.
- Создайте профиль безопасности.
- При использовании HTTPS добавьте TLS-сертификат в Certificate Manager.
- Создайте L7-балансировщик.
- Проверьте работу L7-балансировщика.
На схеме представлены ресурсы L7-балансировщика, которые будут созданы и настроены в этом сценарии.
Создание профиля безопасности
-
В консоли управления
выберите каталог СИБ. -
В списке сервисов выберите Smart Web Security.
-
Нажмите кнопку Создать профиль.
-
Выберите По преднастроенному шаблону.
-
Введите имя профиля —
sws-ddos
. -
В поле Действие для базового правила по умолчанию выберите
Разрешить
. -
В блоке Правила безопасности напротив правила
sp-rule-1
нажмите значок и выберите Редактировать. -
Включите опцию Только логирование (dry run).
Эта опция используется для тестирования работы профиля. В режиме логирования трафик не блокируется и пользователи не будут отключены от вашего сервиса из-за неправильно настроенного профиля. Проанализируйте работу профиля и настройте правила в соответствии с потребностями вашего сервиса.
-
Нажмите кнопку Сохранить изменения.
-
Нажмите кнопку Создать.
Другие способы создания профиля безопасности см. в разделе Создать профиль безопасности.
Создание L7-балансировщика
- В консоли управления
выберите каталог СИБ. - В списке сервисов выберите Application Load Balancer.
- Нажмите кнопку Создать L7-балансировщик и выберите Визард.
Настройка целевой группы
На ВМ из целевой группы развертываются бэкенды вашего приложения. Целевая группа будет подключена к балансировщику, чтобы на эндпоинты бэкендов вашего приложения можно было направлять запросы.
-
Введите имя целевой группы:
test-target-group
. -
Укажите внутренний IP-адрес вашего целевого ресурса: адрес обработчика внутреннего NLB вашего сервиса или адрес ВМ.
-
Выберите подсеть, в которой размещены ресурсы вашего сервиса.
Для выбора подсети пользователь должен иметь роль
vpc.user
на каталог, в котором находится подсеть. -
Задайте настройки других целевых ресурсов: нажмите кнопку Добавить целевой ресурс и укажите адреса и подсети.
-
Нажмите кнопку Создать и продолжить.
Настройка группы бэкендов
Группы бэкендов содержат настройки балансировки трафика и проверок состояния целевых ресурсов. Визард автоматически создает один бэкенд и одну группу проверки состояния. В качестве целевой группы будет выбрана группа, созданная на предыдущем шаге.
-
Включите Расширенные настройки.
-
Введите имя группы бэкендов:
test-backend-group
. -
Тип группы оставьте
HTTP
. -
Чтобы запросы одной пользовательской сессии обрабатывал один и тот же ресурс бэкенда, включите Привязка сессий (session affinity). Если в качестве целевого ресурса используется внутренний балансировщик NLB, привязку сессий можно не включать.
-
В блоке Бэкенды:
- Введите имя бэкенда:
backend-1
. - Оставьте тип бэкенда —
Целевая группа
. - Оставьте созданную ранее целевую группу:
test-target-group
. - Укажите TCP-порт вашего сервиса. Обычно
80
для HTTP и443
для HTTPS. - Если в качестве целевого ресурса используется ВМ, настройте проверку состояния.
- Если в качестве целевого ресурса используется внутренний балансировщик NLB, удалите проверку состояния.
- Введите имя бэкенда:
-
Нажмите кнопку Создать и продолжить.
Настройка HTTP-роутера
HTTP-роутеры определяют правила маршрутизации запросов к бэкендам и позволяют модифицировать запросы прямо на балансировщике. Визард автоматически создает виртуальный хост и правило маршрутизации. В качестве группы бэкендов будет выбрана группа, созданная на предыдущем шаге.
-
Введите имя роутера:
test-http-router
. -
Включите Расширенные настройки.
-
В блоке Виртуальные хосты задайте:
-
Имя хоста:
test-virtual-host
. -
Authority — имя домена вашего сервиса.
-
Профиль безопасности — профиль, созданный ранее.
Если профиль не выбран, защита Smart Web Security работать не будет.
-
-
Задайте параметры маршрута:
- Имя маршрута:
test-route
. - Путь — Начинается с и далее
\
. - Действие — Маршрутизация.
- Группа бэкендов — оставьте созданную ранее группу.
- Имя маршрута:
-
Нажмите кнопку Создать и продолжить.
Настройка L7-балансировщика
Балансировщик принимает запросы и распределяет их по ВМ из целевой группы в соответствии с правилами, указанным в HTTP-роутере. Для приема трафика балансировщик использует обработчики. Визард создает обработчик автоматически. В качестве HTTP-роутера будет выбран роутер, созданный на предыдущем шаге.
-
Введите имя балансировщика:
test-load-balancer
. -
Включите Расширенные настройки.
-
В блоке Сетевые настройки выберите созданную ранее сеть VPC.
-
Для Группы безопасности выберите Из списка и далее группу безопасности, созданную ранее.
-
В блоке Размещение выберите подсети в нужных зонах доступности и включите прием трафика в этих подсетях.
-
Настройте обработчик:
- Введите имя обработчика:
test-listener
. - В блоке Публичный IP-адрес включите публичный IP-адрес и укажите:
- Порт — TCP-порт вашего сервиса. Обычно
443
для HTTPS и80
для HTTP. - Тип —
список
и выберите публичный IP-адрес, зарезервированный ранее.
- Порт — TCP-порт вашего сервиса. Обычно
- В блоке Приём и обработка трафика укажите:
- Тип обработчика —
HTTP
. - Протокол —
HTTP
илиHTTPS
. - Для протокола HTTPS выберите TLS-сертификат вашего сервиса, добавленный ранее в Certificate Manager.
- HTTP-роутер — оставьте созданный ранее роутер.
- Тип обработчика —
- Введите имя обработчика:
-
Нажмите кнопку Создать.
Если в вашей инфраструктуре уже используется L7-балансировщик и настроен обработчик с публичным IP-адресом:
- В консоли управления
выберите сервис Application Load Balancer. - Выберите L7-балансировщик.
- В блоке Обработчики напротив обработчика с публичным IP-адресом нажмите значок
и выберите Редактировать. - В блоке Приём и обработка трафика нажмите Добавить обработчик SNI и укажите:
-
Имена серверов — доменное имя вашего сервиса. В этом поле задаются значения расширения SNI, при получении которых от клиента будет задействован обработчик для установки TLS-соединения.
Совет
Некоторые браузеры переиспользуют TLS-соединения с одним IP-адресом, если в сертификате соединения есть нужное доменное имя. При этом обработчик SNI не выбирается заново, а значит трафик может направляться на неправильный HTTP-роутер. Чтобы избежать этого, используйте разные сертификаты для разных обработчиков SNI и основного обработчика. Для управления трафиком между доменными именами в одном сертификате настройте виртуальные хосты в HTTP-роутере.
-
Сертификаты — TLS-сертификат вашего сервиса, добавленный ранее в Certificate Manager.
-
HTTP-роутер — созданный ранее HTTP-роутер.
-
Другие способы создания L7-балансировщика и дополнительные настройки см. в разделе Пошаговые инструкции.
Проверка работы L7-балансировщика
-
В консоли управления
выберите каталог СИБ. -
В списке сервисов выберите Application Load Balancer.
-
Выберите созданный L7-балансировщик.
-
Слева выберите Проверки состояния.
Убедитесь, что все проверки состояния L7-балансировщика для вашей группы бэкендов находятся в состоянии
HEALTHY
. -
Слева выберите Карта балансировки.
Проверьте корректность настройки по схеме: Обработчик > HTTP-роутер > Группа бэкендов > Целевая группа.