Si vous avez besoin de protéger des informations sensibles et de suivre la réglementation sur la confidentialité des données, il est essentiel d'obfusquer vos données de log, c'est‑à‑dire de masquer les renseignements personnels. Mais le masquage efficace de ces renseignements personnels dans les logs peut prendre du temps à mettre en place, augmenter les ressources de calcul nécessaires et ne pas fonctionner correctement avec tous les types de logs. 

Il est essentiel d'obfusquer les renseignements personnels et autres données sensibles dans vos logs, car cela vous permet d'assurer la confidentialité et l'intégrité des données tout en continuant à utiliser les logs pour analyser le comportement du système et résoudre les problèmes. Vous pouvez ainsi atténuer le risque de violation des données et d'accès non autorisé et poursuivre votre travail de débogage en cours.

Cet article de blog partage des conseils utiles et des exemples de code pour l'obfuscation des logs via Fluent Bit côté client avec le monitoring d'infrastructure New Relic. Que vous évaluiez New Relic avec d'autres plateformes ou que vous l'utilisiez déjà et que vous cherchiez à protéger des informations sensibles, lisez la suite pour explorer les options de configuration avancées de New Relic. Vous obtiendrez des conseils sur l'obfuscation des logs, notamment :

  • L'importance de l'obfuscation des logs et quelques approches populaires
  • L'utilisation de Fluent Bit dans le monitoring d'infrastructure New Relic
  • Comment obfusquer vos logs
  • Comment supprimer les données sensibles de vos logs

L'obfuscation des logs est à la fois importante et difficile

L'obfuscation des logs est une mesure de sécurité essentielle qui aide à protéger les systèmes informatiques contre les violations de données et l'accès non autorisé aux informations sensibles. Vous devrez peut-être supprimer ou masquer des attributs de vos logs pour protéger les données sensibles telles que les adresses e-mail ou les numéros de carte bancaire des comptes clients, afin qu'ils ne soient pas visibles dans les logs. La suppression ou le masquage de ces attributs peut empêcher l'accès non autorisé aux données sensibles en cas de fuites de logs ou d'utilisateurs malveillants. 

Autre avantage de l'élimination des attributs inutiles : la réduction de la taille des logs qui les rend plus faciles à gérer et à analyser. Cela peut améliorer les performances globales du système et réduire les coûts de stockage et de traitement des fichiers de logs volumineux.

L'implémentation de l'obfuscation pour les logs est particulièrement compliquée. En effet, il est difficile de s'assurer que les logs obfusqués fournissent suffisamment d'informations pour permettre un dépannage et une analyse efficaces (la raison même pour laquelle vous avez besoin des logs). Ce défi prend encore plus d'ampleur lorsqu'il s'agit de grands systèmes complexes qui génèrent d'énormes quantités de données de log.

Différentes approches pour l'obfuscation des logs

Pour surmonter le défi présenté par l'obfuscation des logs, les équipes d'ingénierie utilisent diverses techniques telles que l'expurgation, le hachage et le chiffrement pour masquer les données sensibles tout en préservant l'intégrité globale des fichiers logs. 

Une technique souvent utilisée consiste à créer des règles personnalisées à l'aide de modèles Grok ou de scripts Lua pour masquer ou supprimer les informations sensibles des données de log. 

  • Le processus commence par identifier les types de données sensibles qui doivent être masquées. Par exemple, vous savez que vous avez des adresses IP, des numéros de carte bancaires et des noms d'utilisateur pour vos clients. 
  • Vous définissez des règles personnalisées dans les modèles Grok ou les scripts Lua qui correspondent aux modèles de données sensibles et vous précisez comment ces données doivent être masquées ou supprimées. 
  • Ensuite, vous testez les règles personnalisées sur un échantillon de données de log pour vérifier qu'elles correspondent bien aux modèles de données voulus et qu'elles appliquent l'obfuscation adéquate. 
  • Une fois les règles testées, vous pouvez les intégrer dans le pipeline de traitement des logs avec un outil de gestion des logs comme Logstash, Fluent Bit ou FluentD. Vous pouvez utiliser tous ces outils de gestion des logs pour transmettre les logs traités à New Relic pour une analyse plus approfondie.

Le bon équilibre entre sécurité et utilisabilité de vos logs

Pour vous assurer que les logs restent un outil précieux pour le monitoring des performances du système et de résolution des problèmes, il est crucial de trouver l'équilibre entre le niveau d'obfuscation et l'utilisabilité pour le dépannage et l'analyse. Une obfuscation efficace des logs nécessite un examen soigneux des compromis faits entre sécurité et utilisabilité. 

Les modèles Grok sont un outil utile d'appariement des modèles pour l'analyse des données des fichiers logs non structurés, et les scripts Lua offrent plus de flexibilité et de contrôle sur le pipeline de traitement des logs, mais peuvent nécessiter un plus gros effort de développement.Le choix entre les modèles Grok et les scripts Lua dépend des besoins et de la maturité du pipeline de traitement des logs. 

Fluent Bit et le monitoring d'infrastructure New Relic

D'autres techniques telles que les modèles Grok ou les scripts Lua sont disponibles pour modifier les logs, mais l'utilisation de Fluent Bit dans le monitoring d'infrastructure New Relic est une approche plus directe de la protection des informations sensibles dans les logs.

Fluent Bit est un collecteur de données open source pour une couche de logging unifiée et uniformisée. Il a été conçu pour collecter, filtrer et transférer les logs et les données de métriques vers différentes destinations. Intégré dans le cadre du monitoring d'infrastructure New Relic, Fluent Bit est déployé en tant qu'agent côté client par défaut. Cela signifie que vous pouvez réaliser des configurations avancées pour collecter des données de logs et de métriques à partir de plusieurs sources et les envoyer à New Relic pour analyse.  Le diagramme suivant montre comment fonctionne le transfert de logs dans New Relic : 

Lorsque l'agent d'infrastructure New Relic s'exécute, il traite les fichiers de configuration dans l'annuaire de logging.d. Résultat : il génère un fichier de configuration run-time Fluent Bit avec les sections [INPUT], [FILTER]et [OUTPUT] nécessaires. Si vous avez fourni un fichier de configuration Fluent Bit externe via l'option fluentbit, l'agent déclare également un @INCLUDE dans le fichier de configuration généré.

Par défaut, le fichier d'exécution utilise les valeurs de configuration Fluent Bit par défaut car il ne définit pas une section [SERVICE]. Toutefois, vous pouvez personnaliser les paramètres de configuration en créant votre propre section [SERVICE] dans un fichier de configuration Fluent Bit externe et en l'incluant avec l'option fluentbit. Pour utiliser la configuration avancée dans Fluent Bit, telle que l'obfuscation des logs, vous devez générer des fichiers de configuration et des analyseurs (parsers) distincts en externe et les utiliser avec les options fluentbit, config_file et parsers_file dans l'agent.

Voici un exemple d'utilisation de la configuration supplémentaire de Fluent Bit pour transférer des logs masqués :

logs:
  - name: external-fluentbit-config-and-parsers-file
    fluentbit:
      config_file: /etc/newrelic-infra/logging.d/fluent-bit.conf
      parsers_file: /etc/newrelic-infra/logging.d/parsers.conf

L'option config_file fait référence au chemin d'un fichier de configuration Fluent Bit existant que vous pouvez utiliser pour personnaliser vos paramètres de configuration Fluent Bit. Ce fichier comprend notamment les sections [INPUT], [FILTER]et [OUTPUT] nécessaires. 

L'option parsers_file fait référence au chemin d'un fichier d'analyseurs Fluent Bit existant. Ce fichier définit des règles d'analyse personnalisées que Fluent Bit peut utiliser pour extraire des informations des logs entrants. À l'aide d'analyseurs, vous pouvez transformer les données brutes des logs en données structurées, ce qui facilite l'analyse et la compréhension.

Important : pour transférer les logs pour les cas d'utilisation courants, l'agent d'infrastructure fournit des configurations de transfert de logs simples dans les fichiers logging.d/ du répertoire YAML.Ces fichiers sont automatiquement traduits en fichiers de configuration Fluent Bit avec le format et les paramètres de configuration corrects.

Obfusquez vos logs à l'aide de Fluent Bit dans New Relic

Pour commencer à utiliser Fluent Bit dans New Relic, vous avez besoin de deux fichiers : parsers_file pour analyser les fichiers et config_file pour modifier les enregistrements. Suivez ces étapes en utilisant les paramètres avancés avec Fluent Bit dans New Relic.

Étape 1 : Désactivation de la configuration existante des logs New Relic

Avant d'utiliser Fluent Bit, vous devez désactiver toutes les configurations de logs New Relic existantes. Vous devrez soit supprimer, soit commenter la configuration suivante dans votre fichier YAML. Dans cet exemple, la configuration est commentée.

# logs:
#   - name: nginx
#     file: /var/log/nginx.log
#     attributes:
#       logtype: nginx
#       environment: atelier
#       engineer: votrenom
#       country: votrepays
#     pattern: 500|404|400

Étape 2 : Création du fichier fluentbit.yml

Créez ou renommez votre fichier fluentbit.yml, et incluez ce chemin :

logs:
  - name: external-fluentbit-config-and-parsers-file
    fluentbit:
      config_file: /etc/newrelic-infra/logging.d/fluent-bit.conf
      parsers_file: /etc/newrelic-infra/logging.d/parsers.conf

Voici un exemple de structure de fichiers à utiliser avec Fluent Bit dans le monitoring d'infrastructure New Relic.

Étape 3 : Création d'un fichier parsers_file

Créez un fichier appelé parsers.conf et incluez votre configuration d'analyseur Fluent Bit. Vous pouvez utiliser la puissance du plug-in de filtre d'analyseur dans Fluent Bit pour analyser les champs dans les enregistrements d'événements. Vous pouvez extraire des informations spécifiques de vos logs et les transformer en données structurées plus faciles à analyser et à comprendre. Vous pouvez tester ces règles personnalisées sur un échantillon de données de log pour vérifier qu'elles correspondent bien aux modèles de données prévus et qu'elles appliquent l'obfuscation adéquate.

Voici l'analyseur d'échantillon par défaut fourni par Fluent Bit :

 

[PARSER]
    Name dummy_test
    Format regex
    Regex ^(?<INT>[^ ]+) (?<FLOAT>[^ ]+) (?<BOOL>[^ ]+) (?<STRING>.+)$

Voici un analyseur NGINX dans un exemple d'expression régulière (regex) :

[PARSER]
    Name   nginx
    Format regex
    Regex ^(?<source>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \\[(?<time>[^\\]]*)\\] "(?<method>\\S+)(?: +(?<path>[^\\"]*?)(?: +\\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\\"]*)" "(?<agent>[^\\"]*)")
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S %z

À l'aide d'un modèle d'expression régulière, ce code définit un analyseur personnalisé pour les logs d'accès NGINX. L'expression régulière capture des champs tels que l'adresse IP du client, l'heure de la requête, la méthode HTTP, le chemin d'URL, le code d'état et l'agent utilisateur. La directive Time_Key spécifie le champ de l'heure et Time_Format définit le format dans la ligne de log. Cette configuration permet aux outils de traitement d'analyser les logs d'accès NGINX et d'extraire les champs pertinents pour l'analyse et la visualisation. Pour voir plus d'exemples, vous pouvez explorer les analyseurs fournis par Fluent BitNew Relic ou les communautés open source.

Dans l'exemple suivant, vous utiliserez <source> pour masquer et supprimer les attributs des logs.

Étape 4 : Création d'un fichier de configuration conf

Créez un fichier appelé fluent-bit.conf et incluez une configuration modify dans laquelle vous utiliserez l'une des fonctionnalités les plus précieuses de Fluent Bit, le plug‑in Modify Filter. Utilisez ce plug‑in pour modifier les enregistrements à l'aide de règles et de conditions. Vous pouvez modifier le contenu des enregistrements de log en fonction de critères ou d'exigences spécifiques. Cela facilite l'analyse et le dépannage des problèmes de votre système.

Voici l'échantillon par défaut de Fluent Bit :

[INPUT]
    Name mem
    Tag  mem.local

[OUTPUT]
    Name  stdout
    Match *

[FILTER]
    Name modify
    Match *
    Add Service1 SOMEVALUE
    Add Service3 SOMEVALUE3
    Add Mem.total2 TOTALMEM2
    Rename Mem.free MEMFREE
    Rename Mem.used MEMUSED
    Rename Swap.total SWAPTOTAL
    Add Mem.total TOTALMEM

Voici un exemple de fichier de configuration à utiliser pour masquer les attributs dans vos logs :

[INPUT]
    Name              tail
    Tag               nginx
    Path              /var/log/nginx.log
    DB                /var/log/nginx_error.db
    Path_Key          filename
    Parser            nginx
    Mem_Buf_Limit     8MB
    Skip_Long_Lines   On
    Refresh_Interval  30

[FILTER]
    Name record_modifier
    Match *
    Record logtype nginx
    Record hostname ${HOSTNAME}
    Record service_name Coming_From_FluentBit

[FILTER]
    Name modify
    Match *
    Set source XXXXX

[OUTPUT]
    Name newrelic
    Match *
    apiKey INGEST KEY

Après avoir appliqué le fichier de configuration pour masquer les logs avec Fluent Bit, le résultat final ressemble à cet exemple.

Étape 5 : Redémarrage de l'agent

Pour utiliser les configurations de Fluent Bit, redémarrez l'agent d'infrastructure New Relic. Avant de redémarrer, assurez-vous que vos deux fichiers (fluent-bit.conf et parsers.conf) sont correctement référencés dans le fichier fluentbit.yml , comme indiqué à l'étape 2.

logs:
  - name: external-fluentbit-config-and-parsers-file
    fluentbit:
      config_file: /etc/newrelic-infra/logging.d/fluent-bit.conf
      parsers_file: /etc/newrelic-infra/logging.d/parsers.conf

Voici la commande pour redémarrer l'agent d'infrastructure New Relic :

sudo systemctl restart newrelic-infra

Suppression des données sensibles des logs

Dans l'exemple précédent de l'étape 4, vous avez appris à masquer un log avec Set. Une autre alternative consiste à utiliser l'opération Remove, un outil puissant pour modifier les logs. Utilisez-le pour supprimer facilement les données inutiles ou sensibles d'un enregistrement. Supprimez une paire clé-valeur d'un enregistrement, si elle existe, à l'aide du plug-in Record Modifier.

Voici un exemple de fichier de configuration à utiliser pour supprimer des attributs dans vos logs :

[INPUT]
    Name              tail
    Tag               nginx
    Path              /var/log/nginx.log
    DB                /var/log/nginx_error.db
    Path_Key          filename
    Parser            nginx
    Mem_Buf_Limit     8MB
    Skip_Long_Lines   On
    Refresh_Interval  30

[FILTER]
    Name record_modifier
    Match *
    Record logtype nginx
    Record hostname ${HOSTNAME}
    Record service_name Coming_From_FluentBit
    Remove_key source

[OUTPUT]
    Name newrelic
    Match *
    apiKey INGEST KEY

Après avoir appliqué le fichier de configuration pour supprimer les données de log à l'aide de Fluent Bit, le résultat final devrait ressembler à cet exemple :

Important : le redémarrage de l'agent d'infrastructure New Relic après toute nouvelle configuration est une étape cruciale pour s'assurer que les modifications sont prises en compte.Cette étape est particulièrement importante car elle garantit que les nouveaux paramètres de configuration sont chargés et utilisés par l'agent.Assurez-vous de redémarrer l'agent après avoir appliqué de nouvelles configurations, comme indiqué à l'étape 5.

Conclusion

Vous venez de voir quelques exemples pour assurer simplement la confidentialité et l'intégrité des données de log avec Fluent Bit dans le monitoring d'infrastructure New Relic.

Vous avez notamment appris à protéger les informations sensibles dans les logs en obfusquant les données avec les configurations de log Fluent Bit. Par exemple, une fois qu'une <source> de valeur clé est identifiée, vous pouvez facilement utiliser le plug-in du filtre Modify pour la masquer ou le plug-in du filtre Record Modifier pour supprimer les attributs de log.