Перейти к основному содержимому

Ролевая модель и права доступа

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

Имя скриптаНазначение
run_configure.shОсновной скрипт, выполняющий конфигурирование ролевой модели
password_space_settings.shСкрипт, выполняющий конфигурирование хранилища паролей для пользователей profile_tuz и backup_user

Параметры скрипта run_configure.sh:

Имя параметраНазначение
database_nameИмя пользовательской базы данных
tablespace_nameИмя пользовательского табличного пространства
tablespace_locationИмя директории, содержащей табличное пространство
schema_nameИмя пользовательской схемы
pg_portПорт в настройках pg_profile
fqdn_masterИмя хоста мастера в настройках pg_profile
fqdn_replicaИмя хоста реплики в настройках pg_profile
stats_periodsПериод запуска задания cron в настройках pg_profile
expire_dateСрок действия пароля конечных пользователей
user_for_backupИмя пользователя резервного копирования для использования в manage_backup.sh
as_admsСписок конечных пользователей, создаваемых в группе as_admin
as_tuzsСписок конечных пользователей, создаваемых в группе as_TUZ
temp_passФлаг, указывающий на задание временных паролей
tde_admin_protectionФлаг включения TDE
path_to_scriptsПуть, по которому размещается данный скрипт (требуется только при запуске с помощью ansible)
psql_pathПуть, по которому размещается запускаемый модуль psql
password_listСловарь паролей ТУЗов. В случае задания пароля в виде SCRAM-SHA-256 - хеш должен быть предварительно вычислен
feature_listСловарь для задания списка функций, которые необходимо включить
localeЗначение locale с которой будет создана пользовательская БД
prdbnameИмя пользовательской БД в которой будет установлен 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-скрипты:

Имя скриптаНазначение
create_db_and_ts.sqlВыполняет создание пользовательского табличного пространства и базы данных. В качестве шаблона при создании базы данных берется стандартная системная база template1
create_end_as_admin_user.sqlВыполняет создание конечных пользователей группы as_admin
create_end_as_TUZ_user.sqlВыполняет создание конечных пользователей группы as_TUZ
create_roles.sqlВыполняет создание групповых ролей и служебных пользователей
create_user_schema.sqlВыполняет создание пользовательской схемы
functions.sqlВыполняет настройку прав доступа пользовательским функциям
get_role_passwd.sqlВыполняет настройку функции get_role_passwd
grants_common_db.sqlВыполняет общие для всех баз данных настройки привилегий
grants_only_postgres_db.sqlВыполняет настройки привилегий в базе данных PostgreSQL
grants_only_user_db.sqlВыполняет настройки привилегий в пользовательской базе данных
revoke_public_template0.sqlВыполняет настройки привилегий роли public в базе данных template0.sql
setting_pp_for_users.sqlВыполняет настройки парольных политик
create_1c_extentions.sqlВыполняет установку расширений, используемых в 1C
create_common_extensions.sqlВыполняет настройки расширений, общие для всех баз данных
create_ext_only_postgres_db.sqlВыполняет настройки расширений в базе данных PostgreSQL
create_pg_hint_plan.sqlВыполняет настройку расширения pg_hint_plan
create_pg_outline.sqlВыполняет настройку расширения pg_outline
create_pg_stat_kcache.sqlВыполняет настройку расширения pg_stat_kcache
create_psql_rotate_password.sqlВыполняет настройку расширения psql_rotate_password
create_schema_for_extensions.sqlВыполняет настройку схемы 'ext'
create_pg_profile_ext.sqlВыполняет настройку расширения pg_profile
users_db_grants_profile_tuz.sqlВыполняет настройку прав доступа для расширения pg_profile
change_owner_for_profile_tables.sqlВыполняет настройку владельца функций расширения pg_profile
common_grants_profile_tuz.sqlВыполняет настройку общих прав доступа для расширения pg_profile
pg_audit_settings.sqlВыполняет настройку pgaudit.log для пользователей из ролевой модели

Ansible-скрипты

Для упрощения развертывания ролевой модели была реализована ansible-роль configure_roles, которая выполняет настройку ролевой модели, пользовательской БД и расширений автоматически. Выполнение данной роли предполагается после выполнения развертывания Pangolin с использованием playbook_configure_roles.yaml. В данном случае будет выполнена настройка ролевой модели, пользовательской БД и расширений после чистой установки Pangolin. Данная роль располагается в дистрибутиве по пути installer/scripts_external/configure_roles.

Роль configure_roles полностью автономна, может быть запущена вне компонента installer и имеет следующую структуру:

Файл/директорияНазначение
playbook_configure_roles.yamlОсновной ansible-скрипт, выполняющий развертывание ролевой модели
filter_pluginsДиректория, содержащая фильтры для использования внутри роли configure_roles
templatesДиректория, содержащая запускаемые SQL-скрипты (раздел «SQL-скрипты» данного руководства) для развертывания ролевой модели, пользовательской БД и расширений
tasksДиректория, содержащая yaml-скрипты для развертывания ролевой модели
group_varsДиректория, содержащая переменные, используемые ролью для развертывания ролевой модели
libraryДиректория, содержащая бинарный файл генератора паролей password_generator

Структура файлов с переменными имеет следующий вид:

ФайлНазначение
all.ymlФайл с общими параметрами для роли configure_roles
message.ymlФайл с сообщениями, которые используются в процессе выполнения роли configure_roles
variables.ymlФайл с переменными, используемыми для корректировки настраиваемой ролевой модели

Ansible-роль configure_roles используется при инсталляции для настройки ролевой модели.

Структура ролей

В рамках структуры ролей рассматриваются следующие типы:

  • административные, использующиеся для системного управления кластером и прикладного администрирования данных;
  • прикладные, предназначенные для пользователей, отвечающих за наполнение БД данными;
  • специальные, создающиеся для соответствия принятым в организации подходам к аудиту, мониторингу, резервному копированию, восстановлению и др.

При настройке ролевой модели создаются следующие групповые роли:

Групповая рольНазначение
db_adminАдминистративная роль, обладающая привилегией superuser. Владелец TABLESPACE, DATABASE. Выдается администраторам для управления СУБД
as_adminАдминистративная роль — владелец схемы. Выдается администраторам АС. Используется для создания новых объектов в БД (таблиц, функций, последовательностей и т.п) и их изменения. Является владельцем пользовательской схемы. Также выдается доменным или локальным ТУЗ для инструментов автоматизации
as_TUZПрикладная роль для доступа к пользовательским данным. Имеет привилегии для совершения DML-операций с объектами схемы. Работает в пуле соединений с БД, а также подключается через pgBouncer
as_admin_readАдминистративная роль, отличающаяся от as_admin тем, что предназначена только для просмотра ч
all-sa-pam-groupВыдается учетным записям, используемым для доступа через PAM (privileged access management). Используется исключительно для организации аутентификации, конфигурирования pg_hba.conf

Дополнительно создаются следующие специальные инфраструктурные ТУЗ:

Инфраструктурная рольНазначение
backup_userТУЗ с локальной аутентификации для интеграции с СРК
zabbix_oasubdТУЗ с локальной аутентификацией для интеграции с системой мониторинга
auditorТУЗ с локальной аутентификацией для проведения аудита безопасности
pgbouncerТУЗ с локальной аутентификацией для подключения локальной службы PgBouncer
patroniТУЗ с локальной аутентификацией для подключения локальной службы Patroni
all-sa-pam19002ТУЗ с внешней аутентификацией для подключения через АС PAM администраторов БД
all-sa-pam19002_roТУЗ с внешней аутентификацией для подключения через АС 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, то для обеспечения данного условия используются следующие механизмы:

  1. При создании объектов администратор, выполняющий данную задачу, должен выдавать команду SET ROLE as_admin. Для автоматизации некоторых задач, а также в случае, когда другие роли данной УЗ не используются, можно один раз настроить УЗ для работы в роли as_admin, выдав ALTER ROLE <rolename> SET ROLE as_admin. В дальнейшем данная УЗ всегда будет работать как as_admin.

  2. Владельцем объектов может быть только групповая роль, поэтому в УЗ администраторов, имеющих права на создание объектов отключена опция INHERIT. Для конечных пользователей БД (ТУЗ) отключать INHERIT не требуется — они не имеют привилегий на создание объектов, но зато автоматически наследуют все другие необходимые привилегии.

    Роль as_admin, которая имеет привилегию на создание объектов, нельзя унаследовать (она имеет свойство NOINHERIT). Это связано с тем, что на момент инсталляции неизвестно, какие пользователи будут работать с БД в дальнейшем и какие привилегии им будут назначены. Групповые роли позволяют систематизировать пользовательскую структуру. А для того, чтобы владельцем объекта становилась именно роль as_admin, необходимо явно переключаться на нее с помощью запроса: SET ROLE as_admin.

  3. После создания объекта роль as_admin предоставляет необходимую привилегию роли, использующей объект (это в первую очередь as_TUZ). Данный процесс можно облегчить, если назначить default privileges создающей роли (as_admin). С помощью default privileges права заранее предоставляются на объекты, которые будут создаваться в будущем в данной схеме.