Open-Sourcing von Datanymizer: vorlagenbasierte Echtzeit-Datenanonymisierung
Produktionssysteme müssen oft sensible Informationen speichern, darunter auch personenbezogene Daten (pbD). Entwickler benötigen für ihre Testsysteme häufig Material, das den Daten in den Produktionssystemen so nahe wie möglich kommt. Auch wenn dies schon immer die beste Vorgehensweise war, wird es aufgrund gesetzlicher Datenschutzregelungen wie HIPAA, HITECH, CPRA und DSGVO immer wichtiger, sicherzustellen, dass personenbezogene Daten nur dort verbleiben, wo sie unbedingt erforderlich sind, und dass sie bei der Übertragung an andere Stellen ordnungsgemäß verschleiert oder anonymisiert werden.
Es gibt verschiedene Möglichkeiten, diese Lücke zu schließen, z. B. eine strikte Trennung zwischen Datenbanktabellen, die pbD enthalten, und solchen, die keine aufweisen. Es ist dann möglich, Tabellen mit pbD beim Export zu überspringen und durch synthetische Daten auf den Entwicklungssystemen zu ersetzen. Dieser Ansatz kann durchaus funktionieren, setzt aber voraus, dass sich das System an dieses Entwurfsmuster hält und die synthetischen Daten eng genug mit den Produktionsäquivalenten übereinstimmen, sodass keine Probleme auftreten.
Eine Alternative könnte darin bestehen, eine spezielle Art von „bereinigtem“ Dump auf dem Produktionssystem zu generieren, bei dem die pbD bereits verschleiert sind oder durch synthetische Daten ersetzt wurden. Entwicklern wäre es möglich, diese Informationen direkt zu importieren, wodurch das Risiko, dass sensible Daten jemals die Produktionsumgebung verlassen, nachhaltig reduziert wird.
Dies ist der Ansatz, den Datanymizer verfolgt.
Faker, Anonymisierer und Obfuskatoren — es gibt zahlreiche kostenlose Open-Source-Tools zur Anonymisierung von Daten, die schon lange existieren und ziemlich gut funktionieren. Warum also haben wir ein neues entwickelt? Ein Tool, das globale Variablen, Einzigartigkeitsbedingungen, Inline-Regeln und andere coole Funktionen unterstützt.
Uns schwebten einige spezielle Anforderungen vor, die unser Tool erfüllen sollte. Wir wollten nicht, dass der Anonymisierer einen „rohen“ Dump verwendet und diesen verändert. Unser Ziel war es stattdessen, einen bereits anonymisierten Dump zur Verfügung zu stellen — ganz ohne Zugriff auf echte Daten. Die Konfiguration, die festlegt, wie die Daten des realen Systems anonymisiert werden, sollte von selbigen getrennt aufbewahrt werden.
Außerdem wollten wir ein Tool entwickeln, das im Hinblick auf die Art und Weise der Anonymisierung flexibel ist und idealerweise den Einsatz von Vorlagen für das Ausfüllen von Feldern erlaubt.
Datanymizer: Ihr flexibler Freund zum Schutz der Privatsphäre
Datanymizer erfüllt all diese Anforderungen: Sie legen eine Konfiguration fest, die angibt, was zu tun (und nicht zu tun) ist. Das Tool ruft dann die Daten direkt aus Ihrer Datenbank ab, wobei es die von Ihnen definierten Regeln anwendet. Die Tera -Templating-Engine wird dabei genutzt, um selbst komplexe Werte synthetisieren zu können.
Die Ausgabe besteht in einem anonymisierten SQL-Dump, der entweder in eine Datei oder direkt in die Standardausgabe geschrieben wird und mit Ihren normalen Tools in eine Datenbank importiert werden kann.
Erste Schritte
Es gibt mehrere Möglichkeiten, pg_datanymizer
zu installieren. Wählen Sie jene, die für Sie am komfortabelsten ist.
Vorkompilierte Binärdatei:
# Linux / macOS / Windows (MINGW and etc). Installs it into ./bin/ by default
$ curl -sSfL https://raw.githubusercontent.com/datanymizer/datanymizer/main/cli/pg_datanymizer/install.sh | sh -s
# Or more shorter way
$ curl -sSfL https://git.io/pg_datanymizer | sh -s
# Specify installation directory and version
$ curl -sSfL https://git.io/pg_datanymizer | sh -s -- -b usr/local/bin v0.1.0
# Alpine Linux (wget)
$ wget -q -O - https://git.io/pg_datanymizer | sh -s
Homebrew / Linuxbrew:
# Installs the latest stable release
$ brew install datanymizer/tap/pg_datanymizer
# Builds the latest version from the repository
$ brew install --HEAD datanymizer/tap/pg_datanymizer
Docker:
$ docker run --rm -v `pwd`:/app -w /app datanymizer/pg_datanymizer
Die README enthält eine Beispielkonfiguration, die Sie als Ausgangspunkt verwenden können.
Nun ist es Ihnen möglich, Datanymizer aufzurufen, um einen bereinigten Dump Ihrer Daten zu erzeugen:
$ pg_datanymizer -f /tmp/dump.sql -c ./config.yml postgres://postgres:postgres@localhost/test_database
Das Tool erstellt die neue Dump-Datei /tmp/dump.sql
mit einem nativen SQL-Dump für PostgreSQL-Datenbanken. Sie können die Fake-Daten aus diesem Dump mit folgendem Befehl in eine neue PostgreSQL-Datenbank importieren:
$ psql -Upostgres -d new_database < /tmp/dump.sql
Tabellenfilter
Es ist Ihnen möglich, eine Liste von Tabellen anzugeben, die nie in einen Dump aufgenommen werden sollen:
Zum alleinigen Abrufen der Daten aus public.markets
und public.users
.
# config.yml
#...
filter:
only:
- public.markets
- public.users
Zum Ignorieren dieser Tabellen und zum Abrufen der Daten aus allen anderen.
# config.yml
#...
filter:
except:
- public.markets
- public.users
Sie können auch Daten- und Schemafilter separat angeben.
Globale Variablen
Es steht Ihnen frei, globale Variablen anzugeben, die in jeder template
-Regel zur Verfügung stehen.
# config.yml
tables:
users:
bio:
template:
format: "User bio is {{var_a}}"
age:
template:
format: {{_0 * global_multiplicator}}
#...
globals:
var_a: Global variable 1
global_multiplicator: 6
Integrierte Regeln
Datanymizer bietet integrierte Unterstützung („Regeln“) für bestimmte Wertetypen, einschließlich eines pipeline
-Filters, der die Ausführung mehrerer Regeln in Folge ermöglicht. Zu den weiteren Filtern zählen email, ip, words, first_name, last_name, city, phone, capitalize, template, digit, random_number, password, datetime
und mehr.
Einzigartigkeitsbedingungen
Einzigartigkeit wird von den Regeln email, ip, phone
, und random_number
unterstützt.
Die Einzigartigkeit wird sichergestellt, indem die generierten Werte bei Bedarf nachverfolgt und sämtliche Duplikate neu erzeugt werden.
Sie können die Anzahl der Versuche mit try_count
anpassen. Dies ist ein optionales Feld, die Standardanzahl der Versuche hängt von der Regel ab.
Zukünftige Entwicklung
Wir planen, bald die folgenden zusätzlichen Funktionen zu implementieren:
- Vorfiltern: Wenn es beispielsweise notwendig ist, nicht alle Benutzer abzurufen, sondern nur diejenigen, die bestimmten Kriterien entsprechen (z. B. 100 Benutzer, die 27 Jahre oder älter sind und Alexander heißen). Es werden beliebige SQL-Abfragen zur Filterung unterstützt.
- Datengenerierung: Wenn Sie vorhandene Daten nicht anonymisieren müssen, sondern stattdessen synthetische Daten nach bestimmten Regeln erzeugen möchten.
RDBMS-Unterstützung
DDatanymizer unterstützt derzeit PostgreSQL-Datenbanken, der Support von MySQL (und damit auch MariaDB) ist geplant. Etwaige Beiträge sind natürlich herzlich willkommen!