sql >> Databasteknik >  >> NoSQL >> MongoDB

Revisionsloggning för MongoDB

En av säkerhetsaspekterna med att hantera en databas är att förstå vem som fick åtkomst till databasen, när och vad de gjorde. Även om vi redan har säkrat MongoDB-tjänsten vill vi fortfarande veta vem som gör vad och upptäcka om det är något konstigt. I en undersökning av dataintrång låter en granskningslogg oss analysera historisk aktivitet, förstå från vilken slutpunkt angriparen kom från och vilka operationer de gjorde när de var inne i databasen.

I den här bloggen kommer vi att granska revisionsloggning för MongoDB och implementering.

Aktivera revisionsinloggning i MongoDB

För att aktivera granskningsloggning i MongoDB måste vi gå till mongod.confs konfigurationsfil, avsnitt auditLog:

auditLog:
   destination: file
   format: BSON
   path: /var/lib/mongodb/audit_mongodb.bson

Det finns tre typer av loggdestinationer, som är:fil, syslog och konsol. Helst kan vi skicka granskningsloggen till en fil, i format som stöds av JSON eller BSON. Vi kan också aktivera granskningsloggen under uppstart av MongoDB-tjänsten enligt nedan:

mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson

Revisionsfilter i MongoDB

Fortfarande i auditLog-sektionen finns det en parameter som heter filter. Vi kan filtrera handlingsmönstret som vi vill logga. Om vi ​​till exempel vill logga autentisering till en specifik databas kan vi använda kommandot nedan:

auditLog:
   destination: file
   format: BSON
   path: /var/lib/mongodb/audit_mongodb.bson
   filter: '{ atype: "authenticate", "param.db": "user_profile" }'

Den spårar varje autentisering till databasen user_profile. Ett annat exempel:vi vill spåra åtgärderna; släpp index, byt namn på samling och släpp samling i databasen user_profile. Kommandot skulle vara :

auditLog:
   destination: file
   format: BSON
   path: /var/lib/mongodb/audit_mongodb.bson
   filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }

Vi kan också övervaka revisionsprocessen för de specifika rollerna, vi skulle behöva definiera rollerna och databasen i filtret:

auditLog:
   destination: file
   format: BSON
   path: /var/lib/mongodb/audit_mongodb.bson
   filter: { roles: { role: "readWrite", db: "user_profile" } }

Den loggar alla åtgärder som är relaterade till användaren som har readWrite-rollerna i user_profile-databasen.

För granskningsloggning av skriv- och läsoperationer måste vi först aktivera auditAuthorizationSuccess i MongoDB. Vi kan köra under kommandot :

db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )

Eller ett annat alternativ är att ändra följande i mongod.conf enligt nedan:

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 ger revisionsloggningsfunktionerna gratis, medan den i MongoDB endast är tillgänglig i Enterprise Edition. Observera att aktivering av parametern kommer att påverka databasprestanda för din MongoDB, särskilt i produktionsmiljön.

Vad händer härnäst?

Vi kan skicka MongoDB-revisionsloggen till ett logghanteringssystem, till exempel:ELK (Elasticsearch, Logstash och Kibana) stack eller så kan vi använda logghanteringssystemet från leverantören för analysändamål.

Det enklaste sättet är att använda verktyget jq tools i Linux-miljön för att läsa loggen i JSON- eller BSON-format.


  1. Hantera journalföring i MongoDB

  2. Kunde inte ansluta till Redis vid 10.XX.XX.28:6379:Okänt fel - vid åtkomst från Spring Batch eller Windows-maskin

  3. Mongo DB 4.0 Transaktioner med Mongoose &NodeJs, Express

  4. Hur kör man mongo-kommandon genom skalskript?