Einer der Sicherheitsaspekte bei der Verwaltung einer Datenbank besteht darin, zu verstehen, wer wann auf die Datenbank zugegriffen und was getan hat. Obwohl wir den MongoDB-Dienst bereits gesichert haben, möchten wir immer noch wissen, wer was tut, und feststellen, ob etwas seltsam ist. Bei einer Untersuchung von Datenschutzverletzungen ermöglicht uns ein Audit-Protokoll, historische Aktivitäten zu analysieren, zu verstehen, von welchem Endpunkt der Angreifer kam und welche Operationen er durchgeführt hat, sobald er sich in der Datenbank befand.
In diesem Blog werden wir die Audit-Protokollierung für MongoDB und die Implementierung besprechen.
Audit-Protokollierung in MongoDB aktivieren
Um die Audit-Protokollierung in MongoDB zu aktivieren, müssen wir zur Konfigurationsdatei mongod.conf gehen, Abschnitt auditLog:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
Es gibt drei Arten von Protokollzielen:Datei, Syslog und Konsole. Idealerweise können wir das Überwachungsprotokoll in eine Datei im JSON- oder BSON-unterstützten Format senden. Wir können das Prüfprotokoll auch während des Starts des MongoDB-Dienstes aktivieren, wie unten gezeigt:
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
Audit-Filter in MongoDB
Noch im auditLog-Abschnitt gibt es einen Parameter namens filter. Wir können das Aktionsmuster filtern, das wir protokollieren möchten. Wenn wir beispielsweise die Authentifizierung bei einer bestimmten Datenbank protokollieren möchten, können wir den folgenden Befehl verwenden:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
Es wird jede Authentifizierung in der user_profile-Datenbank nachverfolgen. Ein weiteres Beispiel:Wir möchten die Aktionen verfolgen; Index löschen, Sammlung umbenennen und Sammlung in der user_profile-Datenbank löschen. Der Befehl wäre :
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
Wir können auch den Audit-Prozess für die spezifischen Rollen überwachen, wir müssten die Rollen und die Datenbank im Filter definieren:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
Es wird jede Aktion protokollieren, die sich auf den Benutzer bezieht, der die readWrite-Rollen in der user_profile-Datenbank hat.
Für die Audit-Protokollierung von Schreib- und Lesevorgängen müssen wir zuerst auditAuthorizationSuccess in MongoDB aktivieren. Wir können den folgenden Befehl ausführen:
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
Oder eine andere Möglichkeit besteht darin, Folgendes in der mongod.conf wie folgt zu ändern:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
setParameter: { auditAuthorizationSuccess: true }
Percona Server für MongoDB bietet die Überwachungsprotokollierungsfunktionen kostenlos, während sie in MongoDB nur in der Enterprise Edition verfügbar sind. Bitte beachten Sie, dass die Aktivierung des Parameters die Datenbankleistung Ihrer MongoDB beeinträchtigt, insbesondere in der Produktionsumgebung.
Was kommt als nächstes?
Wir können das MongoDB-Audit-Log an ein Logging-Management-System senden, Beispiel:ELK (Elasticsearch, Logstash und Kibana) Stack, oder wir können das Log-Management-System des Anbieters zu Analysezwecken verwenden.
Am einfachsten ist es, das Dienstprogramm jq tools in der Linux-Umgebung zu verwenden, um das Protokoll im JSON- oder BSON-Format zu lesen.