Группы безопасности

Кратко:

  • Группы безопасности контролируют входящий и исходящий трафик, выполняют функцию межсетевого экрана.
  • Они представляют собой набор правил, которые назначаются сетевому интерфейсу.
  • Правила устанавливают протоколы и диапазоны адресов и портов для получения и отправки трафика.
  • Порядок применения правил не имеет значения, так как сами по себе правила ничего не запрещают.
  • Группы безопасности можно использовать для защиты ресурсов в облаке, например, виртуальных машин, групп виртуальных машин, сетевого балансировщика, прикладной балансировщик нагрузки, управляемых баз данных.
  • Важно учитывать, что IP-адреса хостов в кластере могут меняться, поэтому использовать в правилах IP-адрес какого-либо хоста не стоит.

Группы безопасности

О том, что такое группы безопасности, вы узнали в курсе «Виртуальные машины». В начале этого урока мы кратко напомним их суть, но возможно вам будет полезно освежить в памяти детали.
Группы безопасности используются для контроля входящего и исходящего трафика, то есть выполняют функцию межсетевого экрана. Фактически они представляют собой набор правил, которые назначаются сетевому интерфейсу. Эти правила устанавливают протоколы и диапазоны адресов и портов для получения и отправки трафика. Правила для входящего и исходящего трафика определяют отдельно.
Основной принцип, по которому работают группы безопасности: запрещено всё, что не разрешено в явном виде. Поэтому используемые в группах безопасности правила только разрешают что-либо. Если на ресурс распространяется действие нескольких групп безопасности, то возможность отправлять и получать трафик для него будет определяться совокупностью всех правил. Порядок их применения не имеет значения, поскольку сами по себе правила ничего не запрещают.
На этом и следующем уроках мы рассмотрим, как применять группы безопасности для защиты своих ресурсов в облаке. Начнем с того, в каких сервисах их можно использовать.
Compute Cloud
При создании или изменении ВМ вы можете назначить одну или несколько групп безопасности на каждый сетевой интерфейс. Если передать пустой список, то ВМ будет назначена группа безопасности по умолчанию для этой сети. Для назначения групп безопасности можно использовать консоль управления, интерфейс командной строки или Terraform.
Instance Groups
При создании групп виртуальных машин список групп безопасности указывается в шаблоне ВМ. Они будут переданы создаваемым ВМ точно так же, как и в сервисе Compute Cloud. Важный момент здесь заключается в том, что у каждой ВМ в рамках группы должен быть одинаковый список групп безопасности, по-другому нельзя.
Сетевой балансировщик нагрузки
Часто бывает необходимо защитить свой веб-сервер от несанкционированного доступа извне. Для этого можно применить сочетание сетевого балансировщика и групп безопасности.
В группе безопасности (на рисунке ниже она называется SG-LB) вы можете привести перечень IP-адресов, которые могут подключаться к вашему веб-сервису, и указать порты подключения (например 443 и 80).
Прикладной балансировщик нагрузки (L7-балансировщик)
В отличие от сетевого, прикладной балансировщик нагрузки (Application Load Balancer) поддерживает использование групп безопасности, они назначаются на него непосредственно. В этом случае группы безопасности позволяют контролировать потоки трафика, проходящие через прикладной балансировщик до групп бэкендов и целевых групп.
image
Следует также иметь в виду, что для такой схемы понадобится разрешить проверки состояния балансировщика, которые могут приходить по 80, 443 или какому-либо другому порту. Диапазон IP-адресов, с которых балансировщик отправляет проверки состояния, приведен в документации. Чтобы не запоминать эти адреса, в настройках группы безопасности добавьте правило для входящего трафика: в поле Диапазон портов укажите 1-32767, ПротоколTCP, ИсточникПроверки состояния балансировщика.
Если использование этого диапазона не будет разрешено, то балансировщик отметит ваш сервис как неработоспособный (unhealthy).
Управляемые базы данных
Как и в группах виртуальных машин, в сервисах управляемых баз данных группа безопасности назначается на кластер целиком. Назначить на отдельные хосты разные группы безопасности нельзя.
При назначении групп безопасности важно учитывать, что IP-адреса хостов в кластере могут меняться, то есть использовать в правилах IP-адрес какого-либо хоста не стоит.

Сценарий использования групп безопасности

Рассмотрим теперь, как с помощью групп безопасности и некоторых других инструментов (сетевого балансировщика, сервиса DDoS Protection и VPN) можно защитить, например, веб-сервис.
Допустим наша система состоит из базы данных, сервера, на котором развёрнуто веб-приложение, и балансировщика нагрузки.
ШАГ 1
Сначала создадим для неё базовую сетевую инфраструктуру. Для этого можно воспользоваться сетью по умолчанию с тремя подсетями в каждой из зон доступности. Далее понадобится зарезервировать два публичных IP-адреса: один для сетевого балансировщика и один для VPN. При резервировании IP-адреса для балансировщика включаем сервис DDoS Protection.
image
Нам, естественно, будут нужны виртуальные машины, на которых будет работать веб-сервис. Чтобы обеспечить отказоустойчивость сервиса, развернём их в трёх зонах доступности.
Ещё понадобится кластер управляемой базы данных (например MySQL). Разместим хосты кластера также в трёх зонах доступности для отказоустойчивости.
image
Последний компонент — это IPSec-шлюз для удалённого доступа. С тем, как его создавать, вы познакомились на прошлом уроке.
ШАГ 2
Чтобы организовать удалённый доступ к ресурсам в облаке, следует настроить маршрутизацию на уровне облака, а не на уровне ВМ. Для этого нужно создать таблицу маршрутизации для удалённой сети (например 192.168.0.0/24), а в качестве параметра Next hop указать адрес виртуального шлюза.
image
Эту таблицу маршрутизации нужно привязать к каждой из трёх подсетей, чтобы можно было обеспечить удалённый доступ ко всем ресурсам.
Теперь, когда в нашей сетевой инфраструктуре создано все, что необходимо, — кластер для размещения базы данных, ВМ для веб-сервиса и VPN-шлюз для удалённого администрирования — займёмся ограничением доступа к ней извне.
ШАГ 3
Прежде всего нужно защитить VPN-шлюз. Воспользуемся для этого группами безопасности. Создадим группу безопасности (например Security Group-VPN), в которой зададим правила для входящего и исходящего трафика.
Правило для входящего трафика должно содержать разрешение на доступ по протоколу UDP через порты 500 и 4500 с опредёленного IP-адреса, на котором располагается шлюз с другой стороны VPN-туннеля. Также важно обеспечить сетевую связность между подсетями на стороне облака и в нашей локальной инфраструктуре. Поэтому добавим в группу безопасности еще одно правило, разрешающее трафик между ними, указав адреса этих подсетей (например 10.0.0.0/8 и 192.168.0.0/24).
Инфраструктура, которая у нас на данный момент получилась, представлена на схеме ниже.
image
ШАГ 4
Следующим шагом защитим ВМ с помощью группы безопасности (назовём её, например, sg-web). Для этого настроим для них правила для входящего и исходящего трафика.
image
Так как наш веб-сервис публичный, мы разрешаем входящий трафик по протоколу TCP через 80 и 443 порты с любого IP-адреса. Чтобы администрировать веб-серверы можно было только по защищённому соединению, разрешим доступ из подсети 192.168.0.0/24 по протоколу SSH.
Также создадим правило, разрешающее проверки состояния балансировщиком. В данном примере это правило избыточное, поскольку у нас публичный веб-сервис. Но если вы хотите ограничить список IP-адресов, с которых можно подключиться к веб-сервису, о нем важно не забывать.
Ещё одно правило с назначением Self разрешает трафик внутри самой группы безопасности, чтобы ВМ могли общаться друг с другом, например для синхронизации или передачи файлов контента.
Для исходящего трафика одно правило будет разрешать трафик между ВМ, а второе — трафик в сторону базы данных по протоколу TCP через порт 3306. Во втором случае назначением будет являться группа безопасности для кластера базы данных.
image
ШАГ 5
Перейдем к настройке правил для базы данных. Нам понадобится разрешить входящий трафик через порт 3306. Источником этого трафика будут ВМ, входящие в группу безопасности sg-web, которую мы создали ранее. Это защитит базу данных от несанкционированных подключений извне.
Созданные группы безопасности надо привязать к ВМ и кластеру базы данных. Это делается в настройках ВМ и кластера через консоль управления.
ШАГ 6
Последний шаг — это создание балансировщика нагрузки. Используем для его защиты сервис DDoS Protection, а в качестве целевой группы балансировщика укажем наши ВМ. Включим опцию проверки состояния ВМ, находящихся за балансировщиком.
Давайте посмотрим, что же получилось в итоге.
image
Мы создали систему, в которой:
  • есть балансировщик нагрузки, защищённый от DDoS-атак;
  • входящий трафик веб-приложения балансируется по трём ВМ;
  • доступ к этому веб-приложению разрешён только для удалённых администраторов через VPN;
  • открыты только необходимые порты (80 и 443);
  • база данных получила дополнительную защиту, поскольку доступ к ней разрешён только с наших ВМ.
Наша система защищена: в ней обеспечена сетевая сегментация, нежелательный трафик фильтруется, разрешены только необходимые для работы порты и протоколы, ограничен удалённый доступ для администрирования.