Základy MongoDB:Konfigurace řízení přístupu založeného na rolích (RBAC)
MongoDB, úložiště dokumentů s otevřeným zdrojovým kódem a nejoblíbenější databáze NoSQL na současném trhu, nabízí řadu pokročilých funkcí pro správu zabezpečení vašich nasazení MongoDB. V tomto výukovém příspěvku vám ukážeme, jak nastavit řízení přístupu založeného na rolích (RBAC) pro správu uživatelského přístupu napříč vašimi systémy MongoDB pro reIndex, mongodump a mongorestore.
Pokud jste správcem svých databází MongoDB, pravděpodobně jste obdrželi požadavky, abyste jednotlivému uživateli poskytli možnosti provádět určité akce. Bezpečnostní funkce MongoDB jsou nyní poměrně vyspělé a umožňují vám vytvářet a přiřazovat velmi podrobné řízení přístupu na základě rolí.
Projdeme příkladem udělení konkrétního privilegia uživateli provést akci reIndex, a to krok za krokem prostřednictvím jejího řešení. Než si ukážeme, jak provést tuto běžnou bezpečnostní akci, projdeme si přehled ovládání akcí na základě rolí MongoDB.
Jak MongoDB RBAC funguje
MongoDB vám umožňuje používat mechanismus RBAC k omezování přístupu k uživatelům prostřednictvím přiřazených „rolí“. Řízení přístupu RBAC není ve výchozím nastavení povoleno a musí být nakonfigurováno administrátorem vašeho týmu. Udělením přístupu uživateli ke konkrétnímu zdroji dáváte této roli nebo uživateli oprávnění k provádění akcí s daným zdrojem.
-
Zdroje
Databáze, kolekce, sada kolekcí nebo cluster.
-
Akce
Konkrétní operace, které může uživatel provádět se zdrojem (obvykle s databází).
MongoDB podporuje předdefinované role nazývané vestavěné role s akcemi seřazenými do logických skupin jako je read(-Only), readWrite, backup atd. MongoDB také podporuje vytváření uživatelsky definované role.
Autorizace MongoDB reIndex RBAC Privileges
Nyní, když máte nějaký kontext, pojďme se vrhnout na kroky autorizace uživatele oprávněním provést akci reIndex.
Jak vytvořit oprávnění pro reIndex prostřednictvím řízení přístupu založeného na rolích MongoDB #RBACClick To Tweet-
Určete akce oprávnění
Akce v kontextu MongoDB jsou známé jako Privilege Actions a vyčerpávající seznam těchto akcí najdete v dokumentaci MongoDB. Akce, která nás zajímá, je reIndex neboli oprávnění, které uživateli umožňuje spustit příkaz reIndex v dané databázi nebo kolekci. Protože příkaz reIndex může být drahý pro kolekce s velkým množstvím dat nebo velkým počtem indexů, je ve výchozím nastavení součástí administrativních rolí.
-
Udělit oprávnění roli
Jakmile určíme oprávnění, která potřebujeme, přejdeme k udělování těchto oprávnění roli. Můžete si také jednoduše vybrat vestavěnou roli, která již má oprávnění, ale doporučujeme vytvořit si vlastní uživatelsky definovanou roli namísto úpravy vestavěných rolí, protože je dobré se k nim vrátit.
-
Vytvořit novou roli definovanou uživatelem
Zde je to, co použijeme k vytvoření naší nové uživatelsky definované role:
> 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" } ] }
-
Udělte oprávnění nové roli
Nyní přiřadíme požadovaná oprávnění naší nově vytvořené roli definované uživatelem.
> 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" : [ .... ] }
-
-
Udělení role uživateli
Posledním krokem je jednoduše uživateli přiřadit tuto novou roli:
> 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" } ] }
Nezapomeňte provést tyto kroky na falešném uživateli, abyste mohli otestovat a potvrdit, jak nová oprávnění fungují, než udělíte a oznámíte příslušnému uživateli jejich oprávnění.
Další privilegia:mongodump &mongorestore
Nejprve jsme předvedli příklad reIndex, abychom ilustrovali jak udělování oprávnění rolím, tak udělování rolí uživatelům.
Běžnějším případem použití je poskytnutí oprávnění k provádění akcí zálohování a obnovy pomocí mongodump
a mongorestore
. To lze provést v jediném kroku prostřednictvím vestavěných rolí MongoDB a lze udělit oprávnění pro zálohování i obnovu, která uživatelům umožní spouštět mongodump
a mongorestore
, respektive.
Například zde je návod, jak bychom uživateli udělili oprávnění k zálohování a obnově jakékoli databáze. Upozorňujeme, že tyto role jsou dostupné pouze uživatelům v databázi administrátorů.
> 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" } ] }
Přidání oprávnění k zálohování a obnově jedné databáze nebo kolekce vyžaduje více práce. Pro mongodump
, musíte dodatečně udělit oprávnění najít v dané databázi, nicméně mongorestore
má složitější požadavky na oprávnění.
Zajímá vás zabezpečení MongoDB? Zde jsou hlavní příspěvky na témata zabezpečení MongoDB:
- Tři A zabezpečení MongoDB – autentizace, autorizace a audit
- Tři jednoduché kroky ke zlepšení zabezpečení vaší instalace MongoDB
- Konfigurace ověřování MongoDB-CR jako výchozí v MongoDB 3.x
- MongoDB SSL s certifikáty s vlastním podpisem v Node.js
- 10 tipů, jak zlepšit zabezpečení MongoDB