Привет! Меня зовут Юрий Гуз, я ведущий разработчик команды IAM в MWS Cloud Platform. Мы продолжаем цикл статей о том, как устроен IAM в нашем облаке. Сегодня поговорим о технологии, которая стирает границы между вашей корпоративной IT-инфраструктурой и MWS, — о федерации доступов или просто федерации.

Мы уже рассказывали в статье, как мы делаем IAM для облака MWS. И описали там один из способов зайти в наше облако — использование MTS ID. Способ надёжный и удобный, если MTS ID у вас, конечно, есть. А что, если ваш провайдер удостоверений — это ваш корпоративный Active Directory, Google Workspace или Keycloak? Вам ведь не хочется заводить каждому сотруднику ещё один аккаунт, плодить лишние пароли и ломать уже выстроенные процессы с двухфакторной аутентификацией и ролевой моделью.

На этот случай у нас есть ответ — наша новая фича «Федерация». Она позволяет сотрудникам заходить в MWS с помощью их привычных рабочих учётных записей. Давайте разберёмся, как это работает и зачем нужно.

Немного теории

Что такое федерация

Федерация — если просто, «договор о доверии» между вашим провайдером удостоверений (IdP) и нашим облаком MWS Cloud Platform, который на схеме ниже выступает как поставщик услуг, SP.

После настройки этого «договора» ваши сотрудники получают доступ в консоль MWS, аутентифицируясь в вашей корпоративной системе. Им больше не нужны отдельные логины и пароли для нашего облака — мы полностью доверяем вашему IdP в этом вопросе.

Доверительное отношение между IdP и SP
Доверительное отношение между IdP и SP

А при чём тут SSO

Когда мы говорим о федерации, тут же всплывает термин SSO (Single Sign-On). Это не случайно — понятия тесно связаны, но есть и важная разница, объясню ниже.

SSO — это в первую очередь пользовательский опыт: возможность один раз войти в систему и получить доступ к нескольким приложениям без повторного ввода пароля. Чаще всего этот термин используют для доступа внутри одной организации, например, войдя в корпоративный портал, сотрудник получает доступ к CRM, почте и вики.

В то же время федерация — логическое развитие SSO, которая реализует тот же принцип единого входа, но уже между разными организациями и доменами. Если SSO работает в рамках одной компании, то федерация предоставляет сотрудникам доступ во внешние системы, как наше облако MWS Cloud Platform, без необходимости создания и запоминания нового пароля.

Для наглядности приведу аналогию: представьте себе SSO как единый пропуск для вашего офиса. Вы вошли с его помощью в здание — и он же открывает все двери внутри: в бухгалтерию, в кабинет разработчиков, на кухню. Это удобно, но работает только в пределах вашей компании.

Федерация — это тот же ваш пропуск, но который по договорённости открывает ещё и дверь в соседний бизнес-центр, наше облако MWS Cloud Platform. Вы выходите за пределы своей организации, но вам по-прежнему не нужен отдельный ключ.

Как правило, SSO настраивается в рамках одной организации
Как правило, SSO настраивается в рамках одной организации
Федерация расширяет границы применения SSO — если организации доверяют друг другу
Федерация расширяет границы применения SSO — если организации доверяют друг другу

Как это работает у нас

Если говорить технически, то федерация в MWS Cloud Platform — это ресурс, который вы создаёте в консоли со своими настройками и параметрами. Она существует в рамках организации — фундаментального ресурса, стоящего выше по иерархии. В одной организации может существовать множество федераций, каждую из которых пользователи могут использовать для входа в консоль.

С точки зрения системы доступа федерация работает как некий пул пользователей. Каждый, кто успешно зашёл через неё, попадает в одну из трёх категорий субъектов (принципалов), которым можно выдавать права:

  • Вся федерация — все пользователи, вошедшие через эту федерацию.

  • Конкретный пользователь — определяется своим уникальным идентификатором из вашего IdP.

  • Группа пользователей — все, у кого есть определённый атрибут, например все из отдела разработки.

В нашей системе такие принципалы обладают следующими идентификаторами:

// Вся федерация

iam/organizations/{название_организации}/userFederations/{название_федерации}

// Конкретный пользователь

iam/organizations/{название_организации}/userFederations/{название_федерации}/subjects/{идентификатор_пользователя}

// Группа пользователей по атрибуту

iam/organizations/{название_организации}/userFederations/{название_федерации}/attributes/{имя_атрибута}/value/{значение_атрибута}

К каждой федерации можно привязать один или несколько провайдеров. Это ещё один ресурс, отвечающий за подключение к вашему конкретному IdP, например Active Directory через SAML 2.0 или Keycloak через OIDC. Провайдеров может быть несколько.

Структура ресурсов федерации
Структура ресурсов федерации

Если федерация — это логическая группа пользователей из вашей организации, то провайдер — это технический мост между вашим IdP и нашим облаком. Именно он определяет, как именно будет проходить аутентификация. При создании провайдера вы можете выбрать один из популярных протоколов — OpenID Connect или SAML 2.0.

Пользовательские данные — важная составляющая всей системы федерации, и в зависимости от типа протокола, для которого будет настроен тот или иной провайдер, мы будем получать эти данные по-разному. К примеру, для OIDC-провайдеров большую часть информации мы берём из ID-токена или через запрос к userinfo API. Для провайдеров, настроенных на работу с SAML, мы используем блок assertions. Всё строго по стандартам, без самодеятельности.

А как мы используем эти данные? Тут всё просто. При создании провайдера мы предоставляем возможность настроить так называемый маппинг атрибутов, который нужен для соответствия ваших атрибутов на наши, используемые в IAM-системе облака.

Например, у нас есть обязательный атрибут mws.subject — уникальный идентификатор пользователя в MWS. Именно по нему мы определяем, кто вошёл в систему, кому выдавать права и как вести аудит. Вы можете маппить на него любое уникальное значение из вашего IdP: внутренний UUID, email или логин — как вам удобно.

Пример маппинга атрибутов, когда в качестве mws.subject используется поле sub из ID-токена
Пример маппинга атрибутов, когда в качестве mws.subject используется поле sub из ID-токена

Также можно настроить передачу дополнительных атрибутов — они помогут гибко управлять доступом через ABAC-модель и настраивать правила входа, например запретить доступ для сотрудников из определённого департамента.

А что с пользователями

Одной из главных дилемм при проектировании такой системы, как работать с пользователями, где их хранить и нужно ли их синхронизировать между источниками данных во внешнем IdP и в нашем облаке.

Начнём с последнего вопроса. При поиске решения данной задачи мы взяли на рассмотрение две модели — sync и syncless: с синхронизацией и без синхронизации соответственно. При выборе модели мы учитывали всё: удобство работы, синхронизацию пользовательских данных, вопросы аудита и возможность вписаться в уже существующую архитектуру MWS.

Модель Sync предполагает, что данные о пользователях из вашего IdP синхронизируются с данными в нашем облаке. Это даёт возможность заранее проставить им права, вести аудит и быстро проверять доступ.

Но эта модель создаёт сложности: нужно постоянно следить за изменениями во внешней системе, которую мы не контролируем, и решать, что делать, когда один и тот же пользователь приходит из разных провайдеров с разными данными. Риск рассинхронизации в такой схеме всегда высок, а для IAM подобное является очень опасным местом. Хотя есть готовые решения вроде SCIM, мы сочли этот подход слишком сложным и ресурсоёмким.

Sync-модель: одно из решений задачи синхронизации пользователей — использование протокола SCIM
Sync-модель: одно из решений задачи синхронизации пользователей — использование протокола SCIM

Модель Syncless — это подход «на лету». Данные о пользователе запрашиваются только в момент его входа и привязываются к сессии пользователя. В системе не хранится постоянной сущности «пользователь» — вместо этого информация из токена (OIDC) или утверждений (SAML) напрямую определяет, кто есть кто. На основе этих данных мы выписываем наш IAM-токен и далее в реальном времени через механизм ABAC вычисляем права доступа данного принципала.

Syncless-модель. Протокол — OIDC
Syncless-модель. Протокол — OIDC

Этот подход избавляет нас от проблем синхронизации и гарантирует, что любое изменение прав в вашем IdP мгновенно отразится на доступе пользователя в MWS при следующем перелогине в консоль. Всё, что для этого требуется, — гибко настроить маппинг а��рибутов для каждого провайдера, указав, какой атрибут использовать как уникальный идентификатор, а какие — для определения членства в группах. Таким образом, один и тот же пользователь, войдя через разные клиенты (OIDC / SAML), может получать разный набор прав в зависимости от набора атрибутов.

Для сотрудников с определённым набором прав можно использовать отдельные IdP
Для сотрудников с определённым набором прав можно использовать отдельные IdP

Если кратко подытожить всё вышесказанное, то процесс аутентификации через федерацию в MWS происходит следующим образом:

  1. Инициация. Пользователь нажимает «Войти» в консоли MWS.

  2. Перенаправление. Его перебрасывает в ваш корпоративный IdP, где он проходит аутентификацию (логин/пароль, 2FA).

  3. Обмен данными. MWS получает данные пользователя из токена или assertions, в зависимости от выбранного протокола (OIDC/SAML).

  4. Маппинг. Данные преобразуются в атрибуты MWS через настроенные правила.

  5. Создание сессии. В MWS создаётся сессия пользователя, которая хранит контекст атрибутов для дальнейшего их использования в процессе авторизации в облаке.

И для чего это нужно

Реализация федеративных доступов — это не просто галочка в списке фич для нашего облака, а мощный инструмент, который решает конкретные бизнес-задачи и значительно упрощает жизнь IT-отделам компаний наших клиентов, а именно:

  • Централизованное управление доступом. Выдать/изменить права можно в одном-единственном месте. То же самое работает и в обратную сторону — к примеру, в случае увольнения сотрудника можно выключить его учётку в вашем IdP, после чего он автоматически теряет доступ к консоли MWS. Больше никаких «а мы забыли его удалить из облака». Риск утечки данных минимален.

  • Соответствие требованиям безопасности. Все правила безопасности (сложные пароли, 2FA) можно настроить один раз в вашем IdP. Наше облако им безоговорочно верит. Проверяющим нужно смотреть только одну систему, не более. Удобно, не правда ли?

  • Повышение продуктивности работы сотрудников. Сотрудникам не придётся заводить новые аккаунты, тратить время на запоминание и сброс новых паролей.

Заключение

Мы разобрали, как устроена федерация в MWS: от выбора протоколов и маппинга атрибутов до реализации модели Syncless. Это решение позволяет компании использовать облако MWS Cloud Platform как естественное расширение вашей IT-инфраструктуры — без лишних учётных записей и с сохранением всех корпоративных политик безопасности.

Что дальше?

Федерация — это большой и важный шаг в развитии IAM нашего облака, но на этом мы не останавливаемся. В планах — расширение наших возможностей ABAC, более глубокая интеграция с корпоративными системами и, конечно, постоянная работа над безопасностью и удобством. Сейчас этот сервис в стадии preview и доступен пользователям по запросу на сайте MWS Cloud Platform. К концу октября опубликуем документацию, обновим статью и оставим ссылку на док. А в следующих статьях перейдём к практике — подробно разберём, как настроить федерацию для вашего IdP. Оставайтесь на связи!

Комментарии (0)