[Документация Yandex Cloud](../../index.md) > [Yandex Smart Web Security](../index.md) > [Практические руководства](index.md) > Создание распределенной инфраструктуры с защищенным доступом

# Создание распределенной инфраструктуры с защищенным доступом

# Создание распределенной инфраструктуры с защищенным доступом

В этом руководстве вы создадите инфраструктуру для организации защищенного доступа к веб-приложениям, размещенным в разных каталогах Yandex Cloud. Для контроля трафика все запросы к веб-приложениям будут приниматься на общий IP-адрес и проверяться правилами профиля безопасности [Yandex Smart Web Security](https://yandex.cloud/ru/services/smartwebsecurity).

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

Это руководство — частный сценарий руководства [Централизованная публикация в интернете и защита от DDoS-атак приложений в разных каталогах](different-folders-services.md). В руководстве приведен пример сценария создания всей инфраструктуры с нуля.

Минимальные [роли](../../iam/roles-reference.md), необходимые для выполнения руководства:

* На облако:
    * `resource-manager.admin` — для создания каталогов и назначения ролей.

* На каталоги:
    * `vpc.admin` — для создания ресурсов в Yandex Virtual Private Cloud.
    * `smart-web-security.editor` — для создания профиля безопасности.
    * `compute.editor` — для создания виртуальных машин.
    * `alb.editor` — для создания ресурсов в Yandex Application Load Balancer


## Схема размещения ресурсов в Yandex Cloud {#resource-allocation-scheme}

![image](../../_assets/smartwebsecurity/different-folders-for-security.svg)

На схеме обозначены следующие ресурсы:

* **IP-адрес** — публичный IP-адрес или домен, на который поступают запросы к веб-приложениям.
* **Каталог безопасности** `secured-entry-point` — [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), доступ к которому должны иметь только администраторы ресурсов компании и сотрудники службы информационной безопасности (СИБ). В этом каталоге будут располагаться:

    * **ALB** `app-load-balancer` — [L7-балансировщик](../../application-load-balancer/concepts/application-load-balancer.md) Yandex Application Load Balancer, через который веб-приложения публикуются в интернете.
    * **SWS** `sws-profile` — [профиль безопасности](../concepts/profiles.md) Yandex Smart Web Security для защиты трафика на уровне приложений (L7).
    * **Управляющая ВМ** `work-station` — [виртуальная машина](../../compute/concepts/vm.md) Yandex Compute Cloud, с которой происходит подключение к ВМ в каталогах веб-приложений.

* **VPC** `alb-network` — [облачная сеть](../../vpc/concepts/network.md) Yandex Virtual Private Cloud, которая объединяет [подсети](../../vpc/concepts/network.md#subnet) в разных каталогах:

    * **alb-subnet-a**, **alb-subnet-b**, **alb-subnet-d** — подсети с узлами ALB в трех зонах доступности.
    * **subnet-service-1**, **subnet-service-2** — подсети с ресурсами веб-приложений.

* **Каталоги веб-приложений** `service-1` и `service-2` с целевыми ресурсами веб-приложений — ВМ `vm-service-1` и `vm-service-2`. Доступ к этим каталогам будут иметь команды, разрабатывающие веб-сервисы.

Чтобы создать инфраструктуру и организовать защищенный доступ к веб-приложениям:

1. [Подготовьте облако к работе](#prepare-cloud).
1. [Создайте каталог безопасности](#create-alb-folder).
1. [Создайте виртуальную сеть и подсети](#create-vpc).
1. [Создайте каталоги для веб-приложений](#create-web-folders).
1. [Подключите каталоги веб-приложений к внутренним подсетям балансировщика](#connect-folders).
1. [Настройте группы безопасности](#setup-security-groups).
1. [Настройте профиль безопасности](#setup-sws).
1. [Создайте ресурсы](#create-resources).
1. [Настройте балансировщик](#setup-alb).
1. [Проверьте инфраструктуру](#check-infrastructure).

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).


## Подготовьте облако к работе {#prepare-cloud}

Зарегистрируйтесь в Yandex Cloud и создайте [платежный аккаунт](../../billing/concepts/billing-account.md):
1. Перейдите в [консоль управления](https://console.yandex.cloud), затем войдите в Yandex Cloud или зарегистрируйтесь.
1. На странице **[Yandex Cloud Billing](https://center.yandex.cloud/billing/accounts)** убедитесь, что у вас подключен платежный аккаунт, и он находится в [статусе](../../billing/concepts/billing-account-statuses.md) `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, [создайте его](../../billing/quickstart/index.md) и [привяжите](../../billing/operations/pin-cloud.md) к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), в котором будет работать ваша инфраструктура, на [странице облака](https://console.yandex.cloud/cloud).

[Подробнее об облаках и каталогах](../../resource-manager/concepts/resources-hierarchy.md).


### Необходимые платные ресурсы {#paid-resources}

В стоимость поддержки инфраструктуры входит:

* плата за постоянно работающие ВМ ([тарифы Yandex Compute Cloud](../../compute/pricing.md));
* плата за использование Application Load Balancer ([тарифы Yandex Application Load Balancer](../../application-load-balancer/pricing.md));
* плата за использование публичных IP-адресов и исходящий трафик ([тарифы Yandex Virtual Private Cloud](../../vpc/pricing.md));
* плата за количество запросов в сервис Smart Web Security ([тарифы Yandex Smart Web Security](../pricing.md)).


## Создайте каталог безопасности {#create-alb-folder}

В каталоге безопасности будут располагаться балансировщик нагрузки, облачная сеть, подсети и профиль безопасности.


### Создайте каталог без сети {#folder-without-net}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите облако и нажмите ![create](../../_assets/console-icons/plus.svg) **Создать каталог**.
  1. Введите имя каталога, например, `secured-entry-point`.
  1. В поле **Дополнительно** отключите опцию **Создать сеть по умолчанию**. Сеть и подсети будут созданы на следующем шаге.
  1. Нажмите **Создать**.

{% endlist %}


### Назначьте роли на каталог {#set-access-binding}

Предоставьте администраторам инфраструктуры и СИБ доступ к каталогу для управления сетью, балансировщиком и профилем безопасности.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) перейдите в каталог `secured-entry-point`.
  1. Перейдите на вкладку **Права доступа**.
  1. Нажмите **Настроить доступ**.
  1. В открывшемся окне выберите раздел **Пользовательские аккаунты**.
  1. Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
  1. Нажмите ![image](../../_assets/console-icons/plus.svg) **Добавить роль** и выберите [роль](../../iam/roles-reference.md) из списка или воспользуйтесь поиском. Минимально необходимые роли:

      * `alb.editor` — управление ресурсами сервиса [Application Load Balancer](../../application-load-balancer/index.md).
      * `vpc.user` — подключение к сетевым ресурсам [Virtual Private Cloud](../../vpc/index.md) и их использование.
      * `smart-web-security.editor` — использование профилей безопасности [Smart Web Security](../index.md) и управление ими.
      * `compute.editor` — возможность создавать, обновлять и удалять ВМ [Compute Cloud](../../compute/index.md).

  1. Нажмите **Сохранить**.

{% endlist %}


## Создайте виртуальную сеть и подсети {#create-vpc}

В каталоге безопасности создайте сеть с подсетями для L7-балансировщика и каталогов веб-приложений. Это обеспечит сетевую связность между L7-балансировщиком и ресурсами веб-приложений.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Перейдите в созданный каталог `secured-entry-point`.
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. Справа сверху нажмите **Создать сеть**.
  1. В поле **Имя** введите `alb-network`.
  1. В поле **Дополнительно** отключите опцию **Создать подсети**.
  1. Нажмите **Создать сеть**.
  1. На панели слева выберите ![subnets](../../_assets/vpc/subnets.svg) **Подсети**.
  1. Справа сверху нажмите **Создать подсеть** и введите параметры подсети для каталога веб-приложений:

      1. **Имя** — `subnet-service-1`.
      1. **Зона доступности** — `kz1-a`.
      1. **Сеть** — `alb-network`.
      1. **CIDR** — `10.121.0.0/24`.
      1. Нажмите **Создать подсеть**.

  1. Аналогично создайте подсеть с именем `subnet-service-2` в зоне доступности `kz1-b` с диапазоном IP-адресов `10.122.0.0/24`.
  1. Создайте подсети для L7-балансировщика в разных зонах доступности и с разными диапазонами адресов:

      * `subnet-alb-a` — `kz1-a`, `10.131.0.0/24`.
      * `subnet-alb-b` — `kz1-b`, `10.132.0.0/24`.
      * `subnet-alb-d` — `kz1-d`, `10.133.0.0/24`.

   {% endlist %}


## Создайте каталоги для веб-приложений {#create-web-folders}

В каталогах будут размещаться ресурсы веб-приложений. В этом руководстве — виртуальные машины с тестовыми веб-сервисами. Создайте каталоги и предоставьте пользователям доступ для подключения к сетевым ресурсам и управления ВМ.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Выберите облако и нажмите ![create](../../_assets/console-icons/plus.svg) **Создать каталог**.
  1. Введите имя каталога, например, `service-1`.
  1. В поле **Дополнительно** отключите опцию **Создать сеть по умолчанию**.
  1. Нажмите **Создать**.
  1. Аналогично создайте каталог `service-2`.
  1. Для ограничения доступа к каталогам [назначьте роли](#set-access-binding) пользователям в зависимости от ресурсов, которые будут размещены в каталоге. Минимально необходимые роли на каталоги `service-1` и `service-2`:

      * `vpc.user` — подключение к сетевым ресурсам [Virtual Private Cloud](../../vpc/index.md) и их использование.
      * `compute.editor` — возможность создавать, обновлять и удалять ВМ.

{% endlist %}


## Подключите каталоги веб-приложений к внутренним подсетям балансировщика {#connect-folders}

Чтобы объединить ресурсы каталогов в общую сеть, [переместите](../../vpc/operations/subnet-move.md) подсети виртуальной сети в каталоги веб-приложений.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) перейдите в каталог `secured-entry-point`.
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. Выберите облачную сеть `alb-network`.
  1. Нажмите ![image](../../_assets/console-icons/ellipsis.svg) в строке подсети `subnet-service-1` и выберите **Переместить**.
  1. В выпадающем списке выберите каталог `service-1`.
  1. Нажмите **Переместить**.
  1. Аналогично переместите подсеть `subnet-service-2` в каталог `service-2`.

{% endlist %}


## Настройте группы безопасности {#setup-security-groups}

[Группы безопасности](../../vpc/concepts/security-groups.md) позволяют настроить правила для входящего и исходящего трафика. В этом руководстве входящий трафик из интернета принимается L7-балансировщиком и маршрутизируется по внутренней сети на ВМ веб-приложений. Настройте группы безопасности в каждом из каталогов в соответствии с [рекомендациями](../../application-load-balancer/concepts/application-load-balancer.md#security-groups).


### Создайте группы безопасности для ВМ веб-приложений {#sg-vm-apps}

Правила должны разрешать исходящий и входящий трафик от подсети балансировщика.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите каталог `service-1`.
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. На панели слева выберите ![image](../../_assets/console-icons/shield.svg) **Группы безопасности**.
  1. Справа сверху нажмите **Создать группу безопасности**.
  1. В поле **Имя** укажите `service-1-security-group`.
  1. В поле **Сеть** выберите сеть `alb-network` из каталога `secured-entry-point`.
  1. В блоке **Правила** создайте следующие правила по инструкции под таблицей:

      | Направление<br/>трафика | Описание | Диапазон портов | Протокол | Источник /<br/>назначение | CIDR блоки |
      | --- | --- | --- | --- | --- | --- |
      | `Входящий` | `http` | `8000` | `TCP` | `CIDR` | `10.131.0.0/24`<br/>`10.132.0.0/24`<br/>`10.133.0.0/24` |
      | `Входящий` | `ssh` | `22` | `TCP` | `CIDR` | `10.133.0.0/24` |
      | `Исходящий` | `any` | `0-65535` | `Любой` | `CIDR` | `10.131.0.0/24`<br/>`10.132.0.0/24`<br/>`10.133.0.0/24` |

      Чтобы создать правило:
      
      1. Перейдите на вкладку **Входящий трафик** или **Исходящий трафик**.
      1. Нажмите **Добавить правило**.
      1. Добавьте новое правило в соответствии с таблицей.
      1. Нажмите **Сохранить**.

  1. Нажмите **Создать**.
  1. Аналогично создайте группу безопасности `service-2-security-group` в каталоге `service-2`.

{% endlist %}


### Создайте группу безопасности для L7-балансировщика {#sg-balancer}

Правила должны разрешать входящий трафик из интернета на порт `80` и трафик для проверки состояния узлов балансировщика на порт `30080` с источником `Проверки состояния балансировщика`.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите каталог `secured-entry-point`.
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. На панели слева выберите ![image](../../_assets/console-icons/shield.svg) **Группы безопасности**.
  1. Справа сверху нажмите **Создать группу безопасности**.
  1. В поле **Имя** укажите `alb-security-group`.
  1. В поле **Сеть** выберите сеть `alb-network`.
  1. В блоке **Правила** создайте следующие правила по инструкции под таблицей:

      | Направление<br/>трафика | Описание | Диапазон портов | Протокол | Источник /<br/>назначение | CIDR блоки |
      | --- | --- | --- | --- | --- | --- |
      | `Входящий` | `http` | `80` | `TCP` | `CIDR` | `0.0.0.0/0` |
      | `Входящий` | `healthchecks` | `30080` | `TCP` | `Проверки состояния балансировщика` | — |
      | `Исходящий` | `http` | `8000` | `Любой` | `CIDR` | `10.121.0.0/24`<br/>`10.122.0.0/24` |

      Чтобы создать правило:
      
      1. Перейдите на вкладку **Входящий трафик** или **Исходящий трафик**.
      1. Нажмите **Добавить правило**.
      1. Добавьте новое правило в соответствии с таблицей.
      1. Нажмите **Сохранить**.

  1. Нажмите **Создать**.

{% endlist %}


### Создайте группы безопасности для управляющей ВМ {#sg-vm}

Правила должны разрешать исходящий трафик от управляющей ВМ к порту `22` ВМ веб-приложений.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите каталог `secured-entry-point`.
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. На панели слева выберите ![image](../../_assets/console-icons/shield.svg) **Группы безопасности**.
  1. Справа сверху нажмите **Создать группу безопасности**.
  1. В поле **Имя** укажите `vm-security-group`.
  1. В поле **Сеть** выберите сеть `alb-network`.
  1. В блоке **Правила** создайте следующие правила по инструкции под таблицей:

      | Направление<br/>трафика | Описание | Диапазон портов | Протокол | Источник /<br/>назначение | CIDR блоки |
      | --- | --- | --- | --- | --- | --- |
      | `Входящий` | `ssh` | `22` | `TCP` | `CIDR` | `0.0.0.0/0` ^*^ |
      | `Исходящий` | `ssh` | `22` | `TCP` | `CIDR` | `10.121.0.0/24`<br/>`10.122.0.0/24` |

      ^*^ Рекомендуется вместо `0.0.0.0/0` указать CIDR блоки публичных IP-адресов, с которых вы хотите разрешить подключение к управляющей ВМ.

      Чтобы создать правило:
      
      1. Перейдите на вкладку **Входящий трафик** или **Исходящий трафик**.
      1. Нажмите **Добавить правило**.
      1. Добавьте новое правило в соответствии с таблицей.
      1. Нажмите **Сохранить**.

  1. Нажмите **Создать**.

{% endlist %}


## Настройте профиль безопасности {#setup-sws}

Профиль безопасности содержит [правила](../concepts/rules.md) фильтрации трафика для защиты от информационных угроз на прикладном уровне L7 модели OSI.

Создайте профиль безопасности по преднастроенному шаблону:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите каталог `secured-entry-point`.
  1. Перейдите в сервис **Smart Web Security**.
  1. На панели слева выберите ![image](../../_assets/smartwebsecurity/profiles.svg) **Профили безопасности** и нажмите **Создать профиль**.
  1. Выберите **По преднастроенному шаблону**.
  1. Введите имя профиля — `sws-profile`.
  1. В поле **Действие для базового правила по умолчанию** выберите `Разрешить`.
  1. Нажмите **Создать профиль**.

{% endlist %}


## Создайте ресурсы {#create-resources}

В качестве ресурсов будут использоваться виртуальные машины, по одной в каждом каталоге. ВМ в каталоге безопасности `secured-entry-point` необходима для доступа к виртуальным машинам веб-приложений по внутренней сети. В этом руководстве она называется _управляющей ВМ_.

Для ограничения внешнего трафика виртуальные машины веб-приложений не будут иметь внешний IP-адрес.


### Создайте ВМ для управления веб-приложениями {#vm-secured-entry-point}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите каталог `secured-entry-point`.
  1. Перейдите в сервис **Compute Cloud**.
  1. На панели слева выберите ![image](../../_assets/console-icons/server.svg) **Виртуальные машины**.
  1. Нажмите **Создать виртуальную машину**.
  1. В блоке **Образ загрузочного диска** выберите операционную систему [Ubuntu 24.04](https://yandex.cloud/ru-kz/marketplace/products/yc/ubuntu-2404-lts-oslogin).
  1. В блоке **Расположение** выберите зону доступности `kz1-d`.
  1. В блоке **Сетевые настройки**:

      * В поле **Подсеть** убедитесь, что выбрана подсеть `subnet-alb-d`.
      * В поле **Публичный IP-адрес** оставьте значение `Автоматически`.
      * В поле **Группы безопасности** выберите группу безопасности `vm-security-group`.

  1. В блоке **Доступ** выберите вариант **SSH-ключ**.
  1. В поле **Логин** введите имя пользователя ВМ. Не используйте имена `root`, `admin` или другие, зарезервированные ОС.
  1. В поле **SSH-ключ** выберите SSH-ключ, сохраненный в вашем профиле [пользователя организации](../../organization/concepts/membership.md).

      Чтобы добавить новый ключ:

      1. Нажмите **Добавить ключ**.
      1. Задайте имя SSH-ключа.
      1. Выберите вариант:

          * `Ввести вручную` — вставьте содержимое открытого [SSH](../../glossary/ssh-keygen.md)-ключа. Пару SSH-ключей необходимо [создать](../../compute/operations/vm-connect/ssh.md#creating-ssh-keys) самостоятельно.
          * `Загрузить из файла` — загрузите открытую часть SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно.
          * `Сгенерировать ключ` — автоматическое создание пары SSH-ключей.

      1. Нажмите **Добавить**.

  1. В блоке **Общая информация** задайте имя ВМ `work-station`.
  1. Нажмите **Создать ВМ**.

{% endlist %}


### Создайте ВМ для веб-приложений {#vm-web-app}

Аналогично создайте ВМ в каталогах `service-1` и `service-2`, при этом:

* Выберите зоны доступности `kz1-a` и `kz1-b` соответственно.
* Убедитесь, что для ВМ выбраны подсети `subnet-service-1` и `subnet-service-2` соответственно.
* В поле **Публичный IP-адрес** выберите опцию `Без адреса`.
* В поле **Группы безопасности** выберите группы безопасности `service-1-security-group` и `service-2-security-group`.
* Укажите имена ВМ `vm-service-1` и `vm-service-2`.


## Настройте балансировщик {#setup-alb}

Создайте и настройте балансировщик с помощью [визарда](../../application-load-balancer/concepts/index.md#alb-wizard).

{% note warning %}

Визард позволяет создать и подключить только одну [целевую группу](../../application-load-balancer/concepts/target-group.md) и только одну [группу бэкендов](../../application-load-balancer/concepts/backend-group.md), то есть ресурсы из одного каталога. Ресурсы второго каталога нужно подключить вручную.

{% endnote %}


### Запустите визард {#start-wizard}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите каталог `secured-entry-point`.
  1. Перейдите в сервис **Application Load Balancer**.
  1. Нажмите **Создать L7-балансировщик** и выберите **Визард**. Визард перейдет на страницу создания целевых групп.

{% endlist %}


### Настройте целевую группу {#setup-target-group}

В целевые группы входят ВМ, созданные в каталогах веб-приложений. Целевые группы будут подключены к балансировщику через внутренние подсети.

Создайте целевую группу для каталога `service-1`:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Введите имя целевой группы: `target-group-1`.
  1. В списке целевых ресурсов будет указан только IP-адрес управляющей ВМ. Добавьте в список ресурсов новый целевой ресурс:

      1. Под списком ресурсов в блоке с кнопкой **Добавить целевой ресурс** укажите внутренний IP-адрес ВМ `vm-service-1`.
      1. Там же выберите подсеть `subnet-service-1` в выпадающем списке с плейсхолдером `Не выбрано`. Чтобы найти нужную подсеть, включите опцию `Во всех каталогах`.
      1. Нажмите **Добавить целевой ресурс**.
      1. Активируйте новый целевой ресурс в списке ресурсов.
      1. Убедитесь, что ресурс управляющей ВМ деактивирован.

  1. Нажмите **Создать и продолжить**. Визард перейдет на страницу создания группы бэкендов.

{% endlist %}


### Настройте группы бэкендов {#settings-backend-group}

Группы бэкендов содержат настройки балансировки трафика и [проверок состояния](../../application-load-balancer/concepts/best-practices.md) целевых ресурсов. Визард автоматически создает один бэкенд и одну группу проверки состояния. В качестве целевой группы будет выбрана группа, созданная на предыдущем шаге.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Включите **Расширенные настройки**.
  1. Введите имя группы бэкендов: `backend-group-1`.
  1. Тип группы оставьте `HTTP`.
  1. Чтобы запросы одной пользовательской сессии обрабатывал один и тот же ресурс бэкенда, активируйте опцию **Привязка сессий**.
  1. В блоке **Бэкенды**:

      * Введите имя бэкенда: `backend-1`.
      * Оставьте тип бэкенда — `Целевая группа`.
      * Оставьте созданную ранее целевую группу: `target-group-1`.
      * Укажите TCP-порт вашего сервиса, который вы открыли в группе безопасности `service-1-security-group`. В этом руководстве это порт `8000`.

  1. В блоке **HTTP проверка состояния**:

      * Укажите тот же порт, который вы указали выше — `8000`.
      * В поле **Путь** оставьте значение без изменений, поскольку тестовый сервис не имеет специально выделенного эндпоинта для проверки состояния.

  1. Нажмите **Создать и продолжить**. Визард перейдет на страницу настройки HTTP-роутера.

{% endlist %}


### Настройте HTTP-роутер {#settings-http-router}

[HTTP-роутер](../../application-load-balancer/concepts/http-router.md) определяет правила маршрутизации запросов к бэкендам и позволяет модифицировать запросы прямо на балансировщике. Визард автоматически создает виртуальный хост и правило маршрутизации. В качестве группы бэкендов будет выбрана группа, созданная на предыдущем шаге.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Введите имя роутера: `alb-http-router`.
  1. Включите **Расширенные настройки**.
  1. В блоке **Виртуальные хосты**:

      * В поле **Имя** введите имя хоста: `alb-virtual-host`.
      * Поле **Authority** оставьте пустым.
      * В поле **Профиль безопасности** выберите профиль `sws-profile`, созданный ранее.

  1. Задайте параметры маршрута:

      * Имя маршрута — `app-1`.
      * **Путь** — **Начинается с** и далее `/app1`.
      * **Действие** — `Маршрутизация`.
      * **Группа бэкендов** — оставьте созданную ранее группу.
      * **Замена пути или начала** — укажите путь `/`.

  1. Нажмите **Создать и продолжить**. Визард перейдет на страницу настройки балансировщика.

{% endlist %}


### Настройте L7-балансировщик {#create-load-balancer}

Балансировщик нагрузки принимает запросы и распределяет их по ВМ из целевой группы в соответствии с правилами, указанными в HTTP-роутере. Для приема трафика балансировщик использует [обработчики](../../application-load-balancer/concepts/application-load-balancer.md#listener). Визард создаст обработчик автоматически. В качестве HTTP-роутера будет выбран роутер, созданный на предыдущем шаге.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Введите имя балансировщика: `app-load-balancer`.
  1. Включите **Расширенные настройки**.
  1. В блоке **Сетевые настройки** выберите созданную ранее сеть `alb-network`.
  1. Для **Группы безопасности** выберите **Из списка** и далее группу безопасности балансировщика `alb-security-group`.
  1. В блоке **Размещение** выберите ранее созданные подсети `subnet-alb-a`, `subnet-alb-b` и `subnet-alb-d` в соответствующих [зонах доступности](../../overview/concepts/geo-scope.md) и включите прием трафика в этих подсетях.
  1. Настройте обработчик:

      * Введите имя обработчика: `alb-listener`.
      * В блоке **Приём и обработка трафика** укажите:

          * **Тип обработчика** — `HTTP`.
          * **Протокол** — `HTTP`.
          * **HTTP-роутер** — выберите созданный ранее роутер.

  1. Нажмите **Создать**.

{% endlist %}


### Подключите ресурсы второго каталога {#add-second-folder}

При создании балансировщика с помощью визарда возможно подключить ресурсы только одного каталога. Поэтому целевую группу и группу бэкендов каталога `service-2` необходимо создать и подключить вручную.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://console.yandex.cloud) выберите каталог `secured-entry-point`.
  1. Перейдите в сервис **Application Load Balancer**.
  1. На панели слева выберите ![image](../../_assets/console-icons/target.svg) **Целевые группы**.
  1. Нажмите **Создать целевую группу**.
  1. Создайте целевую группу для каталога `service-2` по образцу [целевой группы для каталога `service-1`](#setup-target-group). В качестве параметров целевого ресурса используйте:

      * Имя — `target-group-2`.
      * Внутренний IP-адрес ВМ — `vm-service-2`.
      * Подсеть — `subnet-service-2`.

  1. На панели слева выберите ![image](../../_assets/console-icons/cubes-3-overlap.svg) **Группы бэкендов**.
  1. Нажмите **Создать группу бэкендов**.
  1. Создайте группу бэкендов по образцу [группы бэкендов для каталога `service-1`](#settings-backend-group). В качестве параметров бэкенда используйте:

      * Имя группы бэкендов — `backend-group-2`.
      * Имя бэкенда — `backend-2`.
      * Целевая группа — `target-group-2`.
      * Путь — такой же, как у группы бэкендов `backend-group-1`.
      * Порт — TCP-порт вашего сервиса, который вы открыли в группе безопасности `service-2-security-group`. В этом руководстве — `8000`.

  1. На панели слева выберите ![image](../../_assets/console-icons/route.svg) **HTTP-роутеры**.
  1. Выберите HTTP-роутер `alb-http-router`.
  1. В блоке **Виртуальные хосты** справа от `alb-virtual-host` нажмите ![image](../../_assets/console-icons/ellipsis.svg) → ![image](../../_assets/console-icons/pencil.svg) **Редактировать**.
  1. Внизу открывшегося окна нажмите **Добавить маршрут**.
  1. Задайте параметры маршрута:

      * Имя маршрута — `app-2`.
      * **Путь** — **Начинается с** и далее `/app2`.
      * **Действие** — `Маршрутизация`.
      * **Группа бэкендов** — `backend-group-2`.
      * **Замена пути или начала** — укажите путь `/`.
      * В поле **Таймаут, с** удалите значение и оставьте поле пустым.

  1. Нажмите **Сохранить**.

{% endlist %}

## Проверьте инфраструктуру {#check-infrastructure}

1. [Запустите тестовые веб-сервисы на ВМ веб-приложений](#run-web-services).
1. [Посмотрите проверки состояний](#check-healthchecking).
1. [Проверьте доступность веб-приложений](#check-accessibility).
1. [Проверьте работу профиля безопасности](#check-security-profile).

### Запустите тестовые веб-сервисы на ВМ веб-приложений {#run-web-services}

1. Подключитесь к управляющей ВМ `work-station` в каталоге безопасности:

    ```bash
    ssh -l <имя_пользователя> <публичный_IP-адрес_ВМ>
    ```

    Если вы используете разные ключи для разных ВМ, укажите путь к нужному ключу в команде подключения, например:

    ```bash
    ssh -i ~/.ssh/<имя_ключа> -l <имя_пользователя> <публичный_IP-адрес_ВМ>
    ```

    Где:

    * `<имя_ключа>` — имя файла приватного SSH-ключа, использованного при создании ВМ.
    * `<имя_пользователя>` — логин, указанный при создании ВМ.
    * `<публичный_IP-адрес_ВМ>` — IP-адрес ВМ.

    {% note tip %}

    Команду подключения к ВМ можно скопировать на странице описания ВМ в блоке **Доступ**.

    {% endnote %}

1. С управляющей ВМ подключитесь к ВМ `vm-service-1`:

    1. Поместите файл с приватным SSH-ключом ВМ `vm-service-1` в папку `~/.ssh` управляющей ВМ.
    1. Подключитесь к ВМ `vm-service-1`:

        ```bash
        ssh -i ~/.ssh/<имя_ключа> -l <имя_пользователя> <внутренний_IP-адрес_ВМ>
        ```

        Где:

        * `<имя_ключа>` — имя файла приватного SSH-ключа, использованного при создании ВМ.
        * `<имя_пользователя>` — логин, указанный при создании ВМ.
        * `<внутренний_IP-адрес_ВМ>` — внутренний IP-адрес ВМ `vm-service-1`.

1. Запустите тестовый веб-сервис с помощью команды:

    ```bash
    mkdir test-server; \
    echo 'HELLO!' > test-server/hello_3.txt; \
    echo 'TEST SERVER 1' > test-server/test_3.txt; \
    python3 -m http.server -d test-server 8000
    ```

    При запуске команды:

    * Будет создана папка `test-server` с двумя файлами: `hello_1.txt` и `test_1.txt`.
    * Запустится встроенный в Python тестовый веб-сервис на порту `8000`.

    Результат:

    ```text
    Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
    10.133.0.10 - - [30/May/2025 09:55:41] "GET / HTTP/1.1" 200 -
    10.133.0.15 - - [30/May/2025 09:55:41] "GET / HTTP/1.1" 200 -
    10.133.0.10 - - [30/May/2025 09:55:42] "GET / HTTP/1.1" 200 -
    10.133.0.15 - - [30/May/2025 09:55:42] "GET / HTTP/1.1" 200 -
    10.133.0.10 - - [30/May/2025 09:55:43] "GET / HTTP/1.1" 200 -
    10.133.0.15 - - [30/May/2025 09:55:43] "GET / HTTP/1.1" 200 -
    ...
    ```

1. Откройте новое окно терминала и аналогично запустите тестовый сервис на ВМ `vm-service-2`. В команде запуска используйте другие имена файлов, чтобы ответы от веб-приложений отличались.


### Посмотрите проверки состояний {#check-healthchecking}

1. Перейдите на страницу балансировщика `app-load-balancer`.
1. Слева выберите ![healthcheck](../../_assets/application-load-balancer/healthchecks.svg) **Проверки состояния**.
1. Убедитесь, что целевые ресурсы имеют во всех подсетях балансировщика статусы `HEALTHY`.


### Проверьте доступность веб-приложений {#check-accessibility}

Чтобы проверить доступность веб-приложений, в браузере перейдите по адресу:

```text
http://<публичный_IP-адрес_балансировщика>/<префикс_маршрута>
```

Где:

* `<публичный_IP-адрес_балансировщика>` — IP-адрес балансировщика `app-load-balancer`.
* `<префикс_маршрута>` — префикс, указанный в поле **Начинается с** при настройке HTTP-роутера. В этом руководстве — `app1` и `app2`.

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

  ```text
  Directory listing for /
    hello_1.txt
    test_1.txt
  ```


### Проверьте работу профиля безопасности {#check-security-profile}

1. Проверьте разрешение трафика правилом `Smart Protection`:

    1. В браузере перейдите по адресу:

        ```text
        http://<публичный_IP-адрес_балансировщика>/<префикс_маршрута>
        ```

    1. На другой вкладке браузера перейдите на страницу балансировщика `app-load-balancer`.
    1. Слева выберите ![logs](../../_assets/console-icons/receipt.svg) **Логи**.
    1. В поле **Запрос** укажите [фильтрующее выражение](../../logging/concepts/filter.md):

        ```text
        json_payload.smartwebsecurity.matched_rule.rule_type = SMART_PROTECTION
        and json_payload.smartwebsecurity.matched_rule.verdict = ALLOW
        ```

    1. Нажмите **Выполнить**.

        В списке логов останутся записи об успешных GET-запросах.

1. Добавьте запрещающее базовое правило:

    1. Перейдите на страницу профиля безопасности `sws-profile`.
    1. В блоке **Правила безопасности** нажмите ![image](../../_assets/console-icons/plus.svg) **Добавить правило**.
    1. Введите имя правила: `deny-rule`.
    1. В поле **Приоритет** установите значение `1000`.
    1. В блоке **Тип правила:** оставьте значение **Базовое**.
    1. Параметр **Действие** оставьте в положении **Запретить**.
    1. Параметр **Трафик** установите в положение `При условии`.
    1. Далее выберите:

        * **Условия** — `IP`.
        * **Условия на IP** — `Совпадает или принадлежит диапазону`.
        * **IP совпадает или принадлежит диапазону** — укажите IP-адрес устройства, с которого проводится тестирование веб-сервиса.

    1. Нажмите **Добавить**.

1. Проверьте работу базового правила:

    1. В браузере перейдите по адресу:

        ```text
        http://<публичный_IP-адрес_балансировщика>/<префикс_маршрута>
        ```

    1. На другой вкладке браузера перейдите на страницу балансировщика `app-load-balancer`.
    1. Слева выберите ![logs](../../_assets/console-icons/receipt.svg) **Логи**.
    1. В поле **Запрос** укажите фильтрующее выражение:

        ```text
        json_payload.smartwebsecurity.matched_rule.rule_type = RULE_CONDITION
        and json_payload.smartwebsecurity.matched_rule.verdict = DENY
        ```

    1. Нажмите **Выполнить**.

        В списке логов останутся записи о заблокированных правилом GET-запросах.


## Как удалить созданные ресурсы {#clear-out}

Чтобы перестать платить за ресурсы, [удалите](../../resource-manager/operations/folder/delete.md) каталоги, в которых была развернута инфраструктура.

Если вы разворачивали инфраструктуру в существующих каталогах:

1. [Удалите](../../application-load-balancer/operations/application-load-balancer-delete.md) L7-балансировщик `app-load-balancer`.
1. [Удалите](../../application-load-balancer/operations/http-router-delete.md) HTTP-роутер `alb-http-router`.
1. [Удалите](../../application-load-balancer/operations/backend-group-delete.md) группы бэкендов `backend-group-1` и `backend-group-2`.
1. [Удалите](../../application-load-balancer/operations/target-group-delete.md) целевые группы `target-group-1` и `target-group-2`.
1. [Удалите](../../compute/operations/vm-control/vm-delete.md) ВМ:

    * `work-station`
    * `vm-service-1`
    * `vm-service-2`

1. [Удалите](../operations/profile-delete.md) профиль безопасности `sws-profile`.
1. [Удалите](../../vpc/operations/security-group-delete.md) группы безопасности:

    * `alb-security-group`
    * `vm-security-group`
    * `service-1-security-group`
    * `service-2-security-group`

1. [Удалите](../../vpc/operations/subnet-delete.md) подсети:

    * `subnet-service-1`
    * `subnet-service-2`
    * `subnet-alb-a`
    * `subnet-alb-b`
    * `subnet-alb-d`

1. [Удалите](../../vpc/operations/network-delete.md) облачную сеть `alb-network`.