Ролевая модель в DataGrid#

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

Списки разрешений для ролей#

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

Список разрешений на работу с кешами:

  • CACHE_CREATE — создание кеша;

  • CACHE_DESTROY — удаление кеша;

  • CACHE_READ — чтение значений из кеша;

  • CACHE_PUT — добавление/изменение значения в кеше;

  • CACHE_REMOVE — удаление значения из кеша.

Примечание

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

Список разрешений на выполнение задач:

  • TASK_EXECUTE — запуск задачи на выполнение;

  • TASK_CANCEL — отмена выполнения задачи.

Примечание

При добавлении разрешений на выполнение задач обязательно укажите имя каждой задачи с разрешениями для нее. Чтобы разрешение распространялось на все задачи, укажите * вместо имени задачи.

Список разрешений на запуск сервисов:

  • SERVICE_DEPLOY — развертывание сервиса;

  • SERVICE_CANCEL — отмена развертывания сервиса;

  • SERVICE_INVOKE — вызов сервиса.

Примечание

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

Список системных разрешений:

  • ADMIN_CLUSTER_NODE_START — запуск новых узлов в кластере;

  • ADMIN_CLUSTER_NODE_STOP — остановка и перезапуск узлов в кластере;

  • ADMIN_KILL — завершение системных процессов;

  • ADMIN_OPS — выполнение команд для администрирования DataGrid (не включает в себя разрешения с префиксом ADMIN_, приведенные ниже);

  • ADMIN_READ_DISTRIBUTED_PROPERTY — просмотр property, доступных для изменения через control.sh и их текущее значение;

  • ADMIN_SNAPSHOT — работа со снепшотами (CREATE, CANCEL, CHECK). Должно быть у серверных узлов;

  • ADMIN_METADATA_OPS — выполнение операций с метаданными (REMOVE, UPDATE);

  • ADMIN_WRITE_DISTRIBUTED_PROPERTY — редактирование property, доступных для изменения через утилиту control;

  • ADMIN_USER_ACCESS — у пользователя с данной ролью есть набор привелегий:

    • создание/удаление пользователя;

    • создание/удаление роли;

    • изменение пароля пользователя;

    • добавление/удаление роли пользователя;

    • получение списка ролей/пользователей.

  • ADMIN_CLUSTER_STATE — управление состоянием кластера (INACTIVE, ACTIVE, ACTIVE_READ_ONLY);

  • CACHE_CREATE — создание кеша. Выбирается или это системное разрешение, или разрешение на работу с кешами. Выбор CACHE_CREATE в качестве системного разрешения позволяет создавать все кеши;

  • CACHE_DESTROY — удаление кеша. Выбирается или это системное разрешение, или разрешение на работу с кешами. Выбор CACHE_DESTROY в качестве системного разрешения позволяет удалять все кеши;

  • CHANGE_STATISTICS — разрешение на выполнение команды ANALYZE and DROP STATISTICS;

  • EVENTS_ENABLE — включение событий;

  • EVENTS_DISABLE — отключение событий;

  • JOIN_AS_SERVER — присоединение к кластеру в качестве серверного узла;

  • REFRESH_STATISTICS — разрешение на выполнение команды REFRESH STATISTICS.

Инструкции по настройке ролей приведены в разделе «Управление ролями» текущего документа.

При создании и настройке списка разрешений, доступных для пользователей с определенными ролями, важно учитывать совместимость разрешений между собой. Каждой ролевой модели предоставляются:

  • список минимально необходимых разрешений, которые обязательно выдаются пользователю;

  • список конфликтных разрешений, которые запрещается выдавать пользователю с данной ролью.

Первичная инициализация ролевой системы и учетных записей пользователей#

Для первичной инициализации ролевой системы и учетных записей пользователей используется обязательный парамер в конфигурации плагина безопасности — 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-файла должен содержать два ключа:

Формат описания роли#

Поддержваемые ключи:

  • 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"
    },
    ...
  ]
}

Управление ролями#

В настоящий момент роли могут быть изменены динамически с помощью Platform V Grid Center или с помощью утилиты ise-user-control (подробнее о работе с утилитой ise-user-control написано в разделе «Утилита ise-user-control для управления пользователями»).