MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Journalisation d'audit pour MongoDB

L'un des aspects de sécurité de la gestion d'une base de données est de comprendre qui a accédé à la base de données, quand et ce qu'il a fait. Bien que nous ayons déjà sécurisé le service MongoDB, nous voulons toujours savoir qui fait quoi et détecter s'il y a quelque chose de bizarre. Dans une enquête sur une violation de données, un journal d'audit nous permet d'analyser l'activité historique, de comprendre d'où vient l'attaquant et quelles opérations il a effectuées une fois dans la base de données.

Dans ce blog, nous passerons en revue la journalisation d'audit pour MongoDB et sa mise en œuvre.

Activation de la journalisation d'audit dans MongoDB

Pour activer la journalisation d'audit dans MongoDB, nous devons accéder au fichier de configuration mongod.conf, section auditLog :

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

Il existe 3 types de destinations de journaux, à savoir :fichier, syslog et console. Idéalement, nous pouvons envoyer le journal d'audit dans un fichier, au format pris en charge par JSON ou BSON. Nous pouvons également activer le journal d'audit lors du démarrage du service MongoDB comme indiqué ci-dessous :

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

Filtre d'audit dans MongoDB

Toujours dans la section auditLog, il y a un paramètre appelé filtre. Nous pouvons filtrer le modèle d'action que nous voulons enregistrer. Par exemple, si nous voulons enregistrer l'authentification dans une base de données spécifique, nous pouvons utiliser la commande ci-dessous :

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

Il suivra chaque authentification dans la base de données user_profile. Autre exemple :on veut tracer les actions; supprimer l'index, renommer la collection et supprimer la collection dans la base de données user_profile. La commande serait :

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

Nous pouvons également surveiller le processus d'audit pour les rôles spécifiques, nous aurions besoin de définir les rôles et la base de données dans le filtre :

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

Il enregistrera toutes les actions liées à l'utilisateur qui a les rôles readWrite dans la base de données user_profile.

Pour la journalisation d'audit des opérations d'écriture et de lecture, nous devons d'abord activer auditAuthorizationSuccess dans MongoDB. Nous pouvons exécuter la commande ci-dessous :

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

Ou une autre option consiste à modifier les éléments suivants dans le mongod.conf comme ci-dessous :

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

Percona Server pour MongoDB offre gratuitement les fonctionnalités de journalisation d'audit, tandis que dans MongoDB, il n'est disponible que dans Enterprise Edition. Veuillez noter que l'activation du paramètre aura un impact sur les performances de la base de données de votre MongoDB, en particulier dans l'environnement de production.

Quelle est la prochaine ?

Nous pouvons envoyer le journal d'audit MongoDB à un système de gestion des journaux, par exemple :la pile ELK (Elasticsearch, Logstash et Kibana) ou nous pouvons utiliser le système de gestion des journaux du fournisseur à des fins d'analyse.

Le moyen le plus simple consiste à utiliser l'utilitaire jq tools dans l'environnement Linux pour lire le journal au format JSON ou BSON.