Guide d'Anonymisation des Données - Portail Clients
Vue d'ensemble
Ce document détaille la stratégie d'anonymisation des données pour les environnements de développement et de qualification du Portail Clients. L'objectif est de protéger les données personnelles tout en préservant la cohérence fonctionnelle de l'application pour les tests et le développement.
Configuration
Activation de l'anonymisation
L'anonymisation est contrôlée par la section DataAnonymization dans les fichiers appsettings.json :
{
"DataAnonymization": {
"Enabled": false,
"Environment": "Production",
"RandomSeed": 12345,
"Rules": {
"AnonymizePersonalInfo": false,
"AnonymizeAddresses": false,
"AnonymizePhoneNumbers": false,
"AnonymizeEmails": false,
"AnonymizeNumeroTiers": false,
"AnonymizeRid": false,
"PreserveRelationships": true,
"PreserveAmounts": true
}
}
}
Paramètres principaux
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
Enabled | bool | false | Active/désactive l'anonymisation |
Environment | string | "Production" | Environnement actuel (Development, Staging, Production) |
RandomSeed | int | 12345 | Graine pour la reproductibilité des données anonymisées |
Règles d'anonymisation
| Règle | Type | Valeur par défaut | Description |
|---|---|---|---|
AnonymizePersonalInfo | bool | true | Anonymise prénom, nom, nom d'usage |
AnonymizeAddresses | bool | true | Anonymise les adresses de facturation et postale |
AnonymizePhoneNumbers | bool | true | Anonymise les numéros de téléphone |
AnonymizeEmails | bool | true | Anonymise les adresses email |
AnonymizeNumeroTiers | bool | false | Anonymise les numéros de tiers |
AnonymizeRid | bool | true | Anonymise les numéros RID |
PreserveRelationships | bool | true | Préserve les relations entre entités |
PreserveAmounts | bool | false | Préserve les montants financiers |
Données anonymisées
Comptes Salesforce (SalesforceAccountDto)
Informations personnelles
- FirstName : Prénom généré via Bogus (locale française)
- LastName : Nom de famille généré via Bogus (locale française)
- Name : Nom complet reconstruit à partir du prénom et nom anonymisés
- Autres_Prenoms__c : Autres prénoms générés aléatoirement (30% de probabilité)
- Nom_d_usage_ou_marital__c : Nom marital généré aléatoirement (20% de probabilité)
Coordonnées
- Email__c : Format
user{hash8}@anonymous.local - TelephoneMobile__c : Format téléphone Nouvelle-Calédonie
687XXXXXXTODO: Retirer le prefix 687.
Adresses
- BillingAddress et ShippingAddress :
- Street : Numéro aléatoire (1-999) + rue depuis la liste prédéfinie
- City : Ville depuis la liste des villes de Nouvelle-Calédonie
- PostalCode :
"98800"(fixe) - State : Région depuis la liste des régions NC
- Country :
"Nouvelle-Calédonie"(fixe)
Identifiants métier
- RID__c : Numéro à 8 chiffres (10000000-99999999)
- Numero_de_tiers__c : Format
TIERS_{ENVIRONMENT}_{hash6}
Montants financiers
- Nombre_global_de_parts_sociales__c : Valeur aléatoire (0-1000) si
PreserveAmounts = false
Opportunités Salesforce (SalesforceOpportunityDto)
- Name : Format
"Opportunité anonymisée {hash8}" - Capital_initial__c : Montant aléatoire (1000-100000) si
PreserveAmounts = false
Comptes à vue
Contrats
- Libelle
- NumeroCompteWithClefRib
Opérations
- DateOperation
- DateValeur
- Intitule
- IntituleComplet
- Beneficiaire
Sources des données de remplacement
Bibliothèque Bogus
Le système utilise la bibliothèque Bogus avec la locale française ("fr") pour générer :
- Prénoms et noms de famille réalistes
- Données cohérentes grâce aux seeds reproductibles
Données en dur - Nouvelle-Calédonie
Rues de Nouméa (16 rues)
"Rue de la Paix", "Avenue du Maréchal Foch", "Rue Sébastopol",
"Avenue de la Victoire", "Rue Georges Clemenceau", "Avenue Paul Doumer",
"Rue du Général Mangin", "Route de l'Anse Vata", "Rue de Rivoli",
"Avenue des Frères Carcopino", "Rue de Verdun", "Avenue Jean Jaurès",
"Rue Anatole France", "Boulevard Vauban", "Rue Gambetta",
"Avenue de la République"
Villes de Nouvelle-Calédonie (16 villes)
"Nouméa", "Mont-Dore", "Dumbéa", "Païta", "Bourail", "La Foa",
"Koné", "Voh", "Pouembout", "Poya", "Houaïlou", "Ponérihouen",
"Touho", "Poindimié", "Koumac", "Kaala-Gomen"
Régions de Nouvelle-Calédonie (3 régions)
"Sud", "Nord", "Îles Loyauté"
Algorithmes de génération
Hash SHA256
- Utilisé pour générer des identifiants cohérents et reproductibles
- Combiné avec le
RandomSeedde configuration - Garantit la même anonymisation pour le même ID Salesforce
Seeds reproductibles
- Conversion du hash SHA256 en seed numérique
- Combinaison avec le
RandomSeedglobal - Assure la cohérence entre les sessions d'application
Logique d'activation
L'anonymisation est activée uniquement si :
Enabled = truedans la configuration- ET l'environnement est
"Development"OU"Staging"
En production, l'anonymisation est automatiquement désactivée même si Enabled = true.
Préservation des données
Données toujours préservées
- ID Salesforce : Identifiant unique conservé pour les relations
- RecordType : Type d'enregistrement conservé
- Dates NPAI : Dates de constat NPAI conservées
- Données métier : Numéros de projet, étapes, dates de clôture
Données conditionnellement préservées
- Relations : Attaché commercial conservé si
PreserveRelationships = true - Montants : Parts sociales et capitaux conservés si
PreserveAmounts = true - Valeurs null : Les champs null en entrée restent null après anonymisation
Utilisation dans le code
L'anonymisation est appliquée automatiquement dans le service UserAccountProcessingService avant la création ou synchronisation des utilisateurs :
// Anonymisation des données Salesforce avant création de l'utilisateur
var anonymizedAccount = _anonymizationService.AnonymizeAccount(account);
var (userId, password) = await _userManagement.CreateUserAsync(anonymizedAccount, role);
Exemples de transformation
Exemple d'anonymisation d'un compte
Données originales :
{
"Id": "0013X00000ABC123",
"FirstName": "Jean",
"LastName": "Dupont",
"Email__c": "[email protected]",
"TelephoneMobile__c": "687123456",
"BillingAddress": {
"Street": "123 Rue Réelle",
"City": "Nouméa",
"PostalCode": "98800",
"Country": "Nouvelle-Calédonie"
}
}
Données anonymisées :
{
"Id": "0013X00000ABC123",
"FirstName": "Pierre",
"LastName": "Martin",
"Email__c": "[email protected]",
"TelephoneMobile__c": "687654321",
"BillingAddress": {
"Street": "456 Avenue du Maréchal Foch",
"City": "Mont-Dore",
"PostalCode": "98800",
"Country": "Nouvelle-Calédonie"
}
}
Architecture technique
Classes principales
SalesforceDataAnonymizationService: Service principal d'anonymisationAnonymizationOptions: Configuration des règles d'anonymisationAnonymizationRules: Règles spécifiques par type de données
Interfaces
ISalesforceDataAnonymizationService: Interface du service d'anonymisation
Fichiers de configuration
appsettings.json: Configuration par défaut (Production)appsettings.Development.json: Configuration spécifique au développementappsettings.Staging.json: Configuration spécifique au staging
Bonnes pratiques
- Ne jamais activer l'anonymisation en production
- Utiliser des seeds cohérents pour faciliter les tests
- Préserver les relations critiques pour maintenir l'intégrité fonctionnelle
- Tester régulièrement que l'anonymisation fonctionne correctement
- Documenter les changements de configuration d'anonymisation
Sécurité et conformité
- Les données anonymisées ne permettent pas de remonter aux données originales
- Respect des principes RGPD pour les environnements de développement
- Utilisation de hash SHA256 pour garantir la sécurité cryptographique
- Préservation de la cohérence des données pour les tests fonctionnels
Cette approche garantit que les données sensibles ne sont jamais stockées dans la base de données locale lors des environnements de développement et de test.