Стремительная замена информационных систем с применением западных СУБД, накопивших огромные массивы данных, потребовала от отечественных разработчиков развития адекватных инструментов поддержки всех этапов жизненного цикла данных. Разнообразным бизнес-приложениям сегодня требуется надежное хранилище: производительное, масштабируемое, отказоустойчивое и предоставляющее встроенные средства защиты. Традиционно такие хранилища строятся на базе специализированных СУБД с закрытым кодом, однако и на основе решений от сообщества Open Source можно создать системы, позволяющие при соответствующей доработке и поддержке удовлетворить требования отечественных организаций, решающих различные задачи на уровне корпораций и государства.

Обеспечение непрерывности бизнеса

Среди типичных задач, стоящих перед отечественными заказчиками СУБД, можно назвать миграцию данных из унаследованного репозитория на основе зарубежной СУБД, обеспечение масштабирования, отказоустойчивости и конвергентности — поддержки мультимодельного подхода к работе с данными, позволяющего в одном приложении оперировать разными типами данных (таблицами, документами, геоинформацией и др.), а также нагрузками (OLTP, OLAP, машинное обучение).

Миграция с сохранением бизнес-логики, интегрированной, например, в СУБД Oracle, требует наличия аналогов объектов и утилит автоматического преобразования кода команд и переноса данных. В СУБД Postgres Pro Enterprise для этого имеется продукт ProGate с утилитами Prosync/Procopy, ProCheck и ProValidate, обеспечивающими массовую загрузку и проверку целостности данных. В ходе этих процессов данные построчно сравниваются, проверяются их типы, количество строк, а также выполняются и сравниваются результаты выборочных SQL-запросов в источнике и целевой базе.

Предусмотрены также преобразования реляционного формата хранения данных в Parquet для ускорения аналитических операций внутри конвергентной СУБД. Различные типы данных поддерживаются и в ванильной версии PostgreSQL, однако их хранение в Parquet-файлах (локально или в S3) и быстрое выполнение над ними аналитических запросов имеется лишь в Postgres Pro.

С помощью ProValidate можно провести дополнительные проверки мигрированных данных на соответствие стандартам PostgreSQL, включая корректность вывода в различных форматах, проверку контрольных сумм, валидности индексов, а также настроек, установленных по умолчанию, привилегий, ограничений СУБД и пр.

К сожалению, ограничения ванильной версии PostgreSQL (возможность репликации только кластера целиком, а не отдельной базы данных или таблицы; отсутствие возможности фильтрации журнальных записей; невозможность реплики генерировать собственные журнальные записи — она лишь применяет записи мастера, а значит, реплика может быть доступна только для чтения и недопустимы операции, изменяющие данные; на реплике не поддерживается уровень изоляции (serializable) — только read committed и repeatable read; триггеры на реплике не срабатывают — они выполнились на мастере, а реплицируется уже результат их работы) пока не позволили создать полный аналог Oracle Real Application Cluster. Однако в Postgres Pro реализовано несколько технологий, обеспечивающих как масштабирование читающей нагрузки (Multimaster), так и различных вариантов секционирования, включая многоузловое. Лидером в этой области можно назвать кластер Shardman, предоставляющий строгие гарантии целостности данных для распределенной реляционной СУБД.

Отказоустойчивость для СУБД на основе PostgreSQL, как правило, реализуется с помощью решений сторонних независимых разработчиков (Patroni, Stolon и др.), но в Postgress Pro имеется и своя технология BiHA, обеспечивающая физическую репликацию данных с автоматическим аварийным переключением локальных узлов без использования внешних компонентов. Как правило, пользователи дополняют кластер на основе BiHA расширением Proxima, объединяющим функциональность прокси-сервера и пула соединений.

Также необходимо упомянуть утилиту резервного копирования pg_prоbackup, предоставляющую пользователям такие дополнительные функции, как многопоточность, сжатие данных и поддержка интерфейса S3.

Все эти средства обеспечивают сохранность данных и устойчивость процессов их массовой обработки.

Обеспечение безопасности

В отношении работы с некоторыми видами данных в России действуют законодательные требования по их защите средствами СУБД, что, как правило, требует доработок исходных кодов Open Source. Помимо этого часто владельцы конфиденциальной информации обращаются к разработчикам с просьбами о внедрении дополнительных механизмов обеспечения информационной безопасности, которые невозможно реализовать путем настройки СУБД.

Среди инструментов, обеспечивающих в СУБД Postgress Pro требуемый нормативными актами уровень информационной безопасности, можно выделить: разграничение прав администраторов; ограничение доступа к данным привилегированных пользователей; анализ избыточных привилегий; сбор событий безопасности; разведка конфиденциальной информации в СУБД; маскирование данных и их защита в состоянии покоя; контроль целостности и очистка памяти.

Разграничение прав администраторов

Главная проблема любой СУБД — бесконтрольность суперпользователя, действия которого обычно сложно отследить, однако компрометация его учетной записи обычно становится фатальной для хранилища данных. В СУБД Postgres Pro эта проблема решается путем разделения обязанностей суперпользователя между несколькими административными ролями: администратор СУБД управляет сервером, настройками, репликацией и резервным копированием; администратор базы данных управляет объектами внутри конкретной базы данных (создает таблицы, пользователей и выдает им права). Таким образом учетная запись суперпользователя освобождается от повседневных операций, а в целях безопасности ей можно вообще запретить бесконтрольное подключение к базе.

Ограничение доступа к данным привилегированных пользователей

Наиболее конфиденциальные данные можно поместить в зону повышенной безопасности на уровне схемы (vault), владелец которой может управлять объектами (например, создавать таблицы), но не выдавать права, а специалист по безопасности может только выдавать бизнес-пользователям права на доступ в схему, но сам не имеет доступа к ее объектам. При таком подходе ни администратор СУБД, ни администраторы базы не могут самостоятельно обратиться к защищенным данным. Это существенно повышает уровень безопасности.

Анализ избыточных привилегий

Часто сотрудники обладают правами, которые для их работы не нужны. Встроенное расширение pgpro_usage помогает отслеживать, какие привилегии реально используются, а какие — нет. Это дает возможность проводить аудит базы и тонко настраивать модель доступа, оставив пользователям лишь минимально необходимые им права, что значительно снижает поверхность возможной атаки.

Сбор событий безопасности

Модуль pg_proaudit обеспечивает механизм фильтрации событий информационной безопасности. Правила для аудита определяются комбинацией параметров: имя базы данных, тип события (можно указать как конкретные команды, так и классы событий), тип объекта, имя объекта, имя роли (можно указать как конкретного пользователя, так и групповую роль). Таким образом выполняется сбор истории изменений структуры базы и самих данных, выполненных конкретным пользователем, и пополняется доказательная база неотказуемости его действий. Модуль работает независимо от стандартных журналов СУБД и в режиме параллельной обработки фиксирует все значимые действия. Журнал аудита можно передавать напрямую в SIEM-системы, например, в формате CEF (Common Event Format) или через syslog для централизованного мониторинга и оперативного реагирования на инциденты. При этом чувствительная информация в логах может быть автоматически замаскирована.

Разведка конфиденциальной информации

Для защиты данных нужно знать их расположение — утилита pgpro_scout предназначена для поиска конфиденциальной информации по словарям с набором шаблонов из регулярных выражений, содержащих признаки чувствительных данных, например, типичные окончания фамилий, порядок и число символов в email-адресах и номерах телефонов, и т. п. Запустив сканирование с ограничениями, администратор по информационной безопасности получает отчет с примерами найденных данных, в которых может отметить ложно-положительные срабатывания и предложить инструменты защиты чувствительной информации, например, ее маскирование или преобразование в состоянии покоя (Transparent Data Encoding, TDE). После завершения работы администратор сможет безопасно удалить временные образцы данных из отчета, обеспечивая максимальный уровень конфиденциальности самого процесса поиска. В ближайшем будущем это решение будет интегрировано в Postgres Pro Enterprise Manager (PPEM), где вместе с другими модулями администратору будет предоставлен графический интерфейс для управления инструментами безопасности СУБД.

Маскирование данных и их защита в состоянии покоя

Разработчикам, тестировщикам и бизнес-аналитикам для свой работы часто нужны данные, максимально приближенные к реальным; но весьма рискованно передавать им реальную клиентскую базу. Расширение pgpro_anonymizer позволяет создавать копии баз данных, в которых конфиденциальная информация (ФИО, телефоны, адреса и пр.) заменяется на правдоподобные, но вымышленные данные. Правила маскирования настраиваются декларативно с учетом формата данных в защищаемых колонках с помощью поставляемых или пользовательских алгоритмов. Кроме того, инструмент поддерживает динамическую маскировку, которая замещает или скрывает данные «на лету», если их запрашивают пользователи, не имеющие прав доступа к оригиналу.

Технология защитного преобразования файлов базы данных в состоянии покоя (TDE) на уровне страниц применяется в отношении файлов таблиц, индексов, последовательностей, журналов предзаписи (WAL, Write-Ahead Logging) и временных файлов при их отправке на диск или в систему резервного копирования. Для минимизации влияния на производительность СУБД Postgres Pro преобразовывает лишь конфиденциальные данные, перемещенные в специальное табличное пространство. Процесс прямого и обратного защитного преобразования происходит на лету и прозрачен для пользователей, приложений и утилит СУБД.

Модульная архитектура позволяет подключать различные алгоритмы для преобразований, однако текущая версия Postgres Pro Enterprise пока работает только с библиотекой OpenSSL, поставляемой в том числе с сертифицированными ОС. OpenSSL использует специальные расширения к командам векторизации, например AVX-512 для режима шифрования GCM (Galois/Counter Mode), что позволяет повысить производительность преобразований при выполнении на современных процессорах. Преобразование файлов данных происходит с помощью алгоритма симметричного ключа AES-256-GCM, что обеспечивает подлинность, целостность и конфиденциальность данных. В перспективе к pgpro_tde будут подключены библиотеки отечественных производителей СКЗИ, что позволит использовать алгоритмы, соответствующие ГОСТам. При этом конечным пользователям надо будет компенсировать дополнительные нагрузки на СУБД, так как, к сожалению, преобразования с использованием соответствующих алгоритмов аппаратно не поддерживаются и поэтому редко используются при обработке больших массивов данных.

После считывания ключей для преобразования из защищенного файла СУБД хранит эти ключи в своей памяти, прозрачно использует их и генерирует новые ключи табличного пространства по команде ротации. Поддерживается режим обмена ключами между экземплярами в многоузловых конфигурациях. С помощью защитного преобразования данных на диске маскирование данных предотвращает несанкционированное чтение данных — неавторизованные пользователи не смогут извлечь информацию, даже если у них есть доступ к архивам резервных копий, доступ к системе резервного копирования в момент записи или имеются права на чтение файлов с сервера СУБД.

Контроль целостности и очистка памяти

В сертифицированные по требованию ФСТЭК редакции СУБД Postgres Pro входит утилита pg_integrity_check, позволяющая по расписанию или при запуске сервера проверять контрольные суммы исполняемых и конфигурационных файлов и других данных в системных каталогах. В случае обнаружения несанкционированных изменений доступ пользователей к базе блокируется.

Данные из СУБД могут оставаться в оперативной памяти или на диске даже после выполнения команды на их удаление. Сертифицированные версии Postgres Pro включают функциональность полной очистки памяти: при удалении строк, таблиц или временных файлов занимаемое ими пространство заполняется нулями. Это гарантирует, что удаленную информацию восстановить невозможно.

***

Помимо основной задачи по организации безопасной обработки и хранения информации владельцы данных решают еще много задач. Инструменты, встроенные в СУБД Postgres Pro Enterprise, позволяют распределять обязанности между подразделениями ИТ и службами безопасности; вести единые инфраструктурные политики (например, управление паролями); балансировать процессы внесения инфраструктурных изменений; поддерживать единую систему обработки событий информационной безопасности и минимизацию рисков; помогать расследовать и предотвращать инциденты; обеспечивать соответствие требованиям ФСТЭК и другим регуляторным требованиям.

Таким образом, сертифицированная по требованиям ФСТЭК СУБД Postgres Pro Enterprise, в работе над которой задействовано множество контрибьюторов Open Source PostgreSQL, может применяться в составе критичных информационных инфраструктур, а ее поставщик, имеющий сертификат ФСТЭК «РБПО» (Разработчик Безопасного Программного Обеспечения), — обеспечить ее качественную поддержку и развитие.

Андрей Гусаков (a.gusakov@postgrespro.ru) — старший технический консультант, Postgres Professional (Москва).