# GLPI Network - Plugin d'anonymisation [English README](https://services.glpi-network.com/documentation/1688/file/README.md) Ce plugin permet d'anonymiser des données contenues dans la base de GLPI. L'anonymisation se fait à partir d'un profil (qui défini quelles données rendre anonyme, et de quelle manière), que l'on applique soit en action massive, soit en ligne de commande (obligatoire en cas de base de données importante). ![GLPI Network Anonymisation](https://services.glpi-network.com/documentation/1688/download_file/main/docs/screenshots/anonymize.png) ## Profils d'anonymisation Afin de permettre une certaine souplesse dans le choix des éléments et leurs attributs à anonymiser, il est possible de configurer des "profils d'anonymisation". Chaque profil détermine : - le type d'élément auquel il s'applique (ex: "Utilisateur", "Ordinateur"); - pour chaque attribut de l'élément (ex: "Nom", "Prénom", "Numéro de série", "Lieu", "Statut", etc...), la stratégie à appliquer parmi : 1. conserver la valeur, 2. supprimer la valeur, 3. remplacer par une valeur fixe, 4. remplacer par une valeur aléatoire standards, 5. remplacer par une valeur aléatoire réaliste; - le choix du traitement à appliquer à l'historique de l'élément parmi : 1. suppression complète de l'historique, 2. suppression de l'historique au delà d'une durée définie et anonymysation du reste, 3. anonymisation complète de l'historique; - la liste des champs pour lesquels la valeur devra être recherchée et remplacée dans des éléments tiers (ex: description des tickets et suivis, notes); - si ce profil est le profil par défaut à appliquer au type d'élément concerné. Des profils par défaut sont pré-configurés à l'installation du plugin pour les éléments les plus susceptibles d'être anonymisés : "Utilisateur", "Ordinateur". ## Anonymisation en "Action massive" Une action "Anonymiser" est proposée au sein des actions massives dans les différentes listes de GLPI. Si la sélection des éléments à anonymiser est supérieure ou égale à 5, un message s'affiche conseillant d'utiliser l'anonymisation en ligne de commande (pour de meilleurs performances, ou pour avoir un temps de traitement illimité). Cette action massive est composée des étapes suivantes : 1. choix du profil d'anonymisation à utiliser, 2. saisie des valeurs pour les champs dont la stratégie définie est "remplacement par une valeur fixe" (la valeur par défaut saisie dans le profil est pré-remplie). ## Anonymisation en "Ligne de commande" (CLI) Après installation et activation du plugin, une commande est ajoutée à la console CLI de GLPI (bin/console) afin de pouvoir proposer soit un traitement d'un ou plusieurs types d'éléments en une seule opération, soit d'un traitement ciblé similaire à celui proposé dans les actions massives. Exécution de tous les profils par défauts sur tous les objets `glpi:plugin:anonymize --all` Exécution du profile X sur tous les objets / sur un object `glpi:plugin:anonymize --profile=X` `glpi:plugin:anonymize --profile=X --item-id=X` Exécution du profile par défaut du type X sur tous les objets / sur un object `glpi:plugin:anonymize --itemtype=X` `glpi:plugin:anonymize --itemtype=X --item-id=X` ## Valeurs aléatoires standards Pour les attributs sélectionnés, le choix "valeurs aléatoires" génére une donnée non réaliste en fonction du type de données côté base de données. Exemples : - Si ```TINYINT```, un booléen aléatoire est généré ; - Si ```INT``` en base de données, un nombre entier aléatoire est généré ; - Si ```VARCHAR``` en base de données, une phrase (non lisible) est générée ; - Si ```TEXT``` en base de données, un texte (non lisible) composé d'un ou plusieurs paragraphes est généré ; - Si ```DATETIME``` en base de données, une date+heure est générée ; - Etc. ## Valeurs aléatoires réalistes La génération de valeurs aléatoires "réalistes" se base sur le composant `fzaninotto/Faker` qui propose des fonctions de génération pour un grand nombre de typologies de données, dont les noms, adresses, e-mail, téléphone, IP. Le plugin dans sa première version contient uniquement les typologies aléatoires réalistes suivantes : | Champ | Typologie | | -------- | -------- | | glpi_x.serial | Base.randomAscii | | glpi_x.otherserial | Barcode.ean13 | | glpi_x.uuid | Uuid.uuid | | glpi_contacts.name | Person.name | | glpi_contacts.firstname | Person.firstName | | glpi_contacts.phone | PhoneNumber.e164PhoneNumber | | glpi_contacts.phone2 | PhoneNumber.e164PhoneNumber | | glpi_contacts.mobile | PhoneNumber.e164PhoneNumber | | glpi_contacts.fax | PhoneNumber.e164PhoneNumber | | glpi_contacts.email | Internet.email | | glpi_contacts.address | Address.streetAddress | | glpi_contacts.postcode | Address.postcode | | glpi_contacts.town | Address.city | | glpi_contacts.state | Address.state | | glpi_contacts.country | Address.country | | glpi_networkports.ip | Internet.ipv4 | | glpi_networkports.mac | Internet.macAddress | | glpi_phones.number_line | PhoneNumber.e164PhoneNumber | | glpi_users.name | Internet.userName | | glpi_users.password | Internet.password | | glpi_users.phone | PhoneNumber.e164PhoneNumber | | glpi_users.phone2 | PhoneNumber.e164PhoneNumber | | glpi_users.mobile | PhoneNumber.e164PhoneNumber | | glpi_users.realname | Person.name | | glpi_users.firstname | Person.firstName | | glpi_users.language | Miscellaneous.locale | | glpi_useremails.email | Internet.email | L'ajout de typologies réalistes supplémentaires nécessite un développement complémentaire. ## Remplacement des valeurs dans les éléments tiers L'utilité, la complexité et la fiabilité du remplacement des valeurs dans les éléments tiers diffère fortement en fonction de la typologie des champs, c'est pourquoi le traitement est défini de manière unitaire comme spécifié dans le tableau suivant. En dehors des champs définis, aucun remplacement ne sera fait. | Champ(s) | Fonctionnement | | -------- | -------- | | nom + prénom | recherche du couple nom + prénom ou prénom + nom, sans prise en compte de la casse, seulement dans le cas où les deux champs ont une valeur valide (pas de remplacement du prénom seul ou du nom seul) | | e-mail | recherche de l'adresse exacte ou du nom d'utilisateur (ex: `j.smith@domain.org` ou `j.smith`) | | n° de téléphone | recherche de la suite numérique agrémentée ou non des séparateurs couramment utilisés (ex: `0067983204` ou `00 67 98 32 04` ou `00.67.98.32.04` ou `00-67-98-32-04`) | | n° et rue (adresse postale) | recherche de la valeur exacte | | ville (adresse postale) | recherche de la valeur exacte | | adresse IP | recherche de la valeur exacte | | adresse MAC | recherche de la valeur exacte | :::warning **:warning: Ce traitement analyse l'ensemble des champs de type ```VARCHAR/TEXT``` de la base de données, à l'exception de la table d'historique qui est traitée de manière spécifique. Le traitement peut donc s'avérer long sur une base de données importante.** ::: ## Traitement de l'historique Lorsqu'une valeur est anonymisée, un traitement est effectué dans l'historique de l'élément concerné pour mettre à jour, s'il y en a, les entrées d'historique correspondantes. ## Limites L'anonymisation ne pourra pas traiter les valeurs saisies librement dans des éléments tiers et qui ne correspondent pas exactement à la valeur initiale qui a été rémplacée. Par exemple, si l'anonymisation est faite sur un utilisateur dont le nom est `Jean de La Fontaine`, une valeur telle que `Jean de Lafontaine` ne sera pas reconnue et donc pas remplacée. La génération de valeurs aléatoires sur les clés étrangères (hors intitulés) ne sera pas proposée, afin d'éviter d'altérer des éléments tiers et générer des entrées orphelines en base de données. ## Contribuer Vous souhaitez contribuer au développement de ce plugin ? Contactez-nous dans votre espace client. [[toc]]