Access
 sql >> Base de données >  >> RDS >> Access

Principes de base de MongoDB :configuration du contrôle d'accès basé sur les rôles (RBAC)

Principes de base de MongoDB :configuration du contrôle d'accès basé sur les rôles (RBAC)

MongoDB, un magasin de documents open source et la base de données NoSQL la plus populaire sur le marché aujourd'hui, offre une variété de fonctionnalités avancées pour administrer la sécurité de vos déploiements MongoDB. Dans ce tutoriel, nous allons vous montrer comment configurer le contrôle d'accès basé sur les rôles (RBAC) pour gérer l'accès des utilisateurs sur vos systèmes MongoDB pour reIndex, mongodump et mongorestore.

Si vous êtes l'administrateur de vos bases de données MongoDB, vous avez probablement reçu des demandes pour fournir à un utilisateur individuel les capacités d'effectuer une ou plusieurs actions. Les fonctionnalités de sécurité de MongoDB sont maintenant assez matures et vous permettent de créer et d'attribuer un contrôle d'accès très précis basé sur les rôles.

Nous allons passer en revue un exemple d'octroi à un utilisateur du privilège spécifique d'effectuer l'action de réindexation dans une approche étape par étape tout au long de sa résolution. Avant de montrer comment effectuer cette action de sécurité courante, passons en revue le contrôle des actions basé sur les rôles de MongoDB.

Fonctionnement du RBAC MongoDB

MongoDB vous permet d'utiliser un mécanisme RBAC pour restreindre l'accès aux utilisateurs via des "rôles" attribués. Le contrôle d'accès RBAC n'est pas activé par défaut et doit être configuré par un administrateur de votre équipe. En accordant à un utilisateur l'accès à une ressource spécifique, vous autorisez ce rôle ou cet utilisateur à effectuer des actions sur cette ressource.

  • Ressources

    Une base de données, une collection, un ensemble de collections ou le cluster.

  • Actions

    Opérations spécifiques qu'un utilisateur peut effectuer sur une ressource (généralement une base de données).

MongoDB prend en charge les rôles prédéfinis appelés rôles intégrés avec des actions regroupées dans des groupes logiques tels que lecture(-Only), readWrite, sauvegarde, etc. MongoDB prend également en charge la création de rôles définis par l'utilisateur.

Autoriser les privilèges RBAC de réindexation de MongoDB

Maintenant que vous disposez d'un certain contexte, passons aux étapes permettant d'autoriser un utilisateur à effectuer l'action de réindexation.

Comment créer des privilèges de réindexation via le contrôle d'accès basé sur les rôles MongoDB #RBACClick To Tweet
  1. Déterminer les actions de privilège

    Les actions dans le contexte de MongoDB sont connues sous le nom d'actions de privilège et vous pouvez trouver une liste exhaustive de ces actions dans la documentation de MongoDB. L'action qui nous intéresse est reIndex, ou le privilège qui permet à un utilisateur d'exécuter la commande reIndex sur une base de données ou une collection donnée. Étant donné que la commande reIndex peut être coûteuse pour les collections contenant de grandes quantités de données ou un grand nombre d'index, elle fait partie des rôles administratifs par défaut.

  2. Accorder des privilèges à un rôle

    Une fois que nous avons déterminé les privilèges dont nous avons besoin, nous passons à l'octroi de ces privilèges à un rôle. Vous pouvez également choisir simplement un rôle intégré qui dispose déjà du privilège, mais nous vous recommandons de créer votre propre rôle défini par l'utilisateur plutôt que de modifier les rôles intégrés, car ce sont de bons paramètres par défaut.

    1. Créer un nouveau rôle défini par l'utilisateur

      Voici ce que nous allons utiliser pour créer notre nouveau rôle défini par l'utilisateur :

      > use test
      switched to db test
      > db.createRole({role: "reIndexing", privileges: [], roles: ["readWrite"]}) // Create a new role out of the default readWrite rule.
      { "role" : "reIndexing", "privileges" : [ ], "roles" : [ "readWrite" ] }
      > db.getRole("reIndexing")
      {
      	"role" : "reIndexing",
      	"db" : "test",
      	"isBuiltin" : false,
      	"roles" : [
      		{
      			"role" : "readWrite",
      			"db" : "test"
      		}
      	],
      	"inheritedRoles" : [
      		{
      			"role" : "readWrite",
      			"db" : "test"
      		}
      	]
      }
    2. Accorder des privilèges au nouveau rôle

      Nous allons maintenant attribuer les privilèges souhaités à notre nouveau rôle défini par l'utilisateur.

      > db.grantPrivilegesToRole("reIndexing", [ { resource: { db : "test", collection: "" }, actions: ["reIndex"] } ])
      > db.getRole("reIndexing", {showPrivileges: true})
      {
      	"role" : "reIndexing",
      	"db" : "test",
      	"isBuiltin" : false,
      	"roles" : [
      		{
      			"role" : "readWrite",
      			"db" : "test"
      		}
      	],
      	"inheritedRoles" : [
      		{
      			"role" : "readWrite",
      			"db" : "test"
      		}
      	],
      	"privileges" : [
      		{
      			"resource" : {
      				"db" : "test",
      				"collection" : ""
      			},
      			"actions" : [
      				"reIndex"
      			]
      		}
      	],
      	"inheritedPrivileges" : [
      ....
      	]
      }
      
      
  3. Attribuer le rôle à un utilisateur

    La dernière étape consiste simplement à attribuer ce nouveau rôle à l'utilisateur :

    > db.getUser("indexUser")
    {
    	"_id" : "test.indexUser",
    	"user" : "indexUser",
    	"db" : "test",
    	"roles" : [
    		{
    			"role" : "readWrite",
    			"db" : "test"
    		}
    	]
    }
    > db.grantRolesToUser("indexUser", ["reIndexing"])
    > db.getUser("indexUser")
    {
    	"_id" : "test.indexUser",
    	"user" : "indexUser",
    	"db" : "test",
    	"roles" : [
    		{
    			"role" : "reIndexing",
    			"db" : "test"
    		},
    		{
    			"role" : "readWrite",
    			"db" : "test"
    		}
    	]
    }
    

    N'oubliez pas d'effectuer ces étapes sur un utilisateur fictif afin de pouvoir tester et confirmer que les nouveaux privilèges fonctionnent avant d'accorder et de notifier l'utilisateur concerné de son autorisation.

Privilèges supplémentaires :mongodump et mongorestore

Nous avons d'abord démontré l'exemple de reIndex pour illustrer à la fois l'octroi de privilèges aux rôles et l'octroi de rôles aux utilisateurs.

Un cas d'utilisation plus courant consiste à fournir l'autorisation d'effectuer des actions de sauvegarde et de restauration à l'aide de mongodump et mongorestore . Cela peut être fait en une seule étape via les rôles intégrés de MongoDB, et des privilèges de sauvegarde et de restauration peuvent être accordés pour permettre aux utilisateurs d'exécuter mongodump et mongorestore , respectivement.

Comment configurer la sauvegarde MongoDB et restaurer les privilèges #RBAC avec mongodump et mongorestoreClick To Tweet

Par exemple, voici comment nous accorderions à un utilisateur des autorisations pour sauvegarder et restaurer n'importe quelle base de données. Notez que ces rôles ne sont disponibles que pour les utilisateurs de la base de données d'administration.

> db.grantRolesToUser("backupUser", ["backup", "restore"])
> db.getUser("backupUser")
{
	"_id" : "admin.backupUser",
	"user" : "backupUser",
	"db" : "admin",
	"roles" : [
		{
			"role" : "restore",
			"db" : "admin"
		},
		{
			"role" : "backup",
			"db" : "admin"
		},
		{
			"role" : "readWrite",
			"db" : "admin"
		}
	]
}

L'ajout d'autorisations de sauvegarde et de restauration sur une seule base de données ou collection nécessite plus de travail. Pour mongodump , vous devez en outre accorder un privilège de recherche sur cette base de données donnée, cependant, mongorestore a des exigences de privilèges plus compliquées.

Intéressé par la sécurité MongoDB ? Voici les meilleurs articles sur les sujets de sécurité MongoDB :

  • Les trois A de la sécurité MongoDB – Authentification, autorisation et audit
  • Trois étapes simples pour améliorer la sécurité de votre installation MongoDB
  • Configuration de l'authentification MongoDB-CR par défaut sur MongoDB 3.x
  • SSL MongoDB avec certificats auto-signés dans Node.js
  • 10 conseils pour améliorer votre sécurité MongoDB