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

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

Директория, содержащая yml-скрипты для развертывания ролевой модели

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 права заранее предоставляются на объекты, которые будут создаваться в будущем в данной схеме.