Ролевая модель и права доступа#
Для обеспечения контроля доступа к защищаемым элементам системы применяется система разграничения доступа, основанная на ролях. Здесь и ниже под ролевой моделью понимается стандартная ролевая модель Pangolin, устанавливаемая инсталлятором до версии 5.4.0.
Начиная с версии Pangolin 5.4.0 конфигурирование ролевой модели вынесено из инсталлятора. Ее конфигурирование опционально и может быть выполнено с помощью инсталляционных скриптов конфигурирования ролевой модели, включенных в состав дистрибутива. При необходимости данные скрипты могут быть модифицированы (например, в случае, если в какой-либо функциональности нет необходимости), либо заменены альтернативной ролевой моделью.
Права доступа пользователей устанавливаются парольными политиками в соответствии с ролевой моделью. Управление парольными политиками описано в документе «Руководство по системному администрированию», раздел «Сценарии администрирования», подраздел «Интерфейс управления парольными политиками: PL/pgSQL API»).
Структура скриптов конфигурирования ролевой модели#
Скрипты конфигурирования ролевой модели делятся на:
запускаемые пользователем bash-скрипты;
sql-скрипты, вызываемые bash-скриптами с помощью psql;
ansible-скрипты.
Модификация скриптов выполняется администратором системы, ответственным за настройку ролевой модели на конкретном кластере. Дистрибутив Pangolin содержит образец скриптов, настраивающих стандартную ролевую модель.
Примечание:
Скрипты конфигурирования ролевой модели запрещены к использованию и будут удалены из состава дистрибутива Pangolin в версии 6.x.x.
Примеры запуска скриптов настройки ролевой модели приведены в документе Руководство по установке, раздел «Установка».
Запускаемые скрипты#
Запускаемые скрипты конфигурирования ролевой модели находятся в директории дистрибутива: installer/scripts_external/configure_roles/configure_roles/templates/role_BASIC/.
Данные скрипты являются параметризируемыми. Значения параметров могут быть заданы непосредственно в теле скрипта, либо с помощью опций командной строки. Параметры, указываемые в командной строке, перезаписывают значения аналогичных параметров, заданных в теле скрипта.
Комментарии в теле скриптов содержат:
инструкции по выбору значений параметров;
рекомендуемый перечень подготовительных действий, которые следует выполнить до запуска скрипта;
перечень заключительных действий, которые следует выполнить после запуска скрипта.
В дистрибутив включены следующие запускаемые bash-скрипты:
Имя скрипта |
Назначение |
|---|---|
|
Основной скрипт, выполняющий конфигурирование ролевой модели |
|
Скрипт, выполняющий конфигурирование хранилища паролей для пользователей profile_tuz и backup_user |
Параметры скрипта run_configure.sh:
Имя параметра |
Назначение |
|---|---|
|
Имя пользовательской базы данных |
|
Имя пользовательского табличного пространства |
|
Имя директории, содержащей табличное пространство |
|
Имя пользовательской схемы |
|
Порт в настройках pg_profile |
|
Имя хоста мастера в настройках pg_profile |
|
Имя хоста реплики в настройках pg_profile |
|
Период запуска задания cron в настройках pg_profile |
|
Срок действия пароля конечных пользователей |
|
Имя пользователя резервного копирования для использования в manage_backup.sh |
|
Список конечных пользователей, создаваемых в группе as_admin |
|
Список конечных пользователей, создаваемых в группе as_TUZ |
|
Флаг, указывающий на задание временных паролей |
|
Флаг включения TDE |
|
Путь, по которому размещается данный скрипт (требуется только при запуске с помощью ansible) |
|
Путь, по которому размещается запускаемый модуль psql |
|
Словарь паролей ТУЗов. В случае задания пароля в виде SCRAM-SHA-256 - хэш должен быть предварительно вычислен |
|
Словарь для задания списка функций, которые необходимо включить |
|
Значение locale с которой будет создана пользовательская БД |
|
Имя пользовательской БД в которой будет установлен pg_profile |
Скрипт run_configure.sh, запущенный с опцией -h или --help, выводит сообщение-подсказку о доступных опциях командной строки и после этого останавливается.
При запуске скрипта run_configure.sh выводится список актуальных значений параметров и выполняется ряд проверок.
SQL-скрипты#
SQL-скрипты вызываются bash-скриптами, являющимися в данном ключе оркестраторами. SQL-скрипты находятся в директориях:
installer/scripts_external/configure_roles/configure_roles/templates/role_BASIC/sql_scripts;installer/scripts_external/configure_roles/configure_roles/templates/role_BASIC/sql_scripts/extensions;installer/scripts_external/configure_roles/configure_roles/templates/role_BASIC/sql_scripts/pg_profile.
SQL-скрипты предназначены для настройки отдельных функциональных блоков ролевой модели и в качестве параметров принимают значения из bash-скриптов, которыми они были вызваны. Скрипты выполняются целиком, как отдельная транзакция, и откатываются, если какой-либо оператор завершился с ошибкой.
В дистрибутив включены следующие SQL-скрипты:
Имя скрипта |
Назначение |
|---|---|
|
Выполняет создание пользовательского табличного пространства и базы данных. В качестве шаблона при создании базы данных берется стандартная системная база template1 |
|
Выполняет создание конечных пользователей группы as_admin |
|
Выполняет создание конечных пользователей группы as_TUZ |
|
Выполняет создание групповых ролей и служебных пользователей |
|
Выполняет создание пользовательской схемы |
|
Выполняет настройку прав доступа пользовательским функциям |
|
Выполняет настройку функции get_role_passwd |
|
Выполняет общие для всех баз данных настройки привилегий |
|
Выполняет настройки привилегий в базе данных postgres |
|
Выполняет настройки привилегий в пользовательской базе данных |
|
Выполняет настройки привилегий роли public в базе данных template0.sql |
|
Выполняет настройки парольных политик |
|
Выполняет установку расширений, используемых в 1C |
|
Выполняет настройки расширений, общие для всех баз данных |
|
Выполняет настройки расширений в базе данных postgres |
|
Выполняет настройку расширения pg_hint_plan |
|
Выполняет настройку расширения pg_outline |
|
Выполняет настройку расширения pg_stat_kcache |
|
Выполняет настройку расширения psql_rotate_password |
|
Выполняет настройку схемы 'ext' |
|
Выполняет настройку расширения pg_profile |
|
Выполняет настройку прав доступа для расширения pg_profile |
|
Выполняет настройку владельца функций расширения pg_profile |
|
Выполняет настройку общих прав доступа для расширения pg_profile |
|
Выполняет настройку pgaudit.log для пользователей из ролевой модели |
Ansible-скрипты#
Для упрощения развертывания ролевой модели была реализована ansible-роль configure_roles, которая выполняет настройку ролевой модели, пользовательской БД и расширений автоматически. Выполнение данной роли предполагается после выполнения развертывания Pangolin с использованием playbook_configure_roles.yaml. В данном случае будет выполнена настройка ролевой модели, пользовательской БД и расширений после чистой установки Pangolin. Данная роль располагается в дистрибутиве по пути installer/scripts_external/configure_roles.
Роль configure_roles полностью автономна, может быть запущена вне компонента installer и имеет следующую структуру:
Файл/директория |
Назначение |
|---|---|
|
Основной ansible-скрипт, выполняющий развертывание ролевой модели |
|
Директория, содержащая фильтры для использования внутри роли |
|
Директория, содержащая запускаемые sql-скрипты (раздел «SQL-скрипты» данного руководства) для развертывания ролевой модели, пользовательской БД и расширений |
|
Директория, содержащая yml-скрипты для развертывания ролевой модели |
|
Директория, содержащая переменные, используемые ролью для развертывания ролевой модели |
|
Директория, содержащая бинарный файл генератора паролей |
Структура файлов с переменными имеет следующий вид:
Файл |
Назначение |
|---|---|
|
Файл с общими параметрами для роли |
|
Файл с сообщениями, которые используются в процессе выполнения роли |
|
Файл с переменными, используемыми для корректировки настраиваемой ролевой модели |
Ansible-роль configure_roles используется при инсталляции для настройки ролевой модели.
Структура ролей#
В рамках структуры ролей рассматриваются следующие типы:
административные, использующиеся для системного управления кластером и прикладного администрирования данных;
прикладные, предназначенные для пользователей, отвечающих за наполнение БД данными;
специальные, создающиеся для соответствия принятым в организации подходам к аудиту, мониторингу, резервному копированию, восстановлению и др.
При настройке ролевой модели создаются следующие групповые роли:
Групповая роль |
Назначение |
|---|---|
|
Административная роль, обладающая привилегией |
|
Административная роль — владелец схемы. Выдается администраторам АС. Используется для создания новых объектов в БД (таблиц, функций, последовательностей и т.п) и их изменения. Является владельцем пользовательской схемы. Также выдается доменным или локальным ТУЗ для инструментов автоматизации |
|
Прикладная роль для доступа к пользовательским данным. Имеет привилегии для совершение DML-операций с объектами схемы. Работает в пуле соединений с БД, а также подключается через pgBouncer |
|
Административная роль, отличающаяся от |
|
Выдается учетным записям, используемым для доступа через PAM (privileged access management). Используется исключительно для организации аутентификации, конфигурирования |
Дополнительно создаются следующие специальные инфраструктурные ТУЗ:
Инфраструктурная роль |
Назначение |
|---|---|
|
ТУЗ с локальной аутентификации для интеграции с СРК |
|
ТУЗ с локальной аутентификацией для интеграции с системой мониторинга |
|
ТУЗ с локальной аутентификацией для проведения аудита безопасности |
|
ТУЗ с локальной аутентификацией для подключения локальной службы PgBouncer |
|
ТУЗ с локальной аутентификацией для подключения локальной службы Patroni |
|
ТУЗ с внешней аутентификацией для подключения через АС PAM администраторов БД |
|
ТУЗ с внешней аутентификацией для подключения через АС PAM администраторов систем с привилегиями только на чтение |
Связь ролей с объектами БД#
При настройке ролевой модели создаются стандартные объекты БД Pangolin и назначается привилегии для их использования. Такими объектами являются:
пользовательское табличное пространство — создается на уровне кластера;
пользовательская база данных — уровень кластера;
пользовательская схема — уровень определенной базы данных.
Табличное пространство создается в директории /pgdata/<номер мажорной версии продукта>/tablespaces/ (может различаться в зависимости от мажорной версии). Владельцем табличного пространства является db_admin, а права на доступ выдаются роли as_admin.
В дополнение к стандартным базам данных Postgresql (template0, template1, postgres) создается пользовательская БД. Владелец данной БД — db_admin. Права на использование (USAGE) и логин на данную БД есть по умолчанию у всех вновь создаваемых ролей.
Схема и объекты схемы#
Владельцем пользовательской схемы является as_admin. Права на использование схемы выдаются роли as_TUZ.
Для использования схемы предоставляются две привилегии: USAGE и CREATE. Для создания новых объектов в схеме нужна привилегия CREATE. Для обращения к объектам схемы (при условии, что есть права на них) нужна привилегия USAGE. Привилегия CREATE есть только у роли as_admin.
Внутри схемы хранятся объекты БД (таблицы, индексы, функции, и т.п). Для каждого типа объекта существует свой набор привилегий. Владельцем объекта становится роль, активная в момент выдачи SQL-запроса на его создание. Так как требуется, чтобы владельцем объектов БД была групповая роль as_admin, то для обеспечения данного условия используются следующие механизмы:
При создании объектов администратор, выполняющий данную задачу, должен выдавать команду
SET ROLE as_admin. Для автоматизации некоторых задач, а также в случае, когда другие роли данной УЗ не используются, можно один раз настроить УЗ для работы в ролиas_admin, выдавALTER ROLE <rolename> SET ROLE as_admin. В дальнейшем данная УЗ всегда будет работать какas_admin.Владельцем объектов может быть только групповая роль, поэтому в УЗ администраторов, имеющих права на создание объектов отключена опция
INHERIT. Для конечных пользователей БД (ТУЗ) отключатьINHERITне требуется — они не имеют привилегий на создание объектов, но зато автоматически наследуют все другие необходимые привилегии.Роль
as_admin, которая имеет привилегию на создание объектов, нельзя унаследовать (она имеет свойствоNOINHERIT). Это связано с тем, что на момент инсталляции неизвестно, какие пользователи будут работать с БД в дальнейшем и какие привилегии им будут назначены. Групповые роли позволяют систематизировать пользовательскую структуру. А для того, чтобы владельцем объекта становилась именно рольas_admin, необходимо явно переключаться на нее с помощью запроса:SET ROLE as_admin.После создания объекта роль
as_adminпредоставляет необходимую привилегию роли, использующей объект (это в первую очередьas_TUZ). Данный процесс можно облегчить, если назначитьdefault privilegesсоздающей роли (as_admin). С помощьюdefault privilegesправа заранее предоставляются на объекты, которые будут создаваться в будущем в данной схеме.