Wenn Sie vertrauliche Informationen schützen und Datenschutzbestimmungen einhalten müssen, ist es wichtig, Ihre Logdaten zu verschleiern. Das bedeutet, dass personenbezogene Daten (PII) verschleiert werden. Die effektive Verschleierung personenbezogener Daten in Logs kann jedoch einige Zeit in Anspruch nehmen, die Rechenressourcen erhöhen und möglicherweise nicht bei allen Arten von Logs gut funktionieren. 

Es ist wichtig, personenbezogene Daten und andere vertrauliche Daten in Ihren Logs zu verschleiern , da Sie den Schutz und die Integrität der Daten gewährleisten und gleichzeitig Logs weiterhin zur Analyse des Systemverhaltens und zur Behebung von Problemen verwenden können. Sie können das Risiko von Datenschutzverletzungen und unbefugtem Zugriff verringern und trotzdem Ihre laufenden Debugging-Arbeiten erledigen.

In diesem Blogbeitrag finden Sie hilfreiche Tipps und Codebeispiele zur Verschleierung von Logs durch das clientseitige Infrastruktur-Monitoring von Fluent Bit mit New Relic. Unabhängig davon, ob Sie New Relic zusammen mit anderen Plattformen testen oder New Relic bereits verwenden und vertrauliche Informationen schützen möchten, lesen Sie weiter, um die erweiterten Konfigurationsoptionen in New Relic kennenzulernen. Sie erhalten Ratschläge zur Logverschleierung, darunter:

  • Die Bedeutung der Logverschleierung und einige beliebte Ansätze
  • Verwendung von Fluent Bit beim New Relic Infrastruktur-Monitoring
  • So verschleiern Sie Ihre Logs
  • So entfernen Sie vertrauliche Daten aus Ihren Logs

Die Verschleierung von Logs ist sowohl wichtig als auch schwierig

Die Verschleierung von Logs ist eine wichtige Sicherheitsmaßnahme, die dazu beiträgt, Computersysteme vor Datenschutzverletzungen und unbefugtem Zugriff auf vertrauliche Informationen zu schützen. Möglicherweise müssen Sie Attribute aus Ihren Logs entfernen oder verschleiern, um sensible Daten wie E-Mail-Adressen oder Kreditkartennummern aus Kundenkonten zu schützen, damit sie in den Logs nicht sichtbar sind. Das Entfernen oder Verschleiern dieser Attribute kann im Falle von versehentlicher Logpreisgabe oder böswilligen Benutzer:innen den unbefugten Zugriff auf sensible Daten verhindern. 

Ein zusätzlicher Vorteil der Eliminierung unnötiger Attribute ist die Reduzierung der Loggröße, wodurch diese einfacher zu verwalten und zu analysieren sind. Dies kann die System-Performance insgesamt steigern und die Kosten für die Speicherung und Verarbeitung großer Logdateien senken.

Die Verschleierung für Logs zu implementieren, ist eine besonders große Herausforderung. Es ist schwierig sicherzustellen, dass die verschleierten Logs genügend Informationen für eine effektive Fehlerbehebung und Analyse liefern – ist dies doch der Hauptgrund, weshalb Sie überhaupt Logs benötigen. Diese Herausforderung ist noch größer, wenn es um große, komplexe Systeme geht, die große Mengen an Logdaten erzeugen.

Einige Ansätze zur Logverschleierung

Um diese Herausforderung zu meistern, nutzen Engineering-Teams verschiedene Techniken wie Schwärzung, Hashing und Verschlüsselung, um sensible Daten zu verschleiern und gleichzeitig die Gesamtintegrität der Logdateien aufrechtzuerhalten. 

Eine beliebte Technik besteht darin, mithilfe von Grok-Mustern oder Lua-Skripten benutzerdefinierte Regeln zu erstellen, um vertrauliche Informationen in Logdaten zu maskieren oder zu entfernen. 

  • Der Prozess beginnt mit der Identifizierung der Arten sensibler Daten, die verschleiert werden müssen. Sie wissen beispielsweise, dass Sie über IP-Adressen, Kreditkartennummern und Benutzernamen für Ihre Kund:innen verfügen. 
  • Anschließend definieren Sie benutzerdefinierte Regeln in Grok-Mustern oder Lua-Skripten, die den Mustern sensibler Daten entsprechen, und legen fest, wie diese maskiert oder entfernt werden sollen. 
  • Der nächste Schritt besteht darin, die benutzerdefinierten Regeln anhand von Beispiel-Logdaten zu testen, um sicherzustellen, dass sie korrekt mit den beabsichtigten Datenmustern übereinstimmen und die entsprechende Verschleierung anwenden. 
  • Nachdem die Regeln getestet wurden, können Sie sie mit einem Log-Managementtool wie Logstash, Fluent Bit oder FluentD in die Logverarbeitungspipeline integrieren. Sie können alle diese Log-Managementtools verwenden, um die verarbeiteten Logs zur weiteren Analyse an New Relic weiterzuleiten.

Finden Sie das richtige Gleichgewicht zwischen Sicherheit und Benutzerfreundlichkeit in Ihren Logs

Um sicherzustellen, dass die Logs weiterhin ein wertvolles Werkzeug zur Überwachung der System-Performance und zur Fehlerbehebung sind, ist es wichtig, den Grad der Verschleierung mit ihrer Nützlichkeit für die Fehlerbehebung und Analyse in Einklang zu bringen. Eine wirksame Logverschleierung erfordert eine sorgfältige Abwägung der Kompromisse zwischen Sicherheit und Benutzerfreundlichkeit. 

Grok-Muster sind ein hilfreiches Mustervergleichstool zum Parsen von Daten aus unstrukturierten Logdateien, und Lua-Skripte bieten mehr Flexibilität und Kontrolle über die Logverarbeitungspipeline, erfordern jedoch möglicherweise mehr Entwicklungsaufwand. Die Wahl zwischen Grok-Mustern und Lua-Skripten hängt von den Anforderungen und der Reife der Logverarbeitungspipeline ab. 

So funktioniert Fluent Bit mit New Relic Infrastruktur-Monitoring

Andere Techniken wie Grok-Muster oder Lua-Skripte stehen zum Ändern von Logs zur Verfügung, aber die Verwendung von Fluent Bit im New Relic Infrastruktur-Monitoring ist ein einfacherer Ansatz zum Schutz sensibler Informationen in Logs.

Fluent Bit ist ein Open-Source-Daten-Collector für eine einheitliche Logging-Ebene, der zum Sammeln, Filtern und Weiterleiten von Log- und Metrikdaten an verschiedene Ziele dient. Als Teil des New Relic Infrastruktur-Monitoring wird Fluent Bit standardmäßig als clientseitiger Agent bereitgestellt. Das bedeutet, dass Sie erweiterte Konfigurationen vornehmen können, um Log- und Metrikdaten aus mehreren Quellen zu sammeln und sie zur Analyse an New Relic zu senden.  Das nächste Diagramm zeigt, wie das Log-Forwarding in New Relic funktioniert

Wenn der New Relic Infrastructure Agent ausgeführt wird, verarbeitet er Konfigurationsdateien im Verzeichnis logging.d. Als Ergebnis wird eine Fluent Bit-Laufzeit-Konfigurationsdatei mit den erforderlichen Abschnitten [INPUT], [FILTER] und [OUTPUT] generiert. Wenn Sie über die Option fluentbit eine externe Fluent Bit-Konfigurationsdatei bereitgestellt haben, deklariert der Agent auch @INCLUDE in der generierten Konfigurationsdatei.

Standardmäßig verwendet die Laufzeitdatei die Standardkonfigurationswerte von Fluent Bit, da sie keinen Abschnitt [SERVICE] definiert. Sie können die Konfigurationseinstellungen jedoch anpassen, indem Sie Ihren eigenen Abschnitt [SERVICE] in einer externen Fluent Bit-Konfigurationsdatei erstellen und ihn mit der Option fluentbit einschließen. Um die erweiterte Konfiguration in Fluent Bit zu verwenden, z. B. die Verschleierung von Logs, müssen Sie separate Konfigurations- und Parserdateien extern generieren und diese mit den Optionen fluentbit, config_file und parsers_file im Agent verwenden.

Hier ist ein Beispiel für die Verwendung der zusätzlichen Konfiguration von Fluent Bit zum Weiterleiten verschleierter Logs:

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

Die Option config_file bezieht sich auf den Pfad einer vorhandenen Fluent Bit-Konfigurationsdatei, die Sie zum Anpassen Ihrer Fluent Bit-Konfigurationseinstellungen verwenden können. Diese Datei enthält unter anderem die erforderlichen Abschnitte [INPUT], [FILTER] und [OUTPUT]

Die Option parsers_file bezieht sich auf den Pfad einer vorhandenen Fluent Bit-Parserdatei. Diese Datei definiert benutzerdefinierte Analyseregeln, die Fluent Bit verwenden kann, um Informationen aus eingehenden Logs zu extrahieren. Mithilfe von Parsern können Sie Roh-Logdaten in strukturierte Daten umwandeln und so die Analyse und das Verständnis erleichtern.

Wichtig: Um Logs für häufige Anwendungsfälle weiterzuleiten, stellt der Infrastructure Agent einfache Log-Forwarding-Konfigurationen in den YAML-Dateien des Verzeichnisses logging.d/ bereit. Diese Dateien werden automatisch in Fluent Bit-Konfigurationsdateien mit dem richtigen Format und den richtigen Konfigurationsstandards übersetzt.

Verschleiern Sie Ihre Logs mit Fluent Bit in New Relic

Um Fluent Bit in New Relic verwenden zu können, benötigen Sie zwei Dateien: die parsers_file zum Parsen von Dateien und die config_file zum Ändern von Datensätzen. Verwenden Sie erweiterte Einstellungen mit Fluent Bit in New Relic und befolgen Sie diese Schritte.

Schritt 1: Deaktivieren Sie die vorhandene New Relic Logkonfiguration

Bevor Sie Fluent Bit verwenden, müssen Sie alle vorhandenen New Relic Logkonfigurationen deaktivieren. Sie müssen die folgende Konfiguration in Ihrer YAML-Datei entweder entfernen oder auskommentieren. In diesem Beispiel ist die Konfiguration auskommentiert.

# logs:
#   - name: nginx
#     file: /var/log/nginx.log
#     attributes:
#       logtype: nginx
#       environment: workshop
#       engineer: yourname
#       country: yourcountry
#     pattern: 500|404|400

Schritt 2: Erstellen Sie die Datei fluentbit.yml

Erstellen Sie Ihre Datei oder benennen Sie sie in fluentbit.yml um und fügen Sie diesen Pfad ein:

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

Hier ist ein Beispiel für die Dateistruktur, die mit Fluent Bit im New Relic Infrastruktur-Monitoring verwendet werden soll.

Schritt 3: Erstellen Sie eine parsers_file

Erstellen Sie eine Datei mit dem Namen parsers.conf und fügen Sie Ihre Fluent Bit-Parser-Konfiguration hinzu. Sie können die Leistungsfähigkeit des Parser-Filter-Plugins in Fluent Bit nutzen, um Felder in Ereignisdatensätzen zu analysieren. Sie können spezifische Informationen aus Ihren Logs extrahieren und sie in strukturierte Daten umwandeln, die einfacher zu analysieren und zu verstehen sind. Sie können diese benutzerdefinierten Regeln anhand von Beispiel-Logdaten testen, um sicherzustellen, dass sie den beabsichtigten Datenmustern entsprechen, und die entsprechende Verschleierung anwenden.

Hier ist der von Fluent Bit bereitgestellte Standard-Beispielparser:

 

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

Hier ist ein NGINX-Parser in einem Beispiel für einen regulären Ausdruck (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

Mithilfe eines RegEx-Musters definiert dieser Code einen benutzerdefinierten Parser für NGINX-Zugriffslogs. Der reguläre Ausdruck erfasst Felder wie die IP-Adresse des Clients, den Zeitpunkt der Anfrage, die HTTP-Methode, den URL-Pfad, den Statuscode und den Benutzer-Agent. Die Direktive Time_Key gibt das Zeitfeld an und Time_Format definiert das Zeitformat in der Logzeile. Diese Konfiguration ermöglicht es Logverarbeitungstools, NGINX-Zugriffslogs zu analysieren und relevante Felder für die Analyse und Visualisierung zu extrahieren. Weitere Beispiele finden Sie in den Parsern von Fluent Bit, New Relic oder Open-Source-Communitys.

Im nächsten Beispiel verwenden Sie <source> zum Verschleiern und Entfernen von Log-Attributen.

Schritt 4: Erstellen Sie eine config_file

Erstellen Sie eine Datei namens fluent-bit.conf und fügen Sie eine Konfiguration modify hinzu, in der Sie eine der nützlichsten Funktionen von Fluent Bit verwenden, das Filter-Plugin „Modify“. Verwenden Sie dieses Plugin, um Datensätze mithilfe von Regeln und Bedingungen zu ändern. Sie können den Inhalt von Logdatensätzen basierend auf bestimmten Kriterien oder Anforderungen ändern. Dies erleichtert die Analyse und Behebung von Problemen in Ihrem System.

Hier ist das Standardbeispiel von 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

Hier ist eine Beispielkonfigurationsdatei, die Sie zum Verschleiern von Attributen in Ihren Logs verwenden können:

[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

Nachdem Sie die Konfigurationsdatei zum Verschleiern von Logs über Fluent Bit angewendet haben, sieht Ihr Endergebnis in etwa wie in diesem Beispiel aus.

Schritt 5: Starten Sie den Agent neu

Um Konfigurationen von Fluent Bit zu verwenden, starten Sie den New Relic Infrastructure Agent neu. Stellen Sie vor dem Neustart sicher, dass beide Dateien (fluent-bit.conf und parsers.conf) in der Datei fluentbit.yml korrekt referenziert werden, wie in Schritt 2 gezeigt.

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

Hier ist der Befehl zum Neustarten des New Relic Infrastructure Agent:

sudo systemctl restart newrelic-infra

Entfernen Sie vertrauliche Daten aus Logs

Im vorherigen Beispiel in Schritt 4 haben Sie gelernt, wie Sie ein Log mithilfe von Set verschleiern. Eine weitere Alternative ist die Verwendung der Operation Remove, eines leistungsstarken Tools zum Ändern von Logs. Verwenden Sie diese Operation, um unnötige oder sensible Daten einfach aus einem Datensatz zu entfernen. Löschen Sie ein Schlüsselwertpaar aus einem Datensatz, sofern vorhanden, mithilfe des Record Modifier-Plugins.

Hier ist eine Beispielkonfigurationsdatei zum Entfernen von Attributen in Ihren 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

Nachdem Sie die Konfigurationsdatei zum Entfernen von Logdaten mit Fluent Bit angewendet haben, sollte Ihr Endergebnis etwa wie in diesem Beispiel aussehen:

Wichtig: Der Neustart des New Relic Infrastructure Agent nach dem Anwenden einer neuen Konfiguration ist ein entscheidender Schritt, um sicherzustellen, dass die Änderungen wirksam werden. Dieser Schritt ist besonders wichtig, da er gewährleistet, dass die neuen Konfigurationseinstellungen geladen und vom Agent verwendet werden. Stellen Sie sicher, dass Sie den Agent nach dem Anwenden neuer Konfigurationen neu starten, wie in Schritt 5 gezeigt.

Fazit

Sie haben Beispiele für einfache Möglichkeiten zur Gewährleistung der Vertraulichkeit und Integrität von Logdaten mithilfe von Fluent Bit im New Relic Infrastruktur-Monitoring gesehen.

Insbesondere haben Sie gelernt, wie Sie vertrauliche Informationen in Logs schützen, indem Sie Daten mit Fluent Bit-Logkonfigurationen verschleiern. Nachdem beispielsweise ein Schlüsselwert <source> identifiziert wurde, können Sie ihn problemlos mit dem Filter-Plugin „Modify“ verschleiern oder Log-Attribute mit dem Filter-Plugin „Record Modifier“ entfernen.