Clonio CLI копіює продакшн-базу даних у розробницьке, CI та тестове середовища, переписуючи чутливі колонки під час передачі - генерує фейкові імена та email-адреси, маскує токени та перепризначає первинні ключі, щоб дані залишалися придатними для використання, але більше не ідентифікували реальних людей.
Ключові можливості
- Анонімізація окремих колонок за допомогою стратегій
fake, mask, hash, static, null та template
- Ремапінг ключів, який перепризначає первинні ключі та оновлює зовнішні ключі, що на них посилаються
- Виявлення PII за допомогою матчерів, які позначають чутливі колонки без трансформації
- Підписані артефакти аудиту, що зберігаються локально, в S3, Slack, Teams або надсилаються електронною поштою
- Декілька варіантів розповсюдження - окремий бінарник, PHAR, Docker-образ або Composer dev-залежність
Конфігурація зберігається у файлі .cloning.yaml під контролем версій, який посилається на назви з'єднань, а не на облікові дані, тому його безпечно комітити разом із кодом додатку.
Стратегії трансформації колонок
Кожна колонка, яку потрібно змінити, отримує стратегію у YAML-файлі. Колонки, які ви не вказуєте, копіюються без змін, тому описувати потрібно лише ті дані, які потребують перетворення. Доступні стратегії:
fake - генерація синтетичних значень за допомогою FakerPHP
mask - збереження кількох перших символів із маскуванням решти
hash - односторонній хеш значення (псевдонімізація, а не справжня анонімізація)
static - заміна на фіксований рядок
null - встановлення значення NULL
template - поєднання літерального тексту з плейсхолдерами faker
remapping - призначення нових первинних ключів та оновлення зовнішніх ключів, що на них посилаються
Приклад скороченої конфігурації для таблиці users:
version: "1"
connection: production
options:
faker_locale: de_DE
tables:
users:
rows:
strategy: last
limit: 5000
sort_by: created_at
columns:
email:
strategy: fake
faker_method: safeEmail
first_name:
strategy: fake
faker_method: firstName
phone:
strategy: mask
internal_notes:
strategy: "null"
Clonio чітко зазначає, що вихідні дані стратегії hash усе ще вважаються персональними даними згідно з GDPR, і рекомендує використовувати fake або null, коли повторна ідентифікація має бути неможливою.
Ремапінг ключів між пов'язаними таблицями
Копіювання рядків у цільову базу даних може призвести до конфліктів із існуючими первинними ключами. Стратегія remapping замінює первинні ключі таблиці новими значеннями та послідовно оновлює зовнішні ключі в залежних таблицях, щоб референційна цілісність зберігалася при передачі, а не порушувалася під час імпорту.
Виявлення персональних даних
Замість того, щоб покладатися на вас у пошуку кожної чутливої колонки вручну, Clonio постачається з матчерами, які позначають колонки, що ймовірно містять PII. Команда matchers:init налаштовує базові шаблони, matchers:list показує діючі правила, а matchers:check валідує ваші таблиці відповідно до них - це спосіб виявити нову колонку email або tax_id, яку хтось додав без стратегії трансформації.
Аудиторський слід
Кожен запуск клонування може створювати підписаний артефакт аудиту плюс структуровані логи, що записуються локально, у S3-сумісне сховище або надсилаються до Slack, Microsoft Teams чи електронною поштою. Команда cloning:verify-audit перевіряє цілісність цих логів постфактум, що важливо, коли потрібно продемонструвати, що продакшн-дані були анонімізовані перед потраплянням у менш довірене середовище.
Встановлення та використання
Clonio працює як окремий бінарник (Linux x86_64/aarch64 та macOS Apple Silicon, PHP не потрібен), PHAR-архів для PHP 8.5+, Docker-образ (ghcr.io/clonio-dev/clonio:latest) або Composer dev-залежність:
composer require --dev clonio-dev/clonio-cli
Базовий робочий процес полягає в ініціалізації проєкту, реєстрації продакшн-з'єднання, генерації конфігурації клонування з його схеми та запуску проти цільового середовища:
clonio init
clonio connection:add production --production
clonio cloning:dump --connection production
clonio cloning:run production.cloning.yaml --target ci
Вихідний код, документацію та релізи можна знайти на GitHub.