sql >> Base de Datos >  >> RDS >> Access

Conceptos básicos de MongoDB:configuración del control de acceso basado en roles (RBAC)

Conceptos básicos de MongoDB:configuración del control de acceso basado en roles (RBAC)

MongoDB, un almacén de documentos de código abierto y la base de datos NoSQL más popular del mercado actual, ofrece una variedad de funciones avanzadas para administrar la seguridad de sus implementaciones de MongoDB. En esta publicación de tutorial, le mostraremos cómo configurar el control de acceso basado en roles (RBAC) para administrar el acceso de los usuarios en sus sistemas MongoDB para reIndex, mongodump y mongorestore.

Si es el administrador de sus bases de datos de MongoDB, es probable que haya recibido solicitudes para proporcionar a un usuario individual las capacidades para realizar determinadas acciones. Las características de seguridad de MongoDB están bastante maduras ahora y le permiten crear y asignar un control de acceso muy granular basado en roles.

Vamos a mostrar un ejemplo de cómo otorgar a un usuario el privilegio específico de realizar la acción reindexar en un enfoque paso a paso hasta su resolución. Antes de demostrar cómo realizar esta acción de seguridad común, repasemos una descripción general del control de acciones basado en roles de MongoDB.

Cómo funciona MongoDB RBAC

MongoDB le permite usar un mecanismo RBAC para restringir el acceso a los usuarios a través de "roles" asignados. El control de acceso RBAC no está habilitado de forma predeterminada y debe ser configurado por un administrador de su equipo. Al otorgar acceso a un usuario a un recurso específico, autoriza a ese rol o usuario a realizar acciones en ese recurso.

  • Recursos

    Una base de datos, una colección, un conjunto de colecciones o el clúster.

  • Acciones

    Operaciones específicas que un usuario puede realizar en un recurso (generalmente una base de datos).

MongoDB admite roles predefinidos llamados roles integrados con acciones recopiladas en grupos lógicos como read(-Only), readWrite, backup, etc. MongoDB también admite la creación de roles definidos por el usuario.

Autorización de los privilegios de RBAC de reindexación de MongoDB

Ahora que tiene algo de contexto, pasemos a los pasos para autorizar a un usuario el privilegio de realizar la acción reindexar.

Cómo crear privilegios de reIndex a través del control de acceso basado en roles de MongoDB #RBACClick To Tweet
  1. Determinar las acciones de privilegio

    Las acciones en el contexto de MongoDB se conocen como acciones de privilegio y puede encontrar una lista exhaustiva de estas acciones en la documentación de MongoDB. La acción que nos interesa es reIndex, o el privilegio que permite a un usuario ejecutar el comando reIndex en una base de datos o colección determinada. Dado que el comando reIndex puede ser costoso para colecciones con grandes cantidades de datos o una gran cantidad de índices, es parte de las funciones administrativas de forma predeterminada.

  2. Otorgar privilegios a un rol

    Una vez que hayamos determinado los privilegios que necesitamos, pasamos a otorgar esos privilegios a un rol. También puede simplemente elegir una función integrada que ya tenga el privilegio, pero le recomendamos que cree su propia función definida por el usuario en lugar de modificar las funciones integradas, ya que son buenos valores predeterminados para volver.

    1. Crear un nuevo rol definido por el usuario

      Esto es lo que usaremos para crear nuestro nuevo rol definido por el usuario:

      > 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. Otorgar privilegios al nuevo rol

      Ahora vamos a asignar nuestros privilegios deseados a nuestro nuevo rol definido por el usuario.

      > 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. Otorgar el rol a un usuario

    El último paso es simplemente asignar al usuario esta nueva función:

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

    Recuerde realizar estos pasos en un usuario ficticio para que pueda probar y confirmar que los nuevos privilegios funcionan antes de otorgar y notificar al usuario pertinente de su autorización.

Privilegios adicionales:mongodump y mongorestore

Primero demostramos el ejemplo de reIndex para ilustrar tanto la concesión de privilegios a funciones como la concesión de funciones a usuarios.

Un caso de uso más común es proporcionar autorización para realizar acciones de copia de seguridad y restauración mediante mongodump y mongorestore . Esto se puede hacer en un solo paso a través de las funciones integradas de MongoDB, y se pueden otorgar privilegios de copia de seguridad y restauración para permitir que los usuarios ejecuten mongodump y mongorestore , respectivamente.

Cómo configurar la copia de seguridad de MongoDB y restaurar los privilegios de #RBAC con mongodump y mongorestoreClick To Tweet

Por ejemplo, así es como otorgaríamos permisos a un usuario para respaldar y restaurar cualquier base de datos. Tenga en cuenta que estos roles solo están disponibles para los usuarios en la base de datos de administración.

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

Agregar permisos para realizar copias de seguridad y restaurar en una sola base de datos o colección requiere más trabajo. Para mongodump , debe conceder además un privilegio de búsqueda en esa base de datos dada, sin embargo, mongorestore tiene requisitos de privilegios más complicados.

¿Interesado en la seguridad de MongoDB? Estas son las principales publicaciones sobre temas de seguridad de MongoDB:

  • Las tres A de la seguridad de MongoDB:autenticación, autorización y auditoría
  • Tres sencillos pasos para mejorar la seguridad de su instalación de MongoDB
  • Configuración de la autenticación MongoDB-CR como predeterminada en MongoDB 3.x
  • MongoDB SSL con certificados autofirmados en Node.js
  • 10 consejos para mejorar la seguridad de MongoDB