Построение ролевой модели в Active Directory

2015-09-01, 21:00 / Argon

В проектах по Active Directory я регулярно сталкиваюсь с задачами и вопросами от заказчиков, для которых требуется понимание двух тесно связанных между собой тем:

  • как грамотно организовать доступ к ресурсам с помощью групп
  • как организовать процесс миграции учетных записей и ресурсов без прерывания доступа

Эти аспекты работы Active Directory Domain Services критически важны для удобной, безопасной и предсказуемой работы AD в конфигурациях, состоящих более чем из одного домена.

В этой статье я расскажу:

  • как работают разные типы групп
  • как правильно организовать доступ к ресурсам

Статья ещё в процессе написания. Буду рад вашим комментариям!

В следующей статье Миграция объектов между доменами Active Directory будут рассмотрены вопросы организации миграции пользователей и ресурсов в другой домен без прерывания доступа:

  • общий подход к миграции
  • как работает SID History
  • сценарии миграции и подход к администрированию для каждого из них

Содержание

  • Разрешения на ресурсы
  • Типы групп в Active Directory
    • Чем вызваны эти отличия
  • Построение ролевой модели
    • Группы доступа (к ресурсу)
    • Ролевые группы (пользователей)
  • AGULP

Разрешения на ресурсы

Ресурсом является любой сервис, к которому подключаются пользователи. Примеры ресурсов: файловая шара, принтер, терминальная служба, веб-сайт, organization unit в AD.

Доступ на ресурсы назначается через списки контроля доступа (ACL). ACL представляет собой таблицу, которая состоит из столбцов:

  • SID объекта, которому дается доступ
  • разрешения для доступа

Пример:

SID Разрешения
S-1-5-21-4134161311-953135930-2792148834-500 Полный доступ
S-1-5-21-1721254763-462695806-1538882281-3209302 Запись
S-1-5-21-2639602428-490361449-2816156262-107563 Чтение

Поскольку SID не информативен, при отображении ACL происходит разрешение SID в имя объекта. Для получения имен объектов происходит обращение к контроллеру того домена, в котором находится ресурс.

Имя объекта Разрешения
Builtin\Administrators Полный доступ
Source\Admins Запись
Target\Users Чтение

При назначении доступа на ресурс, в ACL можно прописать (в качестве SID-ов):

  • Пользователей и группы локального компьютера
  • Встроенные мнемоники (Authenticated Users, …)
  • Пользователей своего домена
  • Пользователей доверенного домена
  • Любые группы своего домена
  • Глобальные и универсальные группы доверенного домена

Стоит отдельно отметить, что локальные группы доверенного домена (хоть из своего леса, хоть из доверенного) прописать в ACL ресурса нельзя – они не будут находиться в поиске. Если в ACL была прописана, например, глобальная группа из другого домена, но потом она была преобразована в локальную, то для ACL она перестанет разрешаться в имя, а доступ работать не будет.

Типы групп в Active Directory

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

AD Groups Nesting Compatibility Matrix

Примечания:

  1. в memberOf отображаются, так как есть в глобальном каталоге
  2. в memberOf не видны

Чем вызваны эти отличия

Чтобы понять как работают разные типы групп, важно знать, как формируется токен доступа пользователя.

Когда пользователь проходит аутентификацию, его логин и пароль отправляются на контроллер домена, в котором хранится учетная запись пользователя (Account Domain). В ответ пользователь получает токен доступа, содержащий:

  • SID пользователя
  • SID-ы локальных и глобальных групп из Account Domain, в которых явно или опосредованно числится пользователь
  • ответ от глобального каталога, содержащий SID-ы универсальных групп в Account Forest, в которых явно или опосредованно числится пользователь

Когда пользователь обращается к сетевому ресурсу в другом домене (Resource Domain), его токен доступа получает следующие изменения от контроллера Resource Domain:

  • из токена исключаются SID-ы локальных групп из Account Domain
  • в локальных группах Resource Domain проверяются на членство SID-ы пользователя, глобальных и универсальных групп из Account Domain
  • в токен добавляются SID-ы локальных групп из Resource Domain, в которых числятся SID-ы из предыдущего шага

Построение ролевой модели

Группы доступа (к ресурсу)

Разрешения на ресурсах возможно назначать напрямую конкретным пользователям. Однако, пользователи приходят и уходят, поэтому наборы разрешений на ресурсах необходимо типизировать и отделить от пользователей. Группы доступа — абстрактное понятие, удобное для реализации типизированных наборов разрешений.

Поскольку ресурсов в организации может быть много, необходимо решение для централизованного хранения и управления пользователями и группами. Служба каталогов AD позволяет перенести контроль доступа к ресурсам из локальных списков ACL в единую базу.

Локальные доменные группы AD задуманы для того, чтобы их использовать как группы доступа при назначении разрешений на ресурсах:

  • Членами локальных доменных групп AD могут быть все те же типы объектов, что и в локальных ACL на ресурсах.
  • Локальные группы AD существуют только в одном домене, в то же время они доступны для назначения разрешений только на ресурсах, принадлежащих тому же домену. Наибольшую безопасность и контроль обеспечивает назначение разрешений для ресурсов на группы в том же домене, в котором находится ресурс — ресурс доверяет управлением доступом к нему только «своему домену».
  • Группы других типов (глобальная, универсальная) имеют намеренное ограничение иметь членов только в определенной области (домен, лес).

Данные ограничения не позволяет настроить бесконтрольное распространение разрешений:

  • Если разрешение на ресурсе настроено на локальную доменную группу, она всегда управляется в том же домене, но позволяет включать в себя глобальные/универсальные группы из других доменов (передавать полномочия в другой домен/лес). Однако, эти группы в другом домене/лесе не могут включить в себя группы из других доменов/лесов (передать полномочия за пределы своей области).
  • Если разрешение на ресурсе настроено на глобальную/универсальную группу, она может управляется в другом домене (полномочия переданы в другой домен/лес), но не позволяет включить в себя группы из других областей (передать полномочия за пределы своей области).

Ролевые группы (пользователей)

Глобальные группы AD задуманы для объединения пользователей в ролевые группы в пределах домена.

Для предоставления доступа к ресурсу, в его группу доступа следует вкладывать ролевые группы пользователей.

Не рекомендуется использовать глобальные группы не из своего домена для прямого назначения прав доступа на ресурсе, поскольку это понижает безопасность (идет передача полномочий администратору другого домена, в глобальной группе может потенциально числиться любой пользователь из другого домена).

Универсальные группы AD задуманы для объединения глобальных групп в сценарии, когда лес AD состоит из нескольких доменов.

Не рекомендуется использовать универсальные группы не из своего леса для прямого назначения прав доступа на ресурсе, поскольку это понижает безопасность (идет передача полномочий администратору другого леса, в универсальной группе может потенциально числиться любой пользователь из другого леса).

AGULP

Таким образом, наиболее универсальной, эффективной и безопасной моделью предоставления доступа в AD является принцип AGULP:

  • Пользователи (Account) объединяются в ролевые группы, которые представлены в AD глобальными группами (Global)
  • При необходимости, ролевые группы из разных доменов одного леса объединяются в универсальные группы (Universal)
  • Для каждого ресурса создается доменные локальные группы доступа (Local), которые используются для назначаются разрешений (Permission) в ACL на ресурсах

Читайте продолжение темы в статье Миграция объектов между доменами Active Directory.



5 комментариев

Andrew Lomakin
# Комментарий от 2015-11-15, 11:49

Проблема с AGULP следующая: в огромном количестве организаций количество групп в разы превышает количество пользователей и растут и множатся они бесконтрольно. Вложение групп является одним из самых влияющим фактором проблемы Kerberos Token Size, которая является скелетом в шкафу большинства крупных организаций. В связи с этим текущая рекоммендация (хоть и не отраженная в официальной литературе) — упрощать структуры групп и переходить от выделения прав доступа по группа к «самоорганизации» выделения прав доступа. Примеры — запрос на доступ в sharepoint, запрос на доступ в Windows File Share.
Вообще «новомодной» фишкой, над которой очень стоит задуматься — внедрение Dynamic Access Control и классификации ресурсов. Функционал обладает огромным потенциалом и убивает стадо зайцев одним выстрелом.

Argon
# Комментарий от 2015-11-15, 21:45

Андрей, спасибо за коммент. Выскажу свои мысли на этот счёт.

Проблема с AGULP следующая: в огромном количестве организаций количество групп в разы превышает количество пользователей и растут и множатся они бесконтрольно. Вложение групп является одним из самых влияющим фактором проблемы Kerberos Token Size, которая является скелетом в шкафу большинства крупных организаций.

Да, такое тоже много раз видел. Считаю, что проблема здесь не в AGULP как таковом, а в том, как организована ролевая модель (RBAC).

Как правило, группы плодятся в том случае, если классификацией доступов и групп не занимаются, а используют подход: «новый ресурс — новая группа, если пользователю нужен доступ к ресурсу — включаем его в группу по заявке».

В этой статье я не хотел акцентировать внимания на озвученных тобой проблемах ролевых моделей RBAC, возможно, стоит поменять заголовок. Подумаю.

В связи с этим текущая рекоммендация (хоть и не отраженная в официальной литературе) — упрощать структуры групп и переходить от выделения прав доступа по группа к «самоорганизации» выделения прав доступа.

Про самоорганизацию — можешь подробнее рассказать? Не совсем понял.

Примеры — запрос на доступ в sharepoint

Это не тот ли пример с заявками, которые я приводил как плохой? Лично мне не по душе вариант SharePont, когда доступ к каждому сайту каждый пользователь запрашивает отдельно (адова нагрузка на модераторов), вместо того, чтобы доступ давать по ролям, что шарик позволяет на основе того же AGULP.

Вариант по заявкам пригоден для сайтов, расчитанных на маленькое количество пользователей (проектные команды и т. п.), но никак не на корпоративные порталы.

запрос на доступ в Windows File Share.

Я не встречал встроенного функционала, который это может реализовать. Я что-то пропустил?

Вообще «новомодной» фишкой, над которой очень стоит задуматься — внедрение Dynamic Access Control и классификации ресурсов. Функционал обладает огромным потенциалом и убивает стадо зайцев одним выстрелом.

Dynamic Access Control (наша реализация ABAC) — пробовал, понравилось. Но пока на практике не встречал ситуаций, когда то же самое нельзя было реализовать в рамках хорошо продуманной ролевой модели (RBAC), реализованной в виде AGULP.

Я бы рассматривал ABAC как вариант, когда RBAC/AGULP уже не справляются со сложностью правил доступа. Но тут другая засада, в организации перед внедрением ABAC нужно привести в порядок атрибуты / таксономию пользователей, что может быть сопоставимо по сложности с реорганизацией ролевой модели.

С «классификацией ресурсов» ещё не разбирался.

Кирилл Николаев
# Комментарий от 2017-01-10, 17:12

Привет, Игорь!

>Поскольку в концепции AD границей безопасности является домен
Границей безопасности является лес. (https://technet.microsoft.com/en-us/library/cc759073(v=ws.10).aspx) Член Domain Admins любого домена в лесу может получить привилегии Enterprise Admin.

>Не рекомендуется использовать универсальные группы не из своего леса
Разве возможно универсальной группе в одном лесу, предоставить разрешения в другом лесу? Может быть вы имели ввиду здесь домены а не леса?

Argon
# Комментарий от 2017-02-17, 17:17

Границей безопасности является лес

Кирилл, вы правы. Исправил в тексте. Странно, в каком угаре я мог это написать, ибо сам же в других местах всегда объясняю что такое лес и граница безопасности.

Разве возможно универсальной группе в одном лесу, предоставить разрешения в другом лесу?

Можно. Разрешения — это всего лишь запись, где можно указать любой SID. И если есть отношения доверия, этот SID будет разрешён в имя группы в другом лесу.

Кирилл Николаев
# Комментарий от 2017-02-19, 05:30

>Можно. Разрешения — это всего лишь запись, где можно указать любой SID.

Ох, это я с добавлением в группу перепутал.

Добавить комментарий