1C:SRE-Suite: автоматизируем маскирование данных через pg_anon в CI/CD без промежуточных копий
Потоковое обезличивание (On-The-Fly) на PostgreSQL, декларативные правила pg-anon-1c.yml, защита PII и регламентный ночной пайплайн в GitHub Actions без сохранения промежуточных дампов на диске.
Часть 3 практического руководства: от боевого терабайтного кластера до безопасного dev-дампа без угрозы компрометации персональных данных
В первых двух частях нашей серии публикаций мы подробно разобрали построение отказоустойчивой инфраструктуры, создание пятислойного оборонительного контура сборки и его автоматизацию с помощью GitHub Actions. Эти инженерные шаги гарантируют надежную защиту продуктивного контура от попадания неработоспособного кода.
Однако в жизненном цикле разработки крупномасштабных корпоративных систем на платформе «1С:Предприятие 8.3» существует еще одна фундаментальная проблема - безопасность тестовых данных. Разработчикам, тестировщикам и автотестам для качественной работы необходимы актуальные данные из продуктивной базы. При этом передача реальных персональных данных или коммерческой тайны на рабочие станции программистов и серверы тестирования строго запрещена требованиями регуляторов и корпоративными стандартами безопасности.
В третьей части нашего цикла мы рассмотрим, как полностью автоматизировать процесс маскирования многогигабайтных и терабайтных баз данных 1С на СУБД PostgreSQL с помощью бесплатного инструмента pg_anon в рамках автоматического пайплайна, полностью избегая создания небезопасных промежуточных копий на диске. Исходный код проекта доступен на GitHub: NickScherbakov/1c-sre-suite.
Важно: пайплайн работает с изолированной staging-копией СУБД (stage_anonymized_1c), которая создаётся и уничтожается в рамках самого процесса и никогда не публикуется как продуктивная база. Все операции над содержимым информационной базы 1С - включая пост-обработку (сброс паролей, снятие регистрации изменений планов обмена) - выполняются исключительно через объектную модель платформы 1С:Предприятие (headless-запуск обработки, см. раздел ниже), без единого прямого SQL-обращения к таблицам ИБ.
Проблема традиционного подхода к маскированию
Обычный процесс подготовки тестовой базы традиционно состоит из трех последовательных этапов:
- Выгрузка полного резервного копирования (дампа) продуктивной базы на диск временного сервера.
- Восстановление этого дампа в промежуточную техническую СУБД.
- Запуск скриптов очистки и маскирования данных.
Этот классический подход несет в себе три критических инженерных недостатка:
| Критерий | Традиционный подход (Dump → Restore → Clean) | Подход 1C:SRE-Suite (pg_anon On-The-Fly) |
|---|---|---|
| 1. Безопасность PII | Часы открытого хранения боевого дампа с персональными данными на staging-сервере. | Полное отсутствие сырого дампа на диске: данные обезличиваются в потоке оперативной памяти. |
| 2. Расход диска | Требуется 2-3 объема базы данных (дамп + staging-база + результирующий файл). | 1 объем: потоковая трансляция через RAM-диск/NVMe без промежуточных копий. |
| 3. Скорость конвейера | Двойной I/O-оверхед: ресурсы тратятся на долгую физическую запись и повторное чтение с диска. | Линейная скорость сети: пайплайн ограничен только производительностью потока СУБД. |
- Угроза безопасности: на протяжении нескольких часов на диске промежуточного сервера в открытом виде хранится точный слепок боевой базы со всеми персональными данными, окладами сотрудников и финансовыми операциями. Любой несанкционированный доступ приведет к полной компрометации защищаемого периметра.
- Дефицит дискового пространства: для терабайтной базы данных 1С:ERP требуется как минимум два, а чаще три терабайта свободного места на staging-сервере.
- Низкая скорость работы: операции записи промежуточного дампа на накопитель и его обратного вычитывания критически замедляют весь цикл подготовки стендов.
Концепция маскирования в потоке (On-The-Fly)
Для решения этих проблем в рамках открытого проекта 1C:SRE-Suite разработан модуль маскирования, который задействует стандартный механизм Unix-пайпов (pipes) для непрерывной потоковой передачи данных между продуктивной и временной базами. Это полностью исключает стадию записи незащищенного дампа на диск.
Ниже приведена схема прохождения данных в нашем автоматизированном скрипте anonymize-pipeline.sh:
Поток байтов резервной копии продуктивного контура передается по защищенной сети и сразу разворачивается в изолированную временную базу данных, размещенную в СУБД на быстром RAM-диске или скоростном NVMe-накопителе. Дисковая подсистема хоста вообще не задействуется для промежуточных файлов.
Разбор декларативных правил pg-anon-1c.yml
Специфика маскирования баз данных платформы 1С заключается в динамической генерации имен таблиц и полей на уровне СУБД. Вместо понятных названий таблиц физических лиц или регистров адресов мы сталкиваемся с именами вида _Reference112 и _InfoRg1120, а также полями _Fld1004 или _Fld1122.
Конфигурационный файл pg-anon-1c.yml решает эту проблему путем описания точечных правил маскирования для этих специфических таблиц:
Использование встроенного провайдера faker позволяет формировать связные, реалистичные и грамматически корректные ФИО, адреса и телефоны. Использование провайдера hash с секретной солью гарантирует, что ИНН и СНИЛС заменяются на уникальные псевдослучайные значения. Это критически важно для сохранения целостности индексов СУБД и уникальности бизнес-ключей в 1С.
Автоматизация конвейера: anonymize-pipeline.sh
Наш скрипт-оркестратор anonymize-pipeline.sh выполняет полный цикл подготовки базы данных под ключ за шесть детерминированных технологических шагов:
- Создание изолированной базы маскирования: скрипт разворачивает временную СУБД
stage_anonymized_1cна сервере маскирования. - Потоковое копирование структуры и данных: данные переносятся напрямую из боевой базы через конвейер СУБД
pg_dump | pg_restoreбез дисковых операций. - Применение маскирования pg_anon: запускается утилита
pg_anonс использованием нашего декларативного файла правил pg-anon-1c.yml. - Пост-обработка средствами платформы 1С: на этом шаге сбрасываются пароли пользователей информационной базы и снимается регистрация изменений планов обмена (чтобы staging-копия не начала рассылать тестовые данные в смежные системы). Выполняется headless-запуском
1cv8 ENTERPRISE ... /Executeвнешней обработкиpost-anonymize-1c.epf(исходник —scripts/post-anonymize-1c.bsl), через объектную модель платформы (ИнформационнаяБаза.ПользователиИнформационнойБазы,ПланыОбмена.УдалитьРегистрациюИзменений()) — без единого прямого SQL-обращения к таблицам СУБД. - Экспорт готового дамп-файла: очищенная база выгружается в сжатый файл
anonymized_dev.dump. - Полная деструкция временных ресурсов: база
stage_anonymized_1cполностью удаляется из СУБД, гарантируя чистоту окружения.
Интеграция в сквозной CI/CD-пайплайн
Включение процесса маскирования в общий цикл доставки изменений выполняется добавлением отдельного джоба в наш ранее описанный файл конфигурации. Подробное руководство по контейнеризации и безопасному пробросу лицензий доступно в нашей статье по интеграции CI/CD 1С:Предприятие в Docker. Поскольку процесс маскирования крупной базы данных требует времени, этот шаг рекомендуется настраивать на регламентный ночной запуск по расписанию (cron):
В результате выполнения этого джоба в защищенном S3-хранилище или на выделенном внутреннем файловом сервере каждую ночь будет обновляться готовый, проверенный и на 100% безопасный файл anonymized_dev.dump. Разработчики смогут скачивать его одной командой и разворачивать на своих локальных машинах, не нарушая регламентов безопасности и коммерческой тайны.
Перспективы развития модуля маскирования
Наш декларативный подход позволяет гибко масштабировать правила маскирования под любую прикладную конфигурацию. В репозитории проекта NickScherbakov/1c-sre-suite мы планируем развивать этот модуль по следующим направлениям:
| Вектор развития | Инженерные задачи и цели |
|---|---|
| 1. Многопоточный движок | Параллелизация маскирования независимых таблиц через пул параллельных рабочих процессов pg_anon. |
| 2. Автогенерация схем | Node.js-утилита автоматической генерации YAML-правил из метаданных выгруженного XML-проекта 1C:EDT. |
| 3. Готовые шаблоны ERP/ЗУП | Публикация выверенных профилей маскирования для 1С:ERP, 1С:ЗУП и 1С:Управление торговлей 11. |
Мы приглашаем SRE-инженеров, администраторов баз данных и разработчиков принять активное участие в тестировании и контрибьюте в проект! Делитесь опытом, пишите предложения в разделе Issue и присылайте ваши Pull Request'ы в репозиторий NickScherbakov/1c-sre-suite.
Проект поставляется под открытой коммерческой лицензией MIT: вы можете свободно использовать его, дорабатывать и внедрять в инфраструктуру своего бизнеса.
Перейти в репозиторий NickScherbakov/1c-sre-suite на GitHub →
Вступайте в сообщество инженеров: Телеграм-чат Инфостарт.
Материал подготовлен для сообщества DevOps-инженеров, системных администраторов и архитекторов «1С:Предприятия».
Нинель и Николай Щербаковы — декларативная инфраструктура, SRE и интеллектуальная автоматизация экосистемы 1С на Linux.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.27.81
- Управление торговлей, редакция 11, релизы 11.6.1.53
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.204.22
Вступайте в нашу телеграмм-группу Инфостарт