Access
 sql >> Database >  >> RDS >> Access

Nozioni di base su MongoDB:configurazione del controllo di accesso basato sul ruolo (RBAC)

Nozioni di base su MongoDB:configurazione del controllo di accesso basato sui ruoli (RBAC)

MongoDB, un archivio di documenti open source e il database NoSQL più popolare oggi sul mercato, offre una varietà di funzionalità avanzate per amministrare la sicurezza delle tue distribuzioni MongoDB. In questo post del tutorial, ti mostreremo come impostare il controllo degli accessi basato sui ruoli (RBAC) per gestire l'accesso degli utenti nei tuoi sistemi MongoDB per reIndex, mongodump e mongorestore.

Se sei l'amministratore dei tuoi database MongoDB, probabilmente hai ricevuto richieste per fornire a un singolo utente le capacità per eseguire determinate azioni. Le funzionalità di sicurezza di MongoDB ora sono abbastanza mature e ti consentono di creare e assegnare un controllo dell'accesso basato su ruoli molto granulare.

Viene illustrato un esempio di concessione a un utente del privilegio specifico di eseguire l'azione reindicizza con un approccio graduale attraverso la sua risoluzione. Prima di mostrare come eseguire questa azione di sicurezza comune, esaminiamo una panoramica del controllo delle azioni basato sui ruoli di MongoDB.

Come funziona MongoDB RBAC

MongoDB ti consente di utilizzare un meccanismo RBAC per limitare l'accesso a utenti tramite "ruoli" assegnati. Il controllo dell'accesso RBAC non è abilitato per impostazione predefinita e deve essere configurato da un amministratore del tuo team. Concedendo a un utente l'accesso a una risorsa specifica, autorizzi quel ruolo o utente a eseguire azioni su quella risorsa.

  • Risorse

    Un database, una raccolta, un insieme di raccolte o il cluster.

  • Azioni

    Operazioni specifiche che un utente può eseguire su una risorsa (di solito un database).

MongoDB supporta ruoli predefiniti chiamati ruoli integrati con azioni raccolte in gruppi logici come read(-only), readWrite, backup, ecc. MongoDB supporta anche la creazione di ruoli definiti dall'utente.

Autorizzazione dei privilegi RBAC di reindicizzazione di MongoDB

Ora che hai un po' di contesto, entriamo nei passaggi per autorizzare un utente al privilegio di eseguire l'azione reindicizza.

Come creare privilegi di reindicizzazione tramite il controllo degli accessi basato sui ruoli MongoDB #RBACClick To Tweet
  1. Determina le azioni privilegiate

    Le azioni nel contesto di MongoDB sono note come azioni privilegiate e puoi trovare un elenco completo di queste azioni nella documentazione di MongoDB. L'azione che ci interessa è reIndex, o privilegio che consente a un utente di eseguire il comando reIndex su un determinato database o raccolta. Poiché il comando reindex può essere costoso per raccolte con grandi quantità di dati o un numero elevato di indici, fa parte dei ruoli amministrativi per impostazione predefinita.

  2. Concedi privilegi a un ruolo

    Una volta determinati i privilegi di cui abbiamo bisogno, passiamo a concedere quei privilegi a un ruolo. Puoi anche semplicemente scegliere un ruolo integrato che abbia già il privilegio, ma ti consigliamo di creare il tuo ruolo definito dall'utente anziché modificare i ruoli predefiniti, poiché sono buone impostazioni predefinite a cui tornare.

    1. Crea un nuovo ruolo definito dall'utente

      Ecco cosa useremo per creare il nostro nuovo ruolo definito dall'utente:

      > 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. Concedi privilegi al nuovo ruolo

      Ora assegneremo i privilegi desiderati al nostro ruolo definito dall'utente appena creato.

      > 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. Concedi il ruolo a un utente

    L'ultimo passaggio consiste semplicemente nell'assegnare all'utente questo nuovo ruolo:

    > 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"
    		}
    	]
    }
    

    Ricordati di eseguire questi passaggi su un utente fittizio in modo da poter testare e confermare il funzionamento dei nuovi privilegi prima di concedere e notificare all'utente pertinente la propria autorizzazione.

Privilegi aggiuntivi:mongodump e mongorestore

Abbiamo dimostrato prima l'esempio reIndex per illustrare sia la concessione di privilegi ai ruoli sia la concessione di ruoli agli utenti.

Un caso d'uso più comune è fornire l'autorizzazione per eseguire azioni di backup e ripristino utilizzando mongodump e mongorestore . Questa operazione può essere eseguita in un unico passaggio attraverso i ruoli integrati di MongoDB e possono essere concessi privilegi di backup e ripristino per consentire agli utenti di eseguire mongodump e mongorestore , rispettivamente.

Come impostare il backup di MongoDB e ripristinare i privilegi #RBAC con mongodump e mongorestoreClick To Tweet

Ad esempio, ecco come concedere a un utente le autorizzazioni per il backup e il ripristino di qualsiasi database. Tieni presente che questi ruoli sono disponibili solo per gli utenti nel database dell'amministratore.

> 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'aggiunta di autorizzazioni per il backup e il ripristino su un singolo database o raccolta richiede più lavoro. Per mongodump , devi inoltre concedere un privilegio di ricerca su quel determinato database, tuttavia, mongorestore ha requisiti di privilegi più complicati.

Interessato alla sicurezza di MongoDB? Ecco i post principali sugli argomenti di sicurezza di MongoDB:

  • Le tre A della sicurezza di MongoDB:autenticazione, autorizzazione e controllo
  • Tre semplici passaggi per migliorare la sicurezza della tua installazione di MongoDB
  • Configurazione dell'autenticazione MongoDB-CR come predefinita su MongoDB 3.x
  • MongoDB SSL con certificati autofirmati in Node.js
  • 10 suggerimenti per migliorare la sicurezza di MongoDB