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