Основи на MongoDB:Конфигуриране на контрол на достъп, базиран на роли (RBAC)
MongoDB, хранилище за документи с отворен код и най-популярната NoSQL база данни на пазара днес, предлага разнообразие от разширени функции за администриране на сигурността върху вашите внедрявания на MongoDB. В този урок ще ви покажем как да настроите контрол на достъп, базиран на роли (RBAC), за да управлявате потребителския достъп във вашите MongoDB системи за reIndex, mongodump и mongorestore.
Ако сте администратор на вашите бази данни MongoDB, вероятно сте получили заявки за предоставяне на индивидуален потребител с възможностите за извършване на определени действия. Функциите за сигурност на MongoDB вече са доста зрели и ви позволяват да създавате и присвоявате много детайлен контрол на достъпа, базиран на роли.
Ще разгледаме пример за предоставяне на потребител на конкретната привилегия за извършване на действието за повторно индексиране в подход стъпка по стъпка чрез неговото разрешаване. Преди да демонстрираме как да изпълним това често срещано действие за сигурност, нека да преминем през общ преглед на базирания на роли контрол на действията на MongoDB.
Как работи MongoDB RBAC
MongoDB ви позволява да използвате механизъм RBAC, за да ограничите достъпа до потребители чрез назначени „роли“. RBAC контролът за достъп не е активиран по подразбиране и трябва да бъде конфигуриран от администратор във вашия екип. Предоставяйки на потребител достъп до конкретен ресурс, вие упълномощавате тази роля или потребител да извършва действия върху този ресурс.
-
Ресурси
База данни, колекция, набор от колекции или клъстер.
-
Действия
Конкретни операции, които потребителят може да извърши върху ресурс (обикновено база данни).
MongoDB поддържа предварително дефинирани роли, наречени вградени роли с действия, събрани в логически групи като read(-Only), readWrite, backup и т.н. MongoDB също поддържа създаването на потребителски дефинирани роли.
Упълномощаване на MongoDB reIndex RBAC привилегии
Сега, когато имате някакъв контекст, нека преминем към стъпките за упълномощаване на потребител на привилегията да изпълнява действието reIndex.
Как да създадете привилегии за reIndex чрез базиран на роли контрол на достъпа на MongoDB #RBACClick To Tweet-
Определете действията за привилегия
Действията в контекста на MongoDB са известни като Privilege Actions и можете да намерите изчерпателен списък с тези действия в документацията на MongoDB. Действието, което ни интересува, е reIndex или привилегията, която позволява на потребителя да изпълни командата reIndex в дадена база данни или колекция. Тъй като командата reIndex може да бъде скъпа за колекции с големи количества данни или голям брой индекси, тя е част от административни роли по подразбиране.
-
Предоставяне на привилегии на роля
След като определим привилегиите, от които се нуждаем, преминаваме към предоставянето на тези привилегии на дадена роля. Можете също така просто да изберете вградена роля, която вече има привилегията, но ние препоръчваме да създадете своя собствена дефинирана от потребителя роля вместо промяната на вградените роли, тъй като те са добри настройки по подразбиране, към които да се върнете.
-
Създаване на нова дефинирана от потребителя роля
Ето какво ще използваме, за да създадем нашата нова дефинирана от потребителя роля:
> 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" } ] }
-
Дайте привилегии на новата роля
Сега ще присвоим желаните от нас привилегии на нашата новосъздадена дефинирана от потребителя роля.
> 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" : [ .... ] }
-
-
Предоставяне на ролята на потребител
Последната стъпка е просто да присвоите на потребителя тази нова роля:
> 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" } ] }
Не забравяйте да изпълните тези стъпки на фиктивен потребител, за да можете да тествате и потвърдите, че новите привилегии работят, преди да предоставите и уведомите съответния потребител за тяхното упълномощаване.
Допълнителни привилегии:mongodump &mongorestore
Първо демонстрирахме примера за reIndex, за да илюстрираме както предоставянето на привилегии на роли, така и предоставянето на роли на потребителите.
По-често използван случай е предоставянето на оторизация за извършване на действия за архивиране и възстановяване с помощта на mongodump
и mongorestore
. Това може да се направи с една стъпка чрез вградените роли на MongoDB и могат да бъдат предоставени привилегии както за архивиране, така и за възстановяване, за да се даде възможност на потребителите да изпълняват mongodump
и mongorestore
, съответно.
Например, ето как бихме предоставили на потребител разрешения за архивиране и възстановяване на всяка база данни. Обърнете внимание, че тези роли са достъпни само за потребители в администраторската база данни.
> 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" } ] }
Добавянето на разрешения за архивиране и възстановяване на единична база данни или колекция изисква повече работа. За mongodump
, трябва допълнително да предоставите привилегия за намиране на тази база данни, но mongorestore
има по-сложни изисквания за привилегии.
Интересувате ли се от сигурността на MongoDB? Ето най-добрите публикации по темите за сигурност на MongoDB:
- Трите А на сигурността на MongoDB – удостоверяване, упълномощаване и одит
- Три лесни стъпки за подобряване на сигурността на вашата инсталация на MongoDB
- Конфигуриране на удостоверяване на MongoDB-CR по подразбиране на MongoDB 3.x
- MongoDB SSL със самоподписани сертификати в Node.js
- 10 съвета за подобряване на сигурността на MongoDB