Datenmaskierung
PII bei der Branch-Erstellung anonymisieren — Maskierungsrichtlinien, die integrierte Funktionsbibliothek und wie maskierte Branches versiegelt bleiben, bis die Maske committet ist.
Datenmaskierung anonymisiert sensible Spalten in dem Moment, in dem ein Branch erstellt wird. Sie hängen eine Maskierungsrichtlinie an den Branch-Erstellungsaufruf an, und die passenden Spalten des neuen Branches werden unwiderruflich umgeschrieben — gehasht, auf NULL gesetzt, gekürzt oder ersetzt —, bevor der Branch überhaupt erreichbar ist. Der Parent-Branch wird nie verändert.
Sie greifen darauf zurück, wenn Sie produktionsähnliche Daten an die Entwicklung, CI oder einen externen Dienstleister übergeben möchten, ohne die darin enthaltene PII mit zu übergeben: echte Tabellenformen, echte Zeilenzahlen, falsche E-Mail-Adressen.
How it works
Eine Maskierungsrichtlinie ist ein projektbezogener, benannter Satz von Regeln. Jede Regel ordnet Spalten nach Muster zu und benennt eine integrierte Maskierungsfunktion:
| Field | Meaning |
|---|---|
schema_pattern | Muster für Schemanamen (% oder * = beliebig, _ = ein Zeichen). Standardwert ist *. |
table_pattern | Muster für Tabellennamen. |
column_pattern | Muster für Spaltennamen. |
masking_fn | Eine der unten aufgeführten integrierten Funktionen. |
fn_args | Funktionsargumente (nur mask_constant nimmt eines: value). |
Zum Zeitpunkt der Branch-Erstellung, wenn eine masking_policy_id
angegeben wird:
- Der Branch forkt wie gewohnt von seinem Parent (Copy-on-Write — sofort).
- Der Branch geht in den Zustand
maskingüber. Es wird kein Endpoint bereitgestellt und der Proxy verweigert Verbindungen zu ihm: es gibt kein Zeitfenster, in dem die unmaskierten Daten gelesen werden können. - Ein Maskierungs-Worker verbindet sich mit der Compute des Branches als Rolle mit minimalen Rechten, ermittelt das Schema, ordnet Ihre Regeln dagegen zu und führt jedes Umschreiben in einer einzigen Transaktion aus.
- Der Branch landet im Zustand
readyund seine Endpoints kommen hoch — und liefern nun nur noch maskierte Daten aus. Bei jedem Fehler landet der Branch im Zustandfailedund bleibt versiegelt; löschen Sie ihn und versuchen Sie es erneut.
Regeleingaben werden als Daten behandelt, nie als SQL: Bezeichner werden in Anführungszeichen gesetzt und Argumentwerte werden bei der Ausführung als Parameter gebunden, sodass ein bösartiger Spaltenname oder eine bösartige Konstante nicht aus dem Umschreiben ausbrechen kann.
Built-in functions
| Function | Effect |
|---|---|
mask_email | md5(value)@masked.invalid |
mask_name | Name_ + ein 8-stelliges Hash-Präfix |
mask_null | NULL (Spalte muss nullable sein) |
mask_constant | Ein fester Wert, den Sie angeben (fn_args.value) |
mask_ssn_partial | ***-**-1234 — behält die letzten 4 Ziffern |
mask_credit_card | ****-****-****-1234 — behält die letzten 4 Ziffern |
mask_ip | 0.0.0.0 |
mask_date_year | Behält das Jahr, kürzt auf den 1. Januar |
mask_hash | md5(value) |
mask_shuffle | Hash-basierte Verwürfelung (vollständige Zeichen-Verwürfelung ist geplant) |
mask_phone | Eine synthetische +1-555-XXXX-Nummer |
mask_uuid | Eine frische zufällige UUID |
Der Katalog wird auch von der API bereitgestellt:
curl -s https://api.test.kisenon.com/v1/masking-functions \
-H "Authorization: Bearer $KISENON_API_KEY"Managing policies
Die Datenmaskierung wird schrittweise ausgerollt. Der hier beschriebene Richtlinien-Editor und das Dropdown bei der Branch-Erstellung werden nach und nach aktiviert; bis die Maskierung für Ihr Konto aktiv ist, antwortet die API mit
501 not_implementedund die Konsole zeigt einen Hinweis „noch nicht verfügbar" an. Ihre Projekte sind in der Zwischenzeit nicht betroffen.
Öffnen Sie in der Konsole Project settings → Data masking, um eine Richtlinie zu erstellen: benennen Sie sie, fügen Sie Regeln hinzu (Muster-Spalten + ein Funktions-Dropdown) und speichern Sie. Dieselbe Oberfläche existiert auf der API:
curl -s -X POST \
https://api.test.kisenon.com/v1/projects/$PROJECT_ID/masking-policies \
-H "Authorization: Bearer $KISENON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "dev-safe",
"rules": [
{"table_pattern": "users", "column_pattern": "email", "masking_fn": "mask_email"},
{"table_pattern": "users", "column_pattern": "phone", "masking_fn": "mask_null"},
{"table_pattern": "%", "column_pattern": "%ssn%", "masking_fn": "mask_ssn_partial"}
]
}'Erstellen Sie dann einen maskierten Branch, indem Sie die Richtlinie zu einem normalen Branch-Erstellungsaufruf hinzufügen:
curl -s -X POST \
https://api.test.kisenon.com/v1/projects/$PROJECT_ID/branches \
-H "Authorization: Bearer $KISENON_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "masked-dev", "masking_policy_id": "'$POLICY_ID'"}'Der Branch meldet state: "masking", während das Umschreiben läuft;
beobachten Sie, wie er in der Konsole auf ready umspringt (live, über
den Event-Stream des Projekts) oder indem Sie
GET /v1/branches/{id} abfragen.
Good to know
- Maskierung erfolgt einmalig, bei der Erstellung. Das Bearbeiten einer Richtlinie berührt nie Branches, die bereits mit ihr erstellt wurden — sie behalten die Datenform, mit der sie geboren wurden. Erstellen Sie den Branch neu, um die neuen Regeln anzuwenden.
- Eine in Verwendung befindliche Richtlinie kann nicht gelöscht
werden. Das Löschen einer Richtlinie, mit der ein aktiver Branch
erstellt wurde, gibt
409 policy_in_usezurück; löschen Sie zuerst diese Branches. - Nicht passende Regeln werden übersprungen, nicht fatal. Wenn Ihr Schema abgewichen ist und ein Muster auf nichts passt, wird der Branch trotzdem abgeschlossen — prüfen Sie die Regelmuster, wenn eine Spalte, die Sie maskiert erwartet hatten, immer noch die echte Datenform hat.
- Typabweichungen lassen den Branch fehlschlagen. Eine Regel, die auf
eine Spalte passt, die ihre Funktion nicht umschreiben kann (etwa
mask_emailauf eineminteger), bricht die gesamte Maske ab — der Branch landet im Zustandfailedund wird nie halbmaskiert offengelegt.