Access
 sql >> Base de Dados >  >> RDS >> Access

Noções básicas do MongoDB:configurando o controle de acesso baseado em função (RBAC)

Noções básicas do MongoDB:configurando o controle de acesso baseado em função (RBAC)

O MongoDB, um armazenamento de documentos de código aberto e o banco de dados NoSQL mais popular do mercado atualmente, oferece vários recursos avançados para administrar a segurança em suas implantações do MongoDB. Nesta postagem de tutorial, mostraremos como configurar o controle de acesso baseado em função (RBAC) para gerenciar o acesso do usuário em seus sistemas MongoDB para reIndex, mongodump e mongorestore.

Se você for o administrador de seus bancos de dados MongoDB, provavelmente já recebeu solicitações para fornecer a um usuário individual os recursos para realizar determinadas ações. Os recursos de segurança do MongoDB estão bastante maduros agora e permitem que você crie e atribua controle de acesso baseado em função muito granular.

Vamos mostrar um exemplo de como conceder a um usuário o privilégio específico de realizar a ação reIndex em uma abordagem passo a passo por meio de sua resolução. Antes de demonstrarmos como realizar essa ação de segurança comum, vamos ver uma visão geral do controle de ação baseado em função do MongoDB.

Como o MongoDB RBAC funciona

O MongoDB permite que você use um mecanismo RBAC para restringir o acesso a usuários por meio de "funções" atribuídas. O controle de acesso RBAC não é habilitado por padrão e deve ser configurado por um administrador em sua equipe. Ao conceder a um usuário acesso a um recurso específico, você autoriza esse papel ou usuário a realizar ações nesse recurso.

  • Recursos

    Um banco de dados, coleção, conjunto de coleções ou o cluster.

  • Ações

    Operações específicas que um usuário pode realizar em um recurso (geralmente um banco de dados).

O MongoDB oferece suporte a funções predefinidas chamadas funções integradas com ações agrupadas em grupos lógicos como read(-Only), readWrite, backup etc. O MongoDB também oferece suporte à criação de funções definidas pelo usuário.

Autorizando privilégios do MongoDB reIndex RBAC

Agora que você tem algum contexto, vamos avançar para as etapas de autorização de um usuário com o privilégio de realizar a ação reIndex.
Como criar privilégios de reIndex por meio do controle de acesso baseado em função do MongoDB #RBACClick To Tweet

  1. Determinar as ações de privilégio

    As ações no contexto do MongoDB são conhecidas como Privilege Actions e você pode encontrar uma lista completa dessas ações na documentação do MongoDB. A ação em que estamos interessados ​​é reIndex, ou o privilégio que permite que um usuário execute o comando reIndex em um determinado banco de dados ou coleção. Como o comando reIndex pode ser caro para coleções com grandes quantidades de dados ou um grande número de índices, ele faz parte das funções administrativas por padrão.

  2. Conceder privilégios a uma função

    Depois de determinarmos os privilégios de que precisamos, passamos a conceder esses privilégios a uma função. Você também pode simplesmente escolher uma função integrada que já tenha o privilégio, mas recomendamos criar sua própria função definida pelo usuário em vez de modificar funções integradas, pois elas são bons padrões para retornar.

    1. Criar uma nova função definida pelo usuário

      Aqui está o que usaremos para criar nossa nova função definida pelo usuário:

      > 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. Conceder privilégios à nova função

      Agora vamos atribuir nossos privilégios desejados à nossa função definida pelo usuário recém-criada.

      > 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. Conceder a função a um usuário

    A última etapa é simplesmente atribuir ao usuário esta nova função:

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

    Lembre-se de executar essas etapas em um usuário fictício para que você possa testar e confirmar se os novos privilégios funcionam antes de conceder e notificar o usuário relevante da autorização.



Privilégios adicionais:mongodump e mongorestore

Demonstramos o exemplo reIndex primeiro para ilustrar a concessão de privilégios a funções e a concessão de funções a usuários.

Um caso de uso mais comum é fornecer autorização para realizar ações de backup e restauração usando mongodump e mongorestore . Isso pode ser feito em uma única etapa por meio das funções integradas do MongoDB, e privilégios de backup e restauração podem ser concedidos para permitir que os usuários executem o mongodump e mongorestore , respectivamente.
Como configurar o backup do MongoDB e restaurar privilégios #RBAC com mongodump e mongorestoreClick To Tweet

Por exemplo, veja como concederíamos a um usuário permissões para fazer backup e restaurar qualquer banco de dados. Observe que essas funções estão disponíveis apenas para usuários no banco de dados do administrador.

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

Adicionar permissões para backup e restauração em um único banco de dados ou coleção exige mais trabalho. Para mongodump , você também deve conceder um privilégio de localização nesse banco de dados, no entanto, mongorestore tem requisitos de privilégios mais complicados.

Interessado na segurança do MongoDB? Aqui estão as principais postagens sobre tópicos de segurança do MongoDB:

  • Os três A's da segurança do MongoDB – autenticação, autorização e auditoria
  • Três etapas simples para melhorar a segurança de sua instalação do MongoDB
  • Configurando a autenticação MongoDB-CR como padrão no MongoDB 3.x
  • MongoDB SSL com certificados autoassinados em Node.js
  • 10 dicas para melhorar a segurança do MongoDB