Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка пользовательской интеграции в API Gateway
    • Разработка CRUD API для сервиса фильмов
    • Построение пайплайна CI/CD в GitLab
    • Работа с API-шлюзом по протоколу WebSocket
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Автоматическое копирование объектов из одного бакета Object Storage в другой
    • Визуализация логов в Grafana с помощью плагина Cloud Logging
    • Канареечный релиз функции Cloud Functions
    • Интерактивная отладка функций Cloud Functions
    • Создание функции Node.js с помощью TypeScript
    • Запуск контейнерного приложения в Serverless Containers
    • Передача событий Yandex Cloud Postbox в Data Streams и их анализ с помощью DataLens
    • Использование API Gateway для настройки синтеза речи в SpeechKit
    • Подключение к YDB из функции Cloud Functions на Python
    • Подключение к базе данных YDB из функции Cloud Functions на Node.js
    • Защита API Gateway при помощи Smart Web Security
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Автоматическая загрузка данных в Yandex SpeechSense с помощью Yandex Workflows
    • Настройка реагирования в Cloud Logging и Yandex Cloud Functions
    • Настройка интеграций Workflows с Tracker, YandexGPT и Yandex Cloud Postbox
    • Разработка функций в Functions Framework и их развертывание в Yandex Serverless Containers

В этой статье:

  • Подготовьте облако к работе
  • Создайте профиль ARL и профиль безопасности Smart Web Security
  • Создайте API-шлюз
  • Проверьте работу созданных ресурсов
  • Проверка лимита запросов
  • Проверка группировки запросов
  • Проверка блокировки по IP
  1. Бессерверные технологии
  2. Защита API Gateway при помощи Smart Web Security

Защита API Gateway при помощи Smart Web Security

Статья создана
Yandex Cloud
Обновлена 13 февраля 2025 г.
  • Подготовьте облако к работе
  • Создайте профиль ARL и профиль безопасности Smart Web Security
  • Создайте API-шлюз
  • Проверьте работу созданных ресурсов
    • Проверка лимита запросов
    • Проверка группировки запросов
    • Проверка блокировки по IP

Yandex API Gateway поддерживает интеграцию с сервисом Yandex Smart Web Security. Благодаря этому вы можете настроить для API-шлюза защиту от DDoS-атак и ботов на прикладном уровне L7 модели OSI.

Профили безопасности Smart Web Security позволяют настроить защиту с различными условиями. Например, вы можете установить лимит запросов с группировкой запросов по параметрам, а также настроить блокировку запросов по IP-адресу пользователя. Для этого:

  1. Подготовьте облако к работе.
  2. Создайте профиль ARL и профиль безопасности Smart Web Security.
  3. Создайте API-шлюз.
  4. Проверьте работу созданных ресурсов.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Создайте профиль ARL и профиль безопасности Smart Web SecurityСоздайте профиль ARL и профиль безопасности Smart Web Security

Консоль управления
Terraform
  1. Создайте профиль ARL с именем arl-profile.

  2. Добавьте в профиль правило с лимитом запросов и группировкой запросов по параметру token. Укажите следующие параметры:

    • Имя — query-limit-rule;
    • Приоритет — 999900;
    • Группировать запросы — По характеристикам;
    • Характеристика — Query params;
    • Группировать по — token;
    • Лимит запросов на группу — 1 за 1 минуту.
  3. Создайте профиль безопасности sws-profile по преднастроенному шаблону. При создании выберите в поле Профиль ARL созданный ранее профиль arl-profile.

  4. Чтобы настроить блокировку по IP-адресу пользователя, добавьте правило к профилю безопасности Smart Web Security со следующими параметрами:

    • Имя — ip-block-rule;

    • Приоритет — 999700;

    • Тип правила — Базовое;

    • Действие — Разрешить;

    • Условия на трафик:

      • Трафик — При условии;
      • Условия — IP;
      • Условия на IP — Совпадает или принадлежит диапазону;
      • IP совпадает или принадлежит диапазону — укажите ваш IP-адрес.
  1. Если у вас еще нет Terraform, установите его.

  2. Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.

  3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

  4. Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

  5. Скачайте в ту же рабочую директорию файл конфигурации api-gw-sws-integration.tf.

    В этом файле описаны:

    • Профиль ARL, устанавливающий лимит запросов и группировку запросов по параметру token.
    • Профиль безопасности Smart Web Security, который использует профиль ARL и дополнительно устанавливает блокировку по IP-адресу.
    • API-шлюз, настроенный на работу с профилем безопасности Smart Web Security.
  6. В блоке с локальными переменными файла api-gw-sws-integration.tf укажите следующие параметры:

    • arl_name — имя профиля ARL.
    • folder_id — идентификатор каталога, в котором будет создан профиль ARL.
    • sws_name — имя профиля Smart Web Security.
    • allowed_ips — список IP-адресов, с которых разрешен доступ к API-шлюзу.
    • api-gw-name — имя API-шлюза.
  7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  8. Создайте необходимую инфраструктуру:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

Создайте API-шлюзСоздайте API-шлюз

Консоль управления
Terraform

Создайте 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

Остальные параметры оставьте без изменений.

  1. В файле api-gw-sws-integration.tf:

    1. В параметре securityProfileId спецификации API-шлюза укажите идентификатор созданного ранее профиля безопасности Smart Web Security.

    2. В блоке локальных переменных укажите значение create-api-gw = 1.

  2. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  3. Создайте необходимую инфраструктуру:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

Проверьте работу созданных ресурсовПроверьте работу созданных ресурсов

Протестируйте работу настроек Smart Web Security:

  • Лимит запросов.
  • Группировка запросов.
  • Блокировка запроса по IP-адресу.

Проверка лимита запросовПроверка лимита запросов

  1. Выполните GET-запрос к API-шлюзу:

    curl <служебный_домен_API-шлюза>
    

    Результат выполнения команды:

    This application is protected by SWS!
    
  2. Сразу же повторите запрос. В ответ вы получите веб-страницу с кодом ошибки 429. Это значит, что лимит количества запросов сработал и заблокировал ваш запрос.

  3. Подождите минуту и повторите запрос. Ответ должен быть идентичен ответу на первый запрос:

    This application is protected by SWS!
    

Проверка группировки запросовПроверка группировки запросов

  1. Выполните GET-запрос к API-шлюзу с параметром token=token:

    curl <служебный_домен_API-шлюза>?token=token
    

    Результат выполнения команды:

    This application is protected by SWS!
    
  2. Сразу же повторите запрос. В ответ вы получите веб-страницу с кодом ошибки 429. Это значит, что лимит количества запросов сработал и заблокировал ваш запрос.

  3. В эту же минуту повторите запрос, но измените значение параметра token:

    curl <служебный_домен_API-шлюза>?token=token2
    

    Результат выполнения команды:

    This application is protected by SWS!
    

    Это значит, что ваш запрос попал в новую группу, для которой еще не срабатывал лимит количества запросов. Поэтому запрос был успешно выполнен.

Проверка блокировки по IPПроверка блокировки по IP

  1. Выполните GET-запрос к API-шлюзу с IP-адреса, который вы указали в профиле безопасности Smart Web Security:

    curl <служебный_домен_API-шлюза>
    

    Результат выполнения команды:

    This application is protected by SWS!
    
  2. Выполните запрос с другого IP-адреса, например с ВМ в облаке:

    curl --verbose <служебный_домен_API-шлюза>
    

    В ответ вы получите веб-страницу с капчей. Это значит, что Smart Web Security заблокировал запрос с IP-адреса, который не входит в список разрешенных.

Удалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать, в зависимости от способа их создания:

Консоль управления
Terraform
  1. Удалите API-шлюз.
  2. Удалите профиль безопасности Smart Web Security.
  3. Удалите профиль ARL.
  1. В терминале перейдите в директорию с планом инфраструктуры.

    Важно

    Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

  2. Удалите ресурсы:

    1. Выполните команду:

      terraform destroy
      
    2. Подтвердите удаление ресурсов и дождитесь завершения операции.

    Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

Была ли статья полезна?

Предыдущая
Подключение к базе данных YDB из функции Cloud Functions на Node.js
Следующая
Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
Проект Яндекса
© 2025 ООО «Яндекс.Облако»