Ролевая модель в DataGrid#
Ролевая модель — это набор разрешений и прав, которые предоставляют пользователям доступ к управлению и настройке DataGrid. Обычно ролевая модель соответствует действиям и полномочиям определенной должности, что позволяет создать и настроить конкретную роль, а затем предоставить эту роль всем сотрудникам с такой должностью. В плагине безопасности все операции, связанные с предоставлением и изъятием прав пользователей, выполняются через роли. Можно создавать любые роли с любым набором разрешений, которые будут учитывать специфику рабочего процесса команды.
Списки разрешений для ролей#
Ролевые модели с необходимыми разрешениями можно создавать самостоятельно, не ограничиваясь описанными в данном документе вариантами. Каждая роль предусматривает список разрешений.
Все разрешения, из которых можно собрать итоговую ролевую модель, делятся по типам задач:
операции с кешем;
задачи и вычисления;
сервисы;
управление событиями;
администрирование и мониторинг;
управление кластером;
присоединение к кластеру;
SQL-операции.
В ролевой модели эти разрешения делятся категории:
cachePermissions;taskPermissions;servicePermissions;conflictPermissions;systemPermissions.
Операции с кешем (Cache)#
Разрешение |
Описание |
|---|---|
|
Чтение данных из кеша. Проверяется при любых операциях |
|
Запись данных в кеш. Проверяется при любых операциях |
|
Удаление данных из кеша. Проверяется при любых операциях |
|
Создание нового кеша. Проверяется в |
|
Удаление кеша. Проверяется в |
Примечание
При добавлении разрешений на работу с кешами обязательно укажите имя каждого кеша с разрешениями для него. Чтобы разрешение распространялось на все кеши, укажите * вместо имени кеша.
Задачи и вычисления (Task/Compute)#
Разрешение |
Описание |
|---|---|
|
Запуск распределенных задач (compute tasks). Проверяется при запуске задачи ( |
|
Отмена распределенных задач (compute tasks). Проверяется при отмене задачи (task) или отдельного задания (job) |
Примечание
При добавлении разрешений на выполнение задач обязательно укажите имя каждой задачи с разрешениями для нее. Чтобы разрешение распространялось на все задачи, укажите * вместо имени задачи.
Сервисы (Service Grid)#
Разрешение |
Описание |
|---|---|
|
Развертывание сервиса в кластере. Проверяется в |
|
Остановка/отмена развертывания сервиса. Проверяется при отмене развернутого сервиса |
|
Вызов сервиса. Проверяется при получении прокси к сервису ( |
Примечание
При добавлении разрешений на запуск сервисов обязательно укажите имя каждого сервиса с разрешениями для него. Чтобы разрешение распространялось на все сервисы, укажите * вместо имени сервиса.
Управление событиями (Events)#
Разрешение |
Описание |
|---|---|
|
Включение событий. Проверяется при включении типов событий |
|
Отключение событий. Проверяется при отключении типов событий |
Администрирование и мониторинг (Admin)#
Разрешение |
Описание |
|---|---|
|
Просмотр состояния кластера. Разрешает выполнение общих задач мониторинга (просмотр топологии и метрик) |
|
Общие административные операции. Разрешает выполнение административных задач (подробнее о них написано в следующем разделе) |
|
Принудительное завершение процессов. Проверяется при |
Управление кластером (Cluster Management)#
Разрешение |
Описание |
|---|---|
|
Изменение состояния кластера (активация, деактивация, смена базовой топологии) |
|
Запуск новых узлов кластера |
|
Остановка и перезапуск узлов кластера |
|
Операции со снепшотами кластера (создание, отмена, проверка) |
|
Выполнение Rolling Upgrade кластера (подробнее о нем написано в разделе «Механизм обновления узлов Rolling Upgrade») |
|
Операции с метаданными кластера (удаление и обновление бинарных типов) |
|
Чтение распределенных свойств кластера |
|
Запись и изменение распределенных свойств кластера |
|
Управление пользователями: создание, изменение, удаление |
Присоединение к кластеру#
Разрешение |
Описание |
|---|---|
|
Разрешает присоединиться к кластеру как серверный узел |
SQL-операции#
Разрешение |
Описание |
|---|---|
|
Выполнение команды |
|
Выполнение команд |
|
Выполнение команды |
|
Выполнение команды |
Команды утилиты control.sh и необходимые разрешения для них#
Состояние, активация и деактивация кластера#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Активировать кластер (команда устарела и была заменена на |
|
|
Деактивировать кластер |
|
|
Показать текущее состояние кластера |
Офлайн-команда |
|
Изменить состояние кластера |
|
|
Изменить идентификатор кластера (cluster tag) |
|
|
Получить или задать политику отключения (shutdown policy) |
|
Базовая топология#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Показать текущую базовую топологию (baseline) |
|
|
Добавить узлы в базовую топологию |
|
|
Удалить узлы из базовой топологии |
|
|
Установить базовую топологию |
|
|
Установить версию базовой топологии |
|
|
Автоматически настроить базовую топологию |
|
Транзакции#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Вывести список или отменить транзакции |
|
|
Вывести подробную информацию по |
|
Кеши#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Вывести справку по подкомандам |
— |
|
Вывести список кешей или кеш-групп |
|
|
Создать кеши из Spring XML |
|
|
Удалить указанные кеши |
|
|
Очистить кеши |
|
|
Показать содержимое кеша |
|
|
Вывести ключи, за которые идет конкуренция в транзакциях |
|
|
Провести проверку партиций |
|
|
Отменить запуск утилиты |
|
|
Дамп утилиты |
|
|
Поиск/удаление мусора |
|
|
Распределение партиций по узлам |
|
|
Сбросить потерянные партиции |
|
|
Вывести список индексов с фильтрами |
|
|
Вывести прогресс перестройки индексов |
|
|
Принудительная перестройка индексов |
|
|
Поставить перестройку индексов в очередь |
|
|
Провести валидацию индексов |
|
|
Сверка встроенного размера (inline-size) индексов |
|
|
Управление сбором метрик пользовательских кешей |
|
Снепшоты и дампы#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Создать снепшот кластера |
|
|
Отменить снятие снепшота |
|
|
Проверить снепшот |
|
|
Восстановить снепшот |
|
|
Статус текущей операции со снепшотом |
|
|
Создать дамп |
|
|
Проверить дамп |
|
|
Отменить снятие дампа |
|
WAL-журнал#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Список WAL-сегментов |
|
|
Удалить WAL-сегменты |
|
|
Включить WAL для кеш-групп |
|
|
Отключить WAL (журнал предзаписи) для кеш-групп |
|
|
Состояние WAL по группам |
|
Контрольная точка#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Запустить создание контрольных точек (checkpoint) |
|
Диагностика#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Проверить связность узлов |
|
|
Отобразить состояние блокировки страниц |
|
Шифрование#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Текущее имя мастер-ключа |
|
|
Сменить мастер-ключ |
|
|
Сменить ключ шифрования кеш-группы |
|
|
Список идентификаторов ключей шифрования кеш-группы |
|
|
Отобразить статус повторного шифрования |
|
|
Приостановить повторное шифрование |
|
|
Возобновить повторное шифрование |
|
|
Установить лимит скорости повторного шифрования |
|
Прерывание#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Прервать распределенную задачу (compute tasks) |
|
|
Прервать развертывание сервиса |
|
|
Прервать выполнение SQL-запроса |
|
|
Прервать выполнение scan-запроса |
|
|
Прервать выполнение непрерывного запроса (continuous query) |
|
|
Прервать выполнение транзакции |
|
|
Отменить снятие снепшота |
|
|
Прервать операцию по проверке и устранению несогласованности данных |
|
|
Завершить соединение с тонким клиентом |
|
Метаданные#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Вывести список метаданных бинарного типа |
|
|
Вывести детальную информацию об определенном |
|
|
Удалить метаданные из кластера |
|
|
Обновить метаданные кластера из файла |
|
Трассировка#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Показать конфигурацию трассировки |
|
|
Показать всю конфигурацию трассировки |
|
|
Показать конкретную конфигурацию трассировки |
|
|
Сбросить конфигурации трассировки |
|
|
Сбросить конкретную конфигурацию трассировки |
|
|
Установить конфигурацию трассировки |
|
Разогрев данных#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Прервать разогрев данных (только до запуска узла) |
Офлайн-команда, которая выполняется локально на узле перед его запуском |
Свойства#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Вывести список распределенных свойств (distributed properties) |
|
|
Прочитать распределенные свойства |
|
|
Записать распределенные свойства |
|
Механизм обновления узлов Rolling Upgrade#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Вывести статус механизма обновления узлов Rolling Upgrade |
|
|
Включить Rolling Upgrade |
|
|
Выключить Rolling Upgrade |
|
Системные представления и метрики#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Вывести содержимое системного представления (system view) |
|
|
Вывести значение метрики |
|
|
Конфигурирование гистограммы конкретной метрики |
|
|
Настройка показателя частоты снятия метрики |
|
|
Настройка максимального значения метрики |
|
Статистика производительности#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Начать сбор статистики производительности (performance statistics) |
|
|
Остановить сбор статистики производительности |
|
|
Ротация сбора статистики производительности |
|
|
Вывести статус сбора статистики производительности |
|
Персистентность#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Информация о потенциально поврежденных кешах |
Офлайн-команда, которая выполняется на узле в аварийном режиме |
|
Резервирование поврежденных файлов данных |
Офлайн-команда, которая выполняется на узле в аварийном режиме |
|
Очистить каталоги кешей |
Офлайн-команда, которая выполняется на узле в аварийном режиме |
Дефрагментация#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Запланировать дефрагментацию на узлах |
|
|
Вывести статус дефрагментации |
Офлайн-команда, которая выполняется на узле в аварийном режиме |
|
Отменить дефрагментацию |
Офлайн-команда, которая выполняется на узле в аварийном режиме |
CDC#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Удалить ссылки на удаленные WAL-сегменты, которые не были обработаны CDC |
|
|
Отправить CDC-данные повторно |
|
Консистентность#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Запустить проверку/восстановление согласованности кеша с помощью метода Read Repair |
|
|
Вывести статус операции проверки/восстановления согласованности кеша |
|
|
Установить корректные значения счетчиков после устранения расхождений |
|
Управление пользователями#
Команда |
Описание |
Разрешение |
|---|---|---|
|
Вывести справочную информацию |
Офлайн-команда |
|
Создать пользователя |
|
|
Удалить пользователя |
|
|
Вывести список пользователей |
|
|
Изменить параметры пользователя |
|
|
Изменить пароль пользователя |
Дополнительные права не нужны, пользователь может изменить только свой пароль |
|
Создать роль |
|
|
Вывести список ролей |
|
|
Изменить роль |
|
|
Удалить роль |
|
|
Экспортировать конфигурацию ролевой модели |
|
|
Импортировать конфигурацию ролевой модели |
|
|
Сгенерировать хеш пароля |
Офлайн-команда |
Инструкции по настройке ролей описаны ниже в разделе «Управление ролями».
При создании и настройке списка разрешений, доступных для пользователей с определенными ролями, важно учитывать совместимость разрешений между собой. Каждой ролевой модели предоставляются:
список минимально необходимых разрешений, которые обязательно выдаются пользователю;
список конфликтных разрешений, которые запрещается выдавать пользователю с данной ролью.
Использование списка конфликтных разрешений позволяет гибко настраивать несовместимость ролей индивидуально для каждого кластера.
Первичная инициализация ролевой системы и учетных записей пользователей#
Для первичной инициализации ролевой системы и учетных записей пользователей используется обязательный парамер в конфигурации плагина безопасности — IgniteConfiguration#userDataStore (подробнее о нем написано в подразделе «Конфигурация плагина безопасности» раздела «Безопасность и аудит»). Параметр IgniteConfiguration#userDataStore принимает на вход путь к файлу, который описывает ролевую систему и учетные записи пользователей в JSON-формате.
Формат описания ролевой системы и учетных записей пользователей#
Актуальное сотояние учетных данных пользователей и ролевой модели можно посмотреть в файле, который находится на хосте в рабочей директории DataGrid. Путь к файлу:
для узлов с установленным consistent ID —
$IGNITE_HOME/work/security/storage/$CONSISTID/security-data.json;для узлов с не настроенным consistent ID —
$IGNITE_HOME/work/security/storage/security-data.json.
Структура JSON-файла с описанием ролевой системы и учетных записей пользователей#
Корень JSON-файла должен содержать два ключа:
roles— массив записей, которые описывают роли (подробнее о ролях написано ниже в разделе «Формат описания роли»);users— массив записей, которые описывают учетные записи пользователй (подробнее о пользователях написано ниже в разделе «Формат описания учетной записи пользователя»).
Формат описания роли#
Поддержваемые ключи:
name— имя роли (обязательный параметр);permissions— запись, описывающая набор разрешений, которые предоставляются пользователю вместе с ролью (обязательный параметр, подробнее о разрешениях написано ниже в разделе «Формат описания набора разрешений»);conflictPermissions— запись, описывающая набор разрешений, которые не могут быть даны пользователю с текущей ролью (опциональный параметр, подробнее о разрешениях написано ниже в разделе «Формат описания набора разрешений»).
Формат описания набора разрешений#
Подробнее о доступных разрешениях написано выше в разделе «Формат описания роли».
Поддерживаемы ключи:
systemPermissions— массив системных разрешений (опциональный параметр);cachePermissions— запись, в качестве ключей которой выступают имена кешей, а в качестве значений — массив предоставляемых разрешений доступа (опциональный параметр);taskPermissions— запись, в качестве ключей которой выступают задачи класса FQN (Fully Qualified Name, полностью определенное имя) — compute tasks, а в качестве значений — массив предоставляемых разрешений доступа (опциональный параметр);servicePermissions— запись, в качестве ключей которой выступают имена сервисов, а в качестве значений — массив предоставляемых разрешений доступа (опциональный параметр).
Формат описания учетной записи пользователя#
Поддержваемые ключи:
login— логин пользователя (обязательный параметр).distinguishedName— DN (distinguished name) пользователя. Параметр требуется для аутентифкации с помощью сертификата (подробнее об этом написано в подразделе «Certificate Authenticator» раздела «Безопасность и аудит»). Для успешной аутентификации DN, который указан в сертификате, должен совпадать со значением данного параметра (опциональный параметр).secret— секрет пользователя. Нужен для аутентификации с помощью пароля (опциональный параметр, подробнее об этом написано в подразделе «Simple Authenticator» раздела «Безопасность и аудит»). Подробнее о формате секрета пользователя написано ниже в разделе «Формат описания секрета пользователя».roles— массив имен ролей, которые принадлежат текущему пользователю. Роли с указанными именами должны быть описаны в ролевой системе (обязательный параметр, подробнее о ролях написано выше в разделе «Формат описания роли»).realm— имя Realm, которому принадлежит текущий пользователь. Если не указан, пользователь будет добавлен в Realm с именемdefault. Конфигурация Realm с соответсвующим именем должна быть указана в конфигурации плагина безопасностиSecurityPluginConfiguration#realmConfiguration(опциональный параметр, подробнее о конфигурации Realms написано в подразделе «Конфигурация Realms» раздела «Безопасность и аудит»).
Формат описания секрета пользователя#
Секрет можно задать в двух взаимоисключающих форматах: пароль в открытом виде или ключ и соль, которые получены в результате PBKDF-вычисления. Ключ и соль генерируются с помощью утилиты управления пользователями — подробнее о ней написано в разделе «Утилита ise-user-control для управления пользователями».
Подерживаемые ключи:
password— текстовый пароль.key— ключ, который получен в результате PBKDF-вычисления.salt— соль, которая получена в результате PBKDF-вычисления.isTemporary— параметр определяет, яляется ли секрет временным. Доступ пользователя, для которого настроен временный пароль, будет ограничен до тех пор, пока пароль не будет изменен.
Формат ролевой модели
{
"roles": [
{
"name": "role-name",
"permissions":
"systemPermissions": [
EVENTS_ENABLE,
EVENTS_DISABLE,
ADMIN_VIEW,
ADMIN_OPS,
ADMIN_KILL,
ADMIN_USER_ACCESS,
CACHE_CREATE,
CACHE_DESTROY,
JOIN_AS_SERVER,
ADMIN_METADATA_OPS,
ADMIN_READ_DISTRIBUTED_PROPERTY,
ADMIN_WRITE_DISTRIBUTED_PROPERTY,
ADMIN_SNAPSHOT,
ADMIN_CLUSTER_STATE,
ADMIN_CLUSTER_NODE_START,
ADMIN_CLUSTER_NODE_STOP,
REFRESH_STATISTICS,
CHANGE_STATISTICS,
SQL_VIEW_CREATE,
SQL_VIEW_DROP
],
"cachePermissions": {
"cache-name": [
"CACHE_CREATE",
"CACHE_DESTROY",
"CACHE_READ",
"CACHE_REMOVE",
"CACHE_PUT"
],
...
},
"taskPermissions":
"task-name": [
"TASK_CANCEL",
"TASK_EXECUTE"
],
...
},
"servicePermissions": {
"service-name": [
"SERVICE_CANCEL",
"SERVICE_DEPLOY",
"SERVICE_INVOKE"
],
...
}
},
"conflictPermissions": {
}
},
...
],
"users": [
{
"login": "client",
"distinguishedName": "CN=client, O=SOLUTION.SBT",
"secret": {
"password": "******"
"key": "************",
"salt": "************",
"isTemporary": true
},
"roles": [
"role-name",
...
],
"realm": "default"
},
...
]
}
Для генерации пары key-salt в DataGrid предусмотрена команда скрипта control.sh:
./control.sh --security-plugin secrets generate_hash --user-password
После запуска данной команды нужно будет ввести пароль пользователя, а в выводе будут указаны key и salt.
Управление ролями#
В настоящий момент роли могут быть изменены динамически с помощью Platform V Grid Center или с помощью утилиты ise-user-control (подробнее о работе с утилитой ise-user-control написано в разделе «Утилита ise-user-control для управления пользователями»).