Ролевая модель и права доступа#
Для обеспечения контроля доступа к защищаемым элементам системы применяется система разграничения доступа, основанная на ролях. Здесь и ниже под ролевой моделью понимается стандартная ролевая модель Pangolin, устанавливаемая инсталлятором до версии 5.4.0.
Начиная с версии Pangolin 5.4.0 конфигурирование ролевой модели вынесено из инсталлятора. Ее конфигурирование опционально и может быть выполнено с помощью инсталляционных скриптов конфигурирования ролевой модели, включенных в состав дистрибутива. При необходимости данные скрипты могут быть модифицированы (например, в случае, если в какой-либо функциональности нет необходимости), либо заменены альтернативной ролевой моделью.
Права доступа пользователей устанавливаются парольными политиками в соответствии с ролевой моделью. Управление парольными политиками описано в документе «Руководство администратора», раздел «Сценарии администрирования», подраздел «Интерфейс управления парольными политиками: PL/pgSQL API».
Структура скриптов конфигурирования ролевой модели#
Скрипты конфигурирования ролевой модели делятся на:
запускаемые пользователем bash-скрипты;
SQL-скрипты, вызываемые bash-скриптами с помощью psql;
ansible-скрипты.
Модификация скриптов выполняется администратором системы, ответственным за настройку ролевой модели на конкретном кластере. Дистрибутив Pangolin содержит образец скриптов, настраивающих стандартную ролевую модель.
Примеры запуска скриптов настройки ролевой модели приведены в документе «Руководство по установке», раздел «Установка».
Запускаемые скрипты#
Запускаемые скрипты конфигурирования ролевой модели находятся в директории дистрибутива: 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-операций с объектами схемы. Работает в пуле соединений с БД, а также подключается через Pangolin Pooler |
|
Административная роль, отличающаяся от |
|
Выдается учетным записям, используемым для доступа через PAM (privileged access management). Используется исключительно для организации аутентификации, конфигурирования |
Дополнительно создаются следующие специальные инфраструктурные ТУЗ:
Инфраструктурная роль |
Назначение |
|---|---|
|
ТУЗ с локальной аутентификации для интеграции с СРК |
|
ТУЗ с локальной аутентификацией для интеграции с системой мониторинга |
|
ТУЗ с локальной аутентификацией для проведения аудита безопасности |
|
ТУЗ с локальной аутентификацией для подключения локальной службы Pangolin Pooler |
|
ТУЗ с локальной аутентификацией для подключения локальной службы Patroni |
|
ТУЗ с внешней аутентификацией для подключения через АС PAM администраторов БД |
|
ТУЗ с внешней аутентификацией для подключения через АС PAM администраторов систем с привилегиями только на чтение |
Рекомендации по работе с УЗ для администраторов:
ежедневные задачи администрирования силами администраторов «вручную» должны осуществляться только под персонализированными УЗ;
права доступа для каждой УЗ/ТУЗ должны быть минимизированы, исходя из использования;
в руководство должно включаться рекомендуемое минимальное типовое конфигурирование ролевой модели (РМ);
при развертывании нового экземпляра Pangolin, минимальная рекомендуемая типовая РМ должна конфигурироваться автоматически.
Связь ролей с объектами БД#
При настройке ролевой модели создаются стандартные объекты БД 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права заранее предоставляются на объекты, которые будут создаваться в будущем в данной схеме.
Ролевая модель ФСТЭК#
Решение представляет собой набор параметризованных скриптов в формате SQL для автоматизированной настройки ролевой модели ФСТЭК.
Примечание:
Принятые сокращения:
admin_dbms— пользователь роли Администратор СУБД;
admin_db— пользователь роли Администратор БД;
user_db— пользователь роли Пользователь БД;
database_name— база данных, для которой применяется Ролевая модель ФСТЭК;
<ip_cidr>— диапазон IP-адресов для подключения к базе данных в формате CIDR;
<auth_method>— принятый метод аутентификации пользователя, исключая методыtrust,local,peer.
Скрипты для настройки разделены по ролям Администратора СУБД, Администратора БД, Пользователя БД:
addrole_admin_dbms.sql— проверка и создание роли Администратора СУБД;addrole_admin_db.sql— проверка и создание роли Администратора БД;addrole_user_db.sql— проверка и создание роли Пользователя БД.
Скрипты хранятся в папке /usr/pangolin-<Версия Pangolin>/share/.
Установка ролевой модели#
Порядок установки:
Измените правила в файле
pg_hba.conf:pg_hba.conf [hostssl|hostgss] postgres admin_dbms <ip_cidr> <auth_method> [hostssl|hostgss] database_name admin_db <ip_cidr> <auth_method> [hostssl|hostgss] replication admin_db <ip_cidr> <auth_method> [hostssl|hostgss] database_name user_db <ip_cidr> <auth_method> host all admin_dbms 0.0.0.0/0 reject host all admin_db 0.0.0.0/0 reject host all user_db 0.0.0.0/0 reject local all admin_dbms 0.0.0.0/0 reject local all admin_db 0.0.0.0/0 reject local all user_db 0.0.0.0/0 rejectВ случае использования нескольких учетных записей для каждой роли - учетные записи указываются через запятую для каждой БД.
В случае использования нескольких БД - желательно группировать записи в
pg_hba.confв разрезе ролей и баз данных. Допустимо указывать роли через запятую для каждой из БД.Примените изменения в конфигурационном файле
pg_hba.confс помощью команды:psql -Xc 'SELECT pg_reload_conf()'Убедитесь в соответствии конфигурационных параметров
lc_ctype,lc_collateожидаемой локали создаваемой БД (вpostgresql.conf). В случае изменения параметров — перезапустите сервис СУБД.Запустите скрипты создания ролей от имени пользователя
postgresоперационной системы в следующем порядке:Создайте пользователя роли Администратор СУБД (пример выполнения команды):
$ psql -Xf addrole_admin_dbms.sql Connected to {{product_name}} {version} build 216 (12:05:55 19.02.2024) commit {хеш} (PostgreSQL 15.5) -- This script is a part of FSTEC Role Model -- [1/3] This script intended TO ADD RDBMS OWNER ROLE AND must be running FIRST Enter RDBMS OWNER role name:admin_dbms Enter DATABASE name:database_name -- Starting adding database owner at Thu Apr 4 14:49:38 MSK 2024 SET Time: 0.954 ms SET Time: 0.529 ms DO Time: 4.498 ms Adding user admin_dbms psql:addrole_admin_dbms.sql:75: NOTICE: Success: User admin_dbms added. Do not forget to set password DO Time: 5.553 ms Ending adding database owner at Thu Apr 4 14:49:38 MSK 2024Создайте пользователя роли Администратор БД (пример выполнения команды):
$ psql -Xf addrole_admin_db.sql Connected to {{product_name}} {version} build 216 (12:05:55 19.02.2024) commit {хеш} (PostgreSQL 15.5) -- This script is a part of FSTEC Role Model -- [2/3] This script intended to add DB ADMIN role and must be running AFTER addrole_admin_dbms.sql Enter DB ADMIN role name: admin_db Enter DATABASE name: database_name -- Starting adding database admin at Thu Apr 4 14:50:39 MSK 2024 SET Time: 0.897 ms SET Time: 0.531 ms psql:addrole_admin_db.sql:76: WARNING: # $PGDATA/pg_hba.conf must contain [hostssl|hostgssenc] database_name admin_db <ip>/<mask> <auth_method> DO Time: 4.918 ms Adding user admin_db psql:addrole_admin_db.sql:93: NOTICE: Success: User admin_db added. Do not forget to set password DO Time: 5.273 ms CREATE DATABASE Time: 76.350 ms Time: 1.428 ms -- Ending adding database admin at Thu Apr 4 14:50:39 MSK 2024Создание пользователя роли Пользователя БД (пример выполнения команды)
$ psql -Xf addrole_user_db.sql Connected to {{product_name}} {version} build 216 (12:05:55 19.02.2024) commit {хеш} (PostgreSQL 15.5) -- This script is a part of FSTEC Role Model -- [3/3] This script intended to add DB USER role and must be running AFTER addrole_admin_db.sql Enter DB USER role name: user_db Enter DATABASE name: database_name -- Starting adding database user at Thu Apr 4 14:53:05 MSK 2024 SET Time: 0.918 ms SET Time: 0.530 ms psql:addrole_user_db.sql:66: WARNING: # $PGDATA/pg_hba.conf must contain [hostssl|hostgssenc] database_name user_db <ip>/<mask> <auth_method> DO Time: 5.107 ms Adding user user_db psql:addrole_user_db.sql:83: NOTICE: Success: User user_db added. Do not forget to set password DO Time: 5.401 ms Time: 0.520 ms SET Time: 0.462 ms GRANT ROLE Time: 2.791 ms SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, compression: off) You are now connected to database "database_name" as user "postgres". SET Time: 0.910 ms ALTER ROLE Time: 4.032 ms GRANT Time: 3.367 ms GRANT Time: 3.881 ms GRANT Time: 0.973 ms ALTER DEFAULT PRIVILEGES Time: 3.418 ms ALTER DEFAULT PRIVILEGES Time: 2.869 ms ALTER DEFAULT PRIVILEGES Time: 2.739 ms ALTER DEFAULT PRIVILEGES Time: 2.836 ms ALTER DEFAULT PRIVILEGES Time: 2.809 ms RESET Time: 0.313 ms SET Time: 0.479 ms SET Time: 0.414 ms SET Time: 0.420 ms psql:addrole_user_db.sql:121: NOTICE: Fixing permissions on trusted languages psql:addrole_user_db.sql:121: NOTICE: End fixing permissions on trusted languages DO Time: 6.045 ms -- Ending adding database user at Thu Apr 4 14:53:05 MSK 2024
При добавлении нескольких пользователей ролей — добавление последующих ролей производится после добавления полного цикла из трех ролей Администратора СУБД, Администратора БД, Пользователя БД.
При этом, Администратор БД не может быть добавлен раньше Администратора СУБД, Пользователь БД раньше Администратора БД (в разрезе конкретной БД).
Внимание!
Ограничения:
соответствие имен роли и БД маске: первая буква – латиница (смешанный регистр), вторая и последующие – латиница (смешанный регистр), цифры, символ подчеркивания. Минимальная длина — 1 символ;
наличие существующего пользователя не является ошибкой. Этому пользователю будут выданы права, предусмотренные скриптом.
отсутствие БД при создании роли Пользователь БД будет считаться ошибкой.
В случае выбора метода аутентификации по паролю — задайте пароль для каждой добавленной роли.