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

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-имени схемы и имени таблицы/партиции в блоках кодирования данных.

В конфигурационный файл config.yml добавлен новый параметр secret_dump_is_enable со значением по умолчанию true, который доступен на этапе автоматизированной настройки СЗИ, для установки в параметр session_preload_libraries библиотеки secret_dump.

В KMS заменитель добавлен параметр secret_dump_key для расширения secret_dump. Перед запуском БД необходимо в файл /etc/pangolin-security-utilities/kms_static_params.cfg установить параметр secret_dump_key = <key_for_secret_dump>, где key_for_secret_dump формируется утилитой generate_encryption_key. Без этого параметра СУБД Pangolin не запустится.

Ограничения

Требования, которые необходимо учитывать при работе с расширением:

  • Нельзя добавлять расширение в 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.