Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Практические руководства
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Приглашение нового пользователя и назначение ролей
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Централизованная публикация в интернете и защита приложений от DDoS
    • Базовая настройка SWS
    • Экстренная защита сервисов в Application Load Balancer от DDoS на уровне L7
    • Передача логов с виртуальной машины в Cloud Logging
    • Запись логов балансировщика в PostgreSQL
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
    • Передача логов с Container Optimized Image в Cloud Logging
    • Добавление HTML-страницы для работы SmartCaptcha
      • Обзор
      • Консоль управления
      • Terraform
    • Настройка алертов в Monitoring
    • Загрузка аудитных логов в MaxPatrol SIEM
    • Загрузка аудитных логов в SIEM Splunk
    • Загрузка аудитных логов в SIEM ArcSight
    • Шифрование для бакета Object Storage на стороне сервера
    • Шифрование секретов в HashiCorp Terraform
    • Управление ключами KMS с HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault
    • Передача логов кластера Managed Service for Greenplum® в Yandex Cloud Logging

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Настройте DNS
  • Протестируйте работу профиля безопасности
  • Как удалить созданные ресурсы
  1. Безопасность
  2. Создание L7-балансировщика с профилем безопасности
  3. Terraform

Создание L7-балансировщика Yandex Application Load Balancer с профилем безопасности Yandex Smart Web Security с помощью Terraform

Статья создана
Yandex Cloud
Улучшена
kvendingoldo
Обновлена 14 августа 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Настройте DNS
  • Протестируйте работу профиля безопасности
  • Как удалить созданные ресурсы

Чтобы создать L7-балансировщик с профилем безопасности Smart Web Security с помощью Terraform:

  1. Подготовьте облако к работе.
  2. Создайте инфраструктуру.
  3. Настройте DNS.
  4. Протестируйте работу профиля безопасности.

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

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

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

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

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

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

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры для L7-балансировщика с профилем безопасности Smart Web Security входят:

  • плата за постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud);
  • плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Application Load Balancer);
  • плата за запросы, обработанные правилами профиля безопасности (см. тарифы Yandex Smart Web Security).

Создайте инфраструктуруСоздайте инфраструктуру

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Для создания инфраструктуры c помощью Terraform:

  1. Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).

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

    Готовая конфигурация
    Вручную
    1. Клонируйте репозиторий с конфигурационными файлами.

      git clone https://github.com/yandex-cloud-examples/yc-alb-with-sws-profile.git
      
    2. Перейдите в директорию с репозиторием. В ней должны появиться файлы:

      • alb-smartwebsecurity-config.tf — конфигурация создаваемой инфраструктуры.
      • alb-smartwebsecurity.auto.tfvars — файл с пользовательскими данными.
    1. Создайте папку для конфигурационных файлов.
    2. Создайте в папке:
      1. Конфигурационный файл alb-smartwebsecurity-config.tf:

        alb-smartwebsecurity-config.tf
        # Объявление переменных для конфиденциальных параметров
        
        variable "folder_id" {
          type = string
        }
        
        variable "vm_user" {
          type = string
        }
        
        variable "ssh_key_path" {
          type = string
        }
        
        variable "allowed_ip" {
          type = string
        }
        
        # Добавление прочих переменных
        
        locals {
          zone               = "kz1-a"
          network_name       = "web-network"
          subnet_name        = "subnet1"
          sg_vm_name         = "sg-web"
          vm_name            = "test-vm1"
          vm_image_family    = "lemp"
        }
        
        # Настройка провайдера
        
        terraform {
          required_providers {
            yandex = {
              source  = "yandex-cloud/yandex"
              version = ">= 0.47.0"
            }
          }
        }
        
        provider "yandex" {
          folder_id = var.folder_id
        }
        
        # Создание облачной сети
        
        resource "yandex_vpc_network" "network-1" {
          name = local.network_name
        }
        
        # Создание подсети
        
        resource "yandex_vpc_subnet" "subnet-1" {
          name           = local.subnet_name
          v4_cidr_blocks = ["192.168.1.0/24"]
          zone           = local.zone
          network_id     = yandex_vpc_network.network-1.id
        }
        
        # Создание группы безопасности
        
        resource "yandex_vpc_security_group" "sg-1" {
          name        = local.sg_vm_name
          network_id  = yandex_vpc_network.network-1.id
          egress {
            protocol       = "ANY"
            description    = "any"
            v4_cidr_blocks = ["0.0.0.0/0"]
            from_port      = 1
            to_port        = 65535
          }
          ingress {
            protocol       = "TCP"
            description    = "ext-http"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 80
          }
          ingress {
            protocol       = "TCP"
            description    = "ext-https"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 443
          }
          ingress {
            protocol          = "TCP"
            description       = "healthchecks"
            predefined_target = "loadbalancer_healthchecks"
            port              = 30080
          }
        }
        
        # Добавление готового образа ВМ
        
        resource "yandex_compute_image" "lamp-vm-image" {
          source_family = local.vm_image_family
        }
        
        resource "yandex_compute_disk" "boot-disk" {
          name     = "bootvmdisk"
          type     = "network-hdd"
          zone     = local.zone
          size     = "20"
          image_id = yandex_compute_image.lamp-vm-image.id
        }
        
        # Создание ВМ
        
        resource "yandex_compute_instance" "vm" {
          name        = local.vm_name
          platform_id = "standard-v3"
          zone        = local.zone
          resources {
            core_fraction = 20
            cores         = 2
            memory        = 1
          }
          boot_disk {
            disk_id = yandex_compute_disk.boot-disk.id
          }
          network_interface {
            subnet_id          = yandex_vpc_subnet.subnet-1.id
            nat                = true
            security_group_ids = [yandex_vpc_security_group.sg-1.id]
          }
          metadata = {
            user-data = "#cloud-config\nusers:\n  - name: ${var.vm_user}\n    groups: sudo\n    shell: /bin/bash\n    sudo: 'ALL=(ALL) NOPASSWD:ALL'\n    ssh_authorized_keys:\n      - ${file("${var.ssh_key_path}")}"
          }
        }
        
        # Создание профиля безопасности
        
        resource "yandex_sws_security_profile" "demo-profile-simple" {
          name           = "test-profile"
          default_action = "DENY"
          
          # Правило Smart Protection с полной защитой
          security_rule {
            name     = "smart-protection"
            priority = 999900
        
            smart_protection {
              mode = "FULL"
            }
          }
        
          # Базовое правило, пропускает трафик с указанного IP-адреса без проверки правилом Smart Protection
          security_rule {
            name     = "my-rule"
            priority = 999800
        
            rule_condition {
              action = "ALLOW"
              condition {
                source_ip {
                  ip_ranges_match {
                    ip_ranges = [var.allowed_ip]
        
                  }
                }
              }
            }
          }
        }
        
        # Создание целевой группы
        
        resource "yandex_alb_target_group" "foo" {
          name           = "test-target-group"
        
          target {
            subnet_id    = yandex_vpc_subnet.subnet-1.id
            ip_address   = yandex_compute_instance.vm.network_interface.0.ip_address
          }
        }
        
        # Создание группы бекендов
        
        resource "yandex_alb_backend_group" "alb-bg" {
          name                     = "test-backend-group"
        
          http_backend {
            name                   = "backend-1"
            port                   = 80
            target_group_ids       = [yandex_alb_target_group.foo.id]
            healthcheck {
              timeout              = "10s"
              interval             = "2s"
              healthcheck_port     = 80
              http_healthcheck {
                path               = "/"
              }
            }
          }
        }
        
        # Создание HTTP-роутера
        
        resource "yandex_alb_http_router" "alb-router" {
          name   = "test-http-router"
        }
        
        resource "yandex_alb_virtual_host" "alb-host" {
          name           = "test-virtual-host"
          http_router_id = yandex_alb_http_router.alb-router.id
          authority      = ["*"]
          route {
            name = "route-1"
            http_route {
              http_route_action {
                backend_group_id = yandex_alb_backend_group.alb-bg.id
              }
            }
          }
          route_options {
            security_profile_id   = yandex_sws_security_profile.demo-profile-simple.id
          }
        }
        
        
        # Создание L7-балансировщика
        
        resource "yandex_alb_load_balancer" "sws-balancer" {
          name               = "test-load-balancer"
          network_id         = yandex_vpc_network.network-1.id
          security_group_ids = [yandex_vpc_security_group.sg-1.id]
        
          allocation_policy {
            location {
              zone_id   = local.zone
              subnet_id = yandex_vpc_subnet.subnet-1.id
            }
          }
        
          listener {
            name = "listener"
            endpoint {
              address {
                external_ipv4_address {
                }
              }
              ports = [80]
            }
            http {
              handler {
                http_router_id = yandex_alb_http_router.alb-router.id
              }
            }
          }
        }
        
      2. Файл с пользовательскими данными alb-smartwebsecurity.auto.tfvars:

        alb-smartwebsecurity.auto.tfvars
        folder_id    = "<идентификатор_каталога>"
        vm_user      = "<имя_пользователя_ВМ>"
        ssh_key_path = "<путь_к_публичному_SSH-ключу>"
        allowed_ip   = "<разрешенный_IP-адрес_устройства>"
        

    Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:

    • Сеть — yandex_vpc_network.
    • Подсети — yandex_vpc_subnet.
    • Группы безопасности — yandex_vpc_security_group.
    • Образ ВМ — yandex_compute_image.
    • Группа бэкендов — yandex_alb_backend_group.
    • HTTP-роутер — yandex_alb_http_router.
    • Виртуальный хост — yandex_alb_virtual_host.
    • L7-балансировщик — yandex_alb_load_balancer.
    • Профиль безопасности — yandex_sws_security_profile.
  3. В файле alb-smartwebsecurity.auto.tfvars задайте пользовательские параметры:

    • folder_id — идентификатор каталога.
    • vm_user — имя пользователя ВМ.
    • ssh_key_path — путь к файлу с публичным SSH-ключом. Подробнее см. Создание пары ключей SSH.
    • allowed_ip — публичный IP-адрес устройства, с которого вы будете отправлять запросы L7-балансировщику.
  4. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

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

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

  5. Получите IP-адрес L7-балансировщика — он потребуется далее, чтобы проверить работу профиля безопасности.

После создания инфраструктуры, настройте DNS и проверьте работу профиля безопасности.

Настройте DNSНастройте DNS

  1. Добавьте ресурсную А-запись в публичную DNS-зону вашего домена, указав в ней значения:

    • Имя записи — адрес вашего домена, заканчивающийся на точку. Например: example.com. или my.first.example.com..
    • Значение — IP-адрес L7-балансировщика. Чтобы узнать IP-адрес, воспользуйтесь инструкцией Получить информацию об L7-балансировщике.

    Эта запись перенаправит запросы, которые будут поступать на ваш домен, на IP-адрес L7-балансировщика.

    Примечание

    Если ваш домен делегирован Yandex Cloud DNS, создайте ресурсную запись по инструкции. В остальных случаях воспользуйтесь личным кабинетом вашего регистратора доменных имен. Если нужна помощь, обратитесь к документации регистратора или в его поддержку.

  2. В настройках вашего сервера запретите все соединения и разрешите только соединения для IP-адресов Yandex Cloud.

Протестируйте работу профиля безопасностиПротестируйте работу профиля безопасности

  1. Откройте терминал устройства, IP-адрес которого вы указали в разрешающем правиле.

  2. Отправьте запрос на бэкенд тестового приложения:

    curl --verbose <публичный_IP-адрес_L7-балансировщика>
    

    В результате должно быть выведено содержимое директории с тестовым веб-сервером.

  3. Повторите запрос с другого IP-адреса. В результате должно быть выведено сообщение о невозможности установить соединение с сервером.

Примечание

Проверка правил Smart Protection не проводится. При такой проверке параметры подозрительных запросов, в том числе IP-адреса, заносятся в черный список.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  1. Откройте конфигурационный файл alb-smartwebsecurity-config.tf и удалите описание создаваемой инфраструктуры из файла.

  2. Примените изменения:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

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

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

См. такжеСм. также

  • Создание L7-балансировщика Yandex Application Load Balancer с профилем безопасности Yandex Smart Web Security с помощью консоли управления

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

Предыдущая
Консоль управления
Следующая
Настройка алертов в Monitoring
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»