secret_dump. Создание защищенного дампа
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты:
pg_dump.Схема размещения:
pg_catalog.
Расширение входит в состав решения для формирования защищенного дампа и необходимо для его создания. Данное расширение может работать только с включенной функциональностью защиты данных от привилегированных пользователей (admin protection или AP).
Перед установкой расширения необходимо ознакомиться с разделом «Ограничения» текущего документа.
Для маскирования аргументов функции установки и получения ключей для создания защищенного дампа необходимо добавить в конфигурационный файл СУБД параметр session_preload_libraries = secret_dump.
Доработка
Формирование дампа происходит в соответствии с оригинальным поведением утилиты pg_dump, за исключением режимов работы:
--compress/-Z- отсутствует сжатие;--format/F- поддерживается только текстовый формат (sql);--inserts- нельзя выгружать данные в форматеinsert, поддерживается толькоCOPY.--cleanкомандыDROPдля удаления существующих объектов базы данных не генерируются при формировании защищенного дампа. Если указаны оба ключа-cи-Содновременно, командаDROP DATABASEне буден создана.
Сформированный дамп отличается от оригинального функциями:
-- функция с GUID и засекреченным ключом, которые будут необходимы при применении дампа:
SELECT pg_catalog.sd_load_secret_dump(<GUID>, <TimeStamp>, <EncodingCRC>, <EncodingKeyDump>);
-- функция с sql-запросом, защищенным от изменения засекреченной контрольной суммой:
SELECT pg_catalog.sd_protection_action(<EncodingCRC>, query body);
-- функция для работы с политиками:
SELECT pg_catalog.sd_protection_policies(<EncodingCRC>, query policy);
-- функция завершения применения защищенного дампа:
SELECT pg_catalog.sd_end_secret_dump();
После формирования дампа этим же GUID-ом больше нельзя снять дамп второй раз.
Подробное описание этих функций, а также других объектов расширения приведено в подразделе «Управление» данного документа.
Изначально все ошибки, которые возникали при загрузке закодированных данных из защищенного дампа, заменялись сообщением syntax error in the COPY operation. Данное сообщение неинформативно и затрудняет диагностику ошибок. Теперь все сообщения об ошибках, которые возникаю при операции COPY FROM, передаются в исходном виде, без раскрытия данных (данные будут заменены на ***).
Для исключения ситуации подмены закодированных данных между таблицами/партициями с одинаковыми типами колонок добавлена проверка CRC-имени схемы и имени таблицы/партиции в блоках кодирования данных.
При установке СУБД Pangolin с помощью Ansible-скриптов в конфигурационный файл custom_config_initial.yml добавлен новый параметр secret_dump_is_enable со значением по умолчанию true, для того, чтобы параметр session_preload_libraries = secret_dump был добавлен в конфигурационный файл продукта автоматически.
В файл со статическими параметрами (при использовании KMS-заменителя) добавлен ключ secret_dump_key для расширения secret_dump. Дополнительная информация приведена в разделе «Статические параметры».
Ограничения
Требования, которые необходимо учитывать при работе с расширением:
-
Нельзя добавлять расширение в
shared_preload_libraries. -
Расширение возможно установить только на БД, с включенным механизмом защиты данных.
-
Для загрузки защищенного дампа с присутствующими в нем RBAC-правами на роли, которые в целевой БД являются защищенными, необходимо добавить разрешения в политики защиты данных на выдачу RBAC-прав для ролей, указанных в дампе пользователю, который будет загружать дамп, в противном случае будет получена ошибка:
ERROR: Granting to the role is forbidden
Установка
Расширение должно быть установлено в БД, на которой будет формироваться дамп:
CREATE EXTENSION secret_dump;
Настройка
Для настройки максимального количества выделяемой памяти в конфигурационный файл postgresql.conf добавлен параметр secret_dump.max_memory_allocate. Значение указывается в Мбайтах. По умолчанию размер установлен в 1 Гбайт. Минимальный 1 Мбайт, максимальный 1 Тбайт.
К дополнительным объектам расширения можно отнести:
-
secret_dump_schema- схема для таблицыpg_secret_backup_keys; -
secret_dump_schema.pg_secret_backup_keys(guid text not null, key text not null, crc32 integer not null,key_used bool not null)- таблица для связокGUID+KEY. Поля таблицы:guid- идентификатор GUID, соответствующий ключу засекречивания;key- ключ засекречивания в закодированном виде;use_dump- флаг использования ключа для снятия дампа;check_crc- контрольная сумма строки с рассекреченным ключом, для проверки целостности данных.
Управление
Пользователь не должен обращаться к функциям формирования дампа, так как это может привести к некорректной работе БД. В данном разделе рассматриваются функции загрузки дампа и функции работы с ключами засекречивания, с которыми может столкнуться пользователь.
Функции загрузки дампа
sd_load_secret_dump()
Синтаксис:
void pg_catalog.sd_load_secret_dump(<GUID>, <TimeStamp>, <EncryptedCRC>, <EncryptedKey>)
Описание:
Функция установки ключа в оперативную память для последующей загрузки защищенных объектов дампа в базу. Ключ либо берется из поля <EncryptedKey>, рассекреченным ключом кодирования ключей (при совпадении его контрольной суммы с полем <EncryptedCRC>), либо из таблицы secret_dump_schema.pg_secret_backup_keys, в соответствии с GUID. Данная функция формируется в шифрованном дампе только при наличии хотя бы одного защищенного объекта в нем, если защищенных объектов нет - эта функция отсутствует в сформированном дампе.
sd_protection_action()
Синтаксис:
pg_catalog.sd_protection_action(<EncryptedCRC>, <query>)
Описание:
Функция применения запроса <query> к БД с предварительной проверкой совпадения его контрольной суммы с <EncryptedCRC>. Также в этом запросе возможна постановка под защиту объекта БД и постановка защиты объекта на паузу. Постановка защиты на паузу возможна для всех пользователей. Если в базе данных защита объектов была установлена на паузу для конкретных пользователей, то при формировании защищенного дампа постановка защиты на паузу производиться не будет.
sd_protection_policies()
Синтаксис:
pg_catalog.sd_protection_policies(<EncryptedCRC>, <query>)
Описание:
Функция применения запроса <query> с заданием необходимых политик и назначение прав доступа политик к защищенным объектам. Перед выполнением запроса происходит проверка совпадения его контрольной суммы с <EncryptedCRC>.
sd_end_secret_dump()
Синтаксис:
pg_catalog.sd_end_secret_dump()
Описание:
Функция завершения загрузки защищенного дампа. Данная функция формируется в шифрованном дампе только при наличии хотя бы одного защищенного объекта в нем, если защищенных объектов нет - эта функция отсутствует в сформированном дампе.
Функции работы с ключами засекречивания
sd_generate_guid_key_dump()
Синтаксис:
pg_catalog.sd_generate_guid_key_dump()
Описание:
Функция создания связки GUID+KEY. Возвращает значение сформированного GUID в формате base64. Доступна всем пользователям.
sd_set_guid_key_dump()
Синтаксис:
pg_catalog.sd_set_guid_key_dump(<GUID>, <KEY>)
Описание:
Функция загрузки связки GUID+KEY. В случае успешной загрузки возвращает true, иначе – false. Связка GUID+KEY после загрузки не может использоваться для формирования дампа. Функция доступна администратору безопасности.
sd_get_list_guids_dump()
Синтаксис:
pg_catalog.sd_get_list_guids_dump()
Описание:
Функция вывода таблицы secret_dump_schema.pg_secret_backup_keys, содержащей поля:
guid– идентификаторGUID, соответствующий ключу засекречивания;key– ключ засекречивания в засекреченном виде;use_dump– флаг использования ключа для снятия дампа;check_crc– контрольная сумма строки с рассекреченным ключом для проверки целостности данных.
Функция доступна администратору безопасности.
sd_get_guid_dump()
Синтаксис:
pg_catalog.sd_get_guid_dump(<GUID>)
Описание:
Функция получения ключа по GUID. Функция доступна администратору безопасности.
sd_is_valid_guid_dump()
Синтаксис:
pg_catalog.sd_is_valid_guid_dump(<GUID>)
Описание:
Функция проверки флага использования связки GUID+KEY для снятия дампа и проверки целостности информации о ключе. Функция доступна всем пользователям.
sd_drop_guid_dump()
Синтаксис:
pg_catalog.sd_drop_guid_dump(<GUID>)
Описание:
Функция удаления связки GUID+KEY из таблицы secret_dump_schema.pg_secret_backup_keys. Функция доступна администратору безопасности.
sd_put_protect_function()
Синтаксис:
pg_catalog.sd_put_protect_function()
Описание:
Функция постановки функций pg_catalog.sd_set_guid_key_dump, pg_catalog.sd_get_list_guids_dump, pg_catalog.sd_get_guid_dump, pg_catalog.sd_drop_guid_dump под защиту и создания политики sd_policy_dump. Это означает, что на данную политику будут выдано разрешение вызовов перечисленных функций с назначением политики на sec_admin_role.
Использование модуля/руководство по использованию
Использование модуля подробно описано в разделе «Выгрузка данных в дамп при включенных СЗИ» документа «Руководство администратора».
Ссылки на документацию разработчика
Дополнительно поставляемый модуль pg_dump.