MongoDB-Grundlagen:Konfigurieren der rollenbasierten Zugriffssteuerung (RBAC)
MongoDB, ein Open-Source-Dokumentenspeicher und die derzeit beliebteste NoSQL-Datenbank auf dem Markt, bietet eine Vielzahl erweiterter Funktionen zur Verwaltung der Sicherheit Ihrer MongoDB-Bereitstellungen. In diesem Tutorial-Beitrag zeigen wir Ihnen, wie Sie eine rollenbasierte Zugriffskontrolle (RBAC) einrichten, um den Benutzerzugriff auf Ihre MongoDB-Systeme für reIndex, mongodump und mongorestore zu verwalten.
Wenn Sie der Administrator Ihrer MongoDB-Datenbanken sind, haben Sie wahrscheinlich Anfragen erhalten, einem einzelnen Benutzer die Möglichkeit zu geben, bestimmte Aktionen auszuführen. Die Sicherheitsfunktionen von MongoDB sind jetzt ziemlich ausgereift und ermöglichen es Ihnen, eine sehr detaillierte rollenbasierte Zugriffskontrolle zu erstellen und zuzuweisen.
Wir werden ein Beispiel durchgehen, in dem wir einem Nutzer das spezifische Privileg gewähren, die Aktion „reIndex“ in einem schrittweisen Ansatz bis zur Auflösung durchzuführen. Bevor wir demonstrieren, wie diese allgemeine Sicherheitsaktion ausgeführt wird, lassen Sie uns einen Überblick über die rollenbasierte Aktionssteuerung von MongoDB geben.
Wie MongoDB RBAC funktioniert
MongoDB ermöglicht Ihnen die Verwendung eines RBAC-Mechanismus, um den Zugriff auf Benutzer durch zugewiesene „Rollen“ einzuschränken. Die RBAC-Zugriffssteuerung ist standardmäßig nicht aktiviert und muss von einem Administrator in Ihrem Team konfiguriert werden. Indem Sie einem Nutzer Zugriff auf eine bestimmte Ressource gewähren, autorisieren Sie diese Rolle oder diesen Nutzer, Aktionen für diese Ressource auszuführen.
-
Ressourcen
Eine Datenbank, eine Sammlung, ein Satz von Sammlungen oder der Cluster.
-
Aktionen
Spezifische Operationen, die ein Benutzer auf einer Ressource (normalerweise einer Datenbank) ausführen kann.
MongoDB unterstützt vordefinierte Rollen, die als integrierte Rollen bezeichnet werden, mit Aktionen, die in logischen Gruppen zusammengefasst sind, wie z. B. Read(-Only), ReadWrite, Backup usw. MongoDB unterstützt auch die Erstellung von benutzerdefinierte Rollen.
Autorisieren von MongoDB-Reindex-RBAC-Berechtigungen
Da Sie nun etwas Kontext haben, lassen Sie uns mit den Schritten zur Autorisierung eines Benutzers zur Durchführung der reIndex-Aktion beginnen.
So erstellen Sie reIndex-Berechtigungen über die rollenbasierte Zugriffskontrolle von MongoDB #RBACCClick To Tweet-
Bestimmen Sie die Berechtigungsaktionen
Aktionen im MongoDB-Kontext werden als Berechtigungsaktionen bezeichnet und Sie finden eine vollständige Liste dieser Aktionen in der MongoDB-Dokumentation. Die Aktion, an der wir interessiert sind, ist reIndex oder die Berechtigung, die es einem Benutzer ermöglicht, den reIndex-Befehl für eine bestimmte Datenbank oder Sammlung auszuführen. Da der reIndex-Befehl für Sammlungen mit großen Datenmengen oder einer großen Anzahl von Indizes teuer sein kann, ist er standardmäßig Teil der administrativen Rollen.
-
Gewähren Sie einer Rolle Privilegien
Sobald wir die erforderlichen Berechtigungen ermittelt haben, fahren wir damit fort, diese Berechtigungen einer Rolle zuzuweisen. Sie können auch einfach eine integrierte Rolle auswählen, die bereits über die Berechtigung verfügt. Wir empfehlen jedoch, Ihre eigene benutzerdefinierte Rolle zu erstellen, anstatt integrierte Rollen zu ändern, da sie gute Standardwerte sind, zu denen Sie zurückkehren können.
-
Neue benutzerdefinierte Rolle erstellen
Hier ist, was wir verwenden werden, um unsere neue benutzerdefinierte Rolle zu erstellen:
> 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" } ] }
-
Geben Sie der neuen Rolle Berechtigungen
Jetzt werden wir unserer neu erstellten benutzerdefinierten Rolle unsere gewünschten Berechtigungen zuweisen.
> 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" : [ .... ] }
-
-
Geben Sie einem Benutzer die Rolle
Der letzte Schritt besteht darin, dem Nutzer einfach diese neue Rolle zuzuweisen:
> 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" } ] }
Denken Sie daran, diese Schritte an einem Dummy-Nutzer durchzuführen, damit Sie die neuen Berechtigungen testen und bestätigen können, bevor Sie dem relevanten Nutzer seine Autorisierung erteilen und darüber informieren.
Zusätzliche Berechtigungen:mongodump &mongorestore
Wir haben zuerst das reIndex-Beispiel demonstriert, um sowohl das Gewähren von Berechtigungen für Rollen als auch das Gewähren von Rollen für Benutzer zu veranschaulichen.
Ein häufigerer Anwendungsfall ist die Autorisierung zum Durchführen von Sicherungs- und Wiederherstellungsaktionen mit mongodump
und mongorestore
. Dies kann in einem einzigen Schritt über die integrierten Rollen von MongoDB erfolgen, und es können sowohl Sicherungs- als auch Wiederherstellungsberechtigungen gewährt werden, damit Benutzer mongodump
ausführen können und mongorestore
.
So würden wir beispielsweise einem Benutzer Berechtigungen zum Sichern und Wiederherstellen einer beliebigen Datenbank erteilen. Beachten Sie, dass diese Rollen nur Benutzern in der Admin-Datenbank zur Verfügung stehen.
> 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" } ] }
Das Hinzufügen von Berechtigungen zum Sichern und Wiederherstellen einer einzelnen Datenbank oder Sammlung erfordert mehr Arbeit. Für mongodump
, müssen Sie dieser bestimmten Datenbank jedoch zusätzlich ein Suchrecht erteilen, mongorestore
hat kompliziertere Berechtigungsanforderungen.
Interessiert an MongoDB-Sicherheit? Hier sind die Top-Beiträge zu MongoDB-Sicherheitsthemen:
- Die drei A’s der MongoDB-Sicherheit – Authentifizierung, Autorisierung und Prüfung
- Drei einfache Schritte zur Verbesserung der Sicherheit Ihrer MongoDB-Installation
- Konfigurieren der MongoDB-CR-Authentifizierung als Standard auf MongoDB 3.x
- MongoDB SSL mit selbstsignierten Zertifikaten in Node.js
- 10 Tipps zur Verbesserung Ihrer MongoDB-Sicherheit