Masquage des données
Anonymisez les données personnelles à la création d'une branche — politiques de masquage, la bibliothèque de fonctions intégrées, et comment les branches masquées restent scellées jusqu'à ce que le masque soit validé.
Le masquage des données anonymise les colonnes sensibles dès qu'une branche est créée. Vous attachez une politique de masquage à l'appel de création de branche, et les colonnes correspondantes de la nouvelle branche sont réécrites de façon irréversible — hachées, mises à NULL, tronquées ou remplacées — avant que la branche ne soit jamais accessible. La branche parente n'est jamais modifiée.
Vous y recourez pour fournir des données ayant la forme de la production au développement, à la CI ou à un prestataire sans leur livrer les données personnelles qu'elles contiennent : formes de tables réelles, nombres de lignes réels, e-mails factices.
Comment ça fonctionne
Une politique de masquage est un ensemble nommé de règles, à la portée du projet. Chaque règle fait correspondre des colonnes par motif et nomme une fonction de masquage intégrée :
| Champ | Signification |
|---|---|
schema_pattern | Motif de nom de schéma (% ou * = n'importe quoi, _ = un caractère). Vaut * par défaut. |
table_pattern | Motif de nom de table. |
column_pattern | Motif de nom de colonne. |
masking_fn | L'une des fonctions intégrées ci-dessous. |
fn_args | Arguments de la fonction (seul mask_constant en prend un : value). |
À la création de la branche, lorsqu'un masking_policy_id est fourni :
- La branche se détache de son parent comme d'habitude (copy-on-write — instantané).
- La branche entre dans l'état
masking. Aucun endpoint n'est provisionné et le proxy refuse les connexions vers elle : il n'existe aucune fenêtre pendant laquelle les données pré-masquées peuvent être lues. - Un worker de masquage se connecte au compute de la branche avec un rôle à moindre privilège, découvre le schéma, fait correspondre vos règles à celui-ci, et exécute chaque réécriture dans une seule transaction.
- La branche atterrit dans l'état
readyet ses endpoints démarrent — ne servant désormais que des données masquées. En cas d'échec quelconque, la branche atterrit dans l'étatfailedet reste scellée ; supprimez-la et réessayez.
Les entrées des règles sont traitées comme des données, jamais comme du SQL : les identifiants sont mis entre guillemets et les valeurs des arguments sont liées comme paramètres à l'exécution, de sorte qu'un nom de colonne ou une constante hostile ne peut pas s'échapper de la réécriture.
Fonctions intégrées
| Fonction | Effet |
|---|---|
mask_email | md5(value)@masked.invalid |
mask_name | Name_ + un préfixe de hachage de 8 caractères |
mask_null | NULL (la colonne doit accepter NULL) |
mask_constant | Une valeur fixe que vous fournissez (fn_args.value) |
mask_ssn_partial | ***-**-1234 — conserve les 4 derniers chiffres |
mask_credit_card | ****-****-****-1234 — conserve les 4 derniers chiffres |
mask_ip | 0.0.0.0 |
mask_date_year | Conserve l'année, tronque au 1er janvier |
mask_hash | md5(value) |
mask_shuffle | Brouillage basé sur le hachage (le mélange complet des caractères est prévu) |
mask_phone | Un numéro synthétique +1-555-XXXX |
mask_uuid | Un nouvel UUID aléatoire |
Le catalogue est également servi par l'API :
curl -s https://api.test.kisenon.com/v1/masking-functions \
-H "Authorization: Bearer $KISENON_API_KEY"Gérer les politiques
Le masquage des données est en cours de déploiement. L'éditeur de politiques et la liste déroulante de création de branche décrits ici sont activés progressivement ; tant que le masquage n'est pas actif pour votre compte, l'API répond
501 not_implementedet la console affiche un avis « pas encore disponible ». Vos projets ne sont pas affectés entre-temps.
Dans la console, ouvrez Project settings → Data masking pour créer une politique : nommez-la, ajoutez des règles (colonnes par motif + une liste déroulante de fonctions), et enregistrez. La même surface existe sur l'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"}
]
}'Créez ensuite une branche masquée en ajoutant la politique à un appel de création de branche normal :
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'"}'La branche signale state: "masking" pendant l'exécution de la réécriture ;
observez-la basculer vers ready dans la console (en direct, via le
flux d'événements du projet) ou en interrogeant
GET /v1/branches/{id}.
Bon à savoir
- Le masquage est ponctuel, à la création. Modifier une politique ne touche jamais les branches déjà créées avec elle — elles conservent la forme de données avec laquelle elles sont nées. Recréez la branche pour appliquer les nouvelles règles.
- Une politique en cours d'utilisation ne peut pas être supprimée.
Supprimer une politique avec laquelle une branche active a été créée
renvoie
409 policy_in_use; supprimez d'abord ces branches. - Les règles non appariées sont ignorées, pas fatales. Si votre schéma a dérivé et qu'un motif ne correspond à rien, la branche se termine quand même — vérifiez les motifs des règles si une colonne que vous attendiez masquée a toujours la forme de données réelle.
- Les incompatibilités de type font échouer la branche. Une règle qui
correspond à une colonne que sa fonction ne peut pas réécrire (disons
mask_emailsur uninteger) interrompt tout le masque — la branche atterrit dans l'étatfailedet n'est jamais exposée à moitié masquée.