Administration des Utilisateurs et des Permissions dans MongoDB

Vue d'Ensemble de la Gestion des Utilisateurs et des Rôles

La sécurisation de MongoDB repose sur une gestion rigoureuse des utilisateurs et de leurs privilèges. Comprendre comment créer, configurer et administrer les accès est fondamental pour toute implémentation. Les points clés incluent la définition d'une base de données d'authentification, la configuraton des rôles et l'activation de l'autorisation au niveau du serveur.

La Base de Données d'Authentification

Chaque utilisateur dans MongoDB est créé et lié à une base de données spécifique, appelée "base de données d'authentification". Lorsque vous tentez de vous connecter en tant qu'un utilisateur, vous devez spécifier cette base de données pour que l'authentification réussisse.

  • Les utilisateurs administrateurs globaux doivent être créés dans la base de données admin.
  • Pour les utilisateurs ayant des permissions sur une base de données spécifique (par exemple, app_data), cette base de données (app_data) sera souvent leur base d'authentification.
  • Si aucune base de données d'authentification n'est précisée lors d'une tentative de connexion, MongoDB utilise par défaut la base de données test, ce qui n'est pas recommandé en production.
  • Depuis MongoDB 3.6, le paramètre bindIp restreint par défaut les connexions aux adresses IP locales (127.0.0.1). Pour autoriser l'accès depuis d'autres hôtes, il est nécessaire de modifier cette configuration dans le fichier mongod.conf.

Activation du Mécanisme d'Autorisation

Pour que les rôles et les utilisateurs soient pris en compte par MongoDB, le mécanisme d'autorisation doit être activé dans le fichier de configuration du serveur. Modifiez le fichier /etc/mongod.conf (ou l'emplacement correspondant) comme suit :

security:
  authorization: enabled

Après avoir effectué cette modification, redémarrez le service MongoDB pour appliquer les changements :

sudo systemctl restart mongod

Création du Super-Administrateur

La première étape après l'activation de l'autorisation est de créer un utilisateur avec des privilèges de super-administrateur. Cet utilisateur doit être créé dans la base de données admin.

mongo

use admin
db.createUser(
   {
      user: "globalAdmin",
      pwd: "SecureAdminPassword123!",
      roles: [ { role: "root", db: "admin" } ]
   }
)

Le rôle root sur la base admin confère un contrôle total sur l'instance MongoDB.

Syntaxe Générale de Création d'Utilisateur

La commande db.createUser() est utilisée pour définir de nouveaux utilisateurs. Voici sa structure de base :

db.createUser(
   {
      user: "<nom_utilisateur>",
      pwd: "<mot_de_passe_en_clair>",
      roles: [
         { role: "<nom_du_role>", db: "<base_de_donnees_cible>" } | "<role_global>",
         ...
      ]
   }
)

  • user : Le nom d'utilisateur.
  • pwd : Le mot de passe de l'utilisateur.
  • roles : Un tableau d'objets ou de chaînes spécifiant les rôles et les bases de données associées.

Exemple de connexion avec spécification explicite de la base d'authentification :

mongo -u globalAdmin -p SecureAdminPassword123! --authenticationDatabase admin 192.168.1.100

Exemples de Gestion des Utilisateurs

Création d'un Administrateur de Base de Données

Pour un utilisateur ayant des droits d'administration sur une seule base de données (par exemple, production_app) :

mongo -u globalAdmin -p SecureAdminPassword123! --authenticationDatabase admin 192.168.1.100

use production_app
db.createUser(
   {
      user: "dbAppAdmin",
      pwd: "AppDBAdminPwd!",
      roles: [ { role: "dbAdmin", db: "production_app" } ]
   }
)

Test de connexion pour dbAppAdmin :

mongo -u dbAppAdmin -p AppDBAdminPwd! --authenticationDatabase production_app 192.168.1.100

Création d'un Utilisateur avec Accès en Lecture-Écriture

Un utilisateur standard avec des permissions de lecture et d'écriture sur production_app :

mongo -u globalAdmin -p SecureAdminPassword123! --authenticationDatabase admin 192.168.1.100

use production_app
db.createUser(
   {
      user: "appReadWriteUser",
      pwd: "AppUserRW_Password!",
      roles: [ { role: "readWrite", db: "production_app" } ]
   }
)

Test de connexion pour appReadWriteUser :

mongo -u appReadWriteUser -p AppUserRW_Password! --authenticationDatabase production_app 192.168.1.100

Création d'un Utilisateur avec des Rôles Multiples sur Diverses Bases

Un utilisateur peut se voir attribuer différents niveaux de permissions sur plusieurs bases de données. Par exemple, lecture-écriture sur production_app et uniquement lecture sur reporting_db :

mongo -u globalAdmin -p SecureAdminPassword123! --authenticationDatabase admin 192.168.1.100

use production_app // La base d'authentification principale pour cet utilisateur
db.createUser(
   {
      user: "mixedPermissionsUser",
      pwd: "MixedUserPwd!",
      roles: [
         { role: "readWrite", db: "production_app" },
         { role: "read", db: "reporting_db" }
      ]
   }
)

Consultation des Utilisateurs Existants

Pour afficher la liste de tous les utilisateurs et leurs rôles configurés dans le système MongoDB :

mongo -u globalAdmin -p SecureAdminPassword123! --authenticationDatabase admin 192.168.1.100

use admin
db.system.users.find().pretty()

Suppression d'un Utilisateur

Pour supprimer un utilisateur, connectez-vous avec un compte administrateur et assurez-vous d'être dans la base de données d'authentification de l'utilisateur à supprimer :

mongo -u globalAdmin -p SecureAdminPassword123! --authenticationDatabase admin 192.168.1.100

use production_app
db.dropUser("dbAppAdmin")

Étiquettes: MongoDB GestionUtilisateurs RolesMongoDB AuthentificationBDD SécuritéMongoDB

Publié le 15 octobre à 13h42