В первой части статьи мы обсудили стоп-факторы, которые блокировали возможность встраивания методологии CI/CD в процесс облачной разработки, а также способы, которыми они были устранены. Возможность безопасного и прозрачного управления Группами Безопасности командами разработки и используемые решения для осуществления контролей ИБ из библиотеки безопасности.
В этой статье я расскажу вам про новые системы, которые нам удалось внедрить и использовать, тем самым повысив уровень безопасности и отказоустойчивости облака.

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

Первым решением было использовать web-прокси сервер Squid для контролируемого доступа в интернет. Было развернуто 2 сервера в разных зонах доступности с идентичной конфигурацией, а трафик на них направлялся через сервис облака NLB. Решение изначально планировалось, как временное и эксплуатировалось в течении года. Схема решала проблему с самым частым запросом для тестовых сервисов – доступ к внешним серверам обновлений.
Шло время, и в облако стали подтягиваться продуктивные сервисы, которые требовали связи с внешними сервисами без ограничения протокола, SQUID для это задачи не подходил, а Группы Безопасности, к большому сожалению, не поддерживают FQDN. Поэтому для доступа в интернет было решено использовать межсетевые экраны. При использовании межсетевых экранов мы столкнулись с следующей проблемой, невозможность настройки балансировки на L2 уровне в том числе использования протокола VRRP. Это значило невозможность реализации отказоустойчивой схемы с балансировкой трафика.
Нам очень помогли коллеги из Яндекс Облака, они подготовили для нас комплексное решение по отказоустойчивому доступу в интернет на основе проекта из библиотеки архитектурных решений Яндекс Облака yc-route-switcher.

Решение работает следующим образом. Функция проверки состояния каждую минуту обходит статусы, получаемые healthcheck’ом специально выделенного порта хостов в группе балансировки закреплённой за NLB, которая включает в себя адреса интерфейсов межсетевого экрана.
Далее следующие действия повторяются по событиям:
-
Если primary-хост(first-rt) недоступен, то в очередь сообщений передаётся запрос на изменение закреплённой таблицы маршрутизации, чтобы стандартный маршрут шлюза указывал на secondary-хост(second-rt), который в обычном состоянии является primary-хостом для другой сети.
-
Если таблица маршрутизации указывает на secondary-хост, но primary-хост доступен, функция отправляет запрос на изменение её стандартного маршрута на primary-хост, восстанавливая исходное состояние, при этом хосты, закрепленные за secondary-хостом, не изменяют свой стандартный маршрут.

Функция переключения маршрута срабатывает при наличии сообщений в очереди, вызывая переключение таблицы маршрутизации. Среднее время реакции на сбой у такого решения — 1 минута.

Внедрение данного решения не обошлось без ошибок. При увеличении количества подсетей возникла проблема, когда при переключении таблиц маршрутизации, схема не возвращалась к обычному состоянию, так как часть таблиц маршрутизации не переключалось из-за ошибки в логике работы Cloud Functions и решения. В итоге после нескольких итераций проблема была решена и решение заработало, как и задумывалось.
Внедрение yc-route-switcher позволило:
-
снизить риск отказа одиночного межсетевого экрана и отказа зоны доступности в Яндекс Облаке
-
осуществлять публикацию равнозначных конфигураций посредством менеджмент-центра
Что реализовать не удалось:
-
автоматическую балансировку нагрузки в связи с отсутствием возможности синхронизации и реализации VRRP
-
публикацию сервисов в интернет через межсетевые экраны, в связи с невозможностью назначения нескольких публичных адресов на сетевой интерфейс
C увеличением количества каталогов, увеличилось и количество пользователей облака, и у команды безопасности возникла необходимость внедрения SSO-аутентификации. Изначально пользователи работали через Yandex.Passport аккаунты. Это несло риски в связи с несвоевременным отзывом доступа к облаку, контролей для этого процесса попросту не было.

После совместных обсуждений с командой инфраструктуры мы решили использовать ADFS-аутентификацию в облаке.
Процесс аутентификации через SSO ADFS:
-
Пользователь открывает в браузере ссылку для входа в консоль.
-
Если это первая аутентификация пользователя, то консоль отправляет его на сервер ADFS для прохождения аутентификации. Если пользователь уже проходил аутентификацию, то информация об этом сохранена в cookie его браузера. Если время жизни cookie не истекло, то консоль управления сразу аутентифицирует пользователя и отправляет на главную страницу. Время жизни cookie указывается при создании федерации. Если время жизни cookie истекло, то консоль отправляет пользователя на сервер ADFS для повторной аутентификации.
-
Сервер ADFS показывает пользователю страницу аутентификации. Например, просит ввести логин и пароль.
-
Пользователь вводит на сервере ADFS данные, необходимые для аутентификации.
-
Пользователь подтверждает вход через двухфакторную аутентификацию.
-
В случае успешной аутентификации сервер ADFS отправляет браузер пользователя назад на страницу для входа в консоль управления.
-
Консоль управления спрашивает IAM, добавлен ли такой пользователь в облако. Если да, то консоль управления аутентифицирует пользователя и отправляет на главную страницу.
Так, как ADFS на тот момент ещё не была внедрена в компании, команда безопасности совместно с инфраструктурной командой запустили процесс её внедрения. После проверок на уязвимости и тестирования ADFS, была организована федерация с Яндекс Облаком в интерфейсе Организаций, которые на тот момент вышли в полный доступ. Процесс перехода был осуществлен в течении месяца и включал в себя уведомление пользователей с подтверждением актуальности предоставленных доступов. Параллельно с переходом на новую схему аутентификации мной был проведен аудит доступа в облако в ходе которого были отозваны неиспользуемые доступы.
Для повышения уровня безопасности авторизации возникла необходимость подключения механизма двухфакторной аутентификации для доступа к облаку. К большому сожалению в Яндекс Облаке отсутствует сервис двухфакторной аутентификации для использования с SSO-провайдерами, когда как для Yandex.Passport аккаунтов используется стандартная двухфакторная аутентификация, при условии включения её пользователем. В итоге мы подключили внешнего провайдера для двухфакторной аутентификации с различными методами 2FA.
Подключение SSO-аутентификации позволило получить следующие контроли:
-
настраиваемая продолжительность сессии авторизации
-
использование пользователями IAM-токенов федерации с настраиваемым сроком жизни вместо OAuth-токенов Yandex.Passport с сроком жизни 1 год
-
если вы используете IdM-решения или другие варианты автоматизации, то при увольнении работника учетная запись будет автоматически заблокирована, и пользователь уже не получит доступ к облаку
-
пользователя легче идентифицировать, отпала необходимость ведения списков сопоставления почты и конкретного пользователя
-
использование своего провайдера двухфакторной аутентификации, как стороннего, так и кастомного on-premise совместимого с используемой SSO решения
Итоги:
-
Развернули отказоустойчивую и удобно-конфигурируемую посредством terraform и менеджмент-сервера, схему доступа в интернет с возможностью разделения нагрузки по подсетям.
-
Получили контроли за учетными записями пользователей в облаке и минимизацию рисков не отозванных прав на критические сервисы.
ссылка на оригинал статьи https://habr.com/ru/company/alfastrah/blog/705468/
Добавить комментарий