MongoDB Basics:Konfigurera rollbaserad åtkomstkontroll (RBAC)
MongoDB, en dokumentbutik med öppen källkod och den mest populära NoSQL-databasen på marknaden idag, erbjuder en mängd avancerade funktioner för att administrera säkerheten över dina MongoDB-distributioner. I det här handledningsinlägget kommer vi att visa dig hur du ställer in rollbaserad åtkomstkontroll (RBAC) för att hantera användaråtkomst över dina MongoDB-system för reIndex, mongodump och mongorestore.
Om du är administratör för dina MongoDB-databaser har du sannolikt fått förfrågningar om att ge en enskild användare möjligheter att utföra en vissa åtgärder. MongoDB:s säkerhetsfunktioner är ganska mogna nu och låter dig skapa och tilldela mycket detaljerad rollbaserad åtkomstkontroll.
Vi ska gå igenom ett exempel på att ge en användare den specifika behörigheten att utföra reIndex-åtgärden i en steg-för-steg-metode genom dess upplösning. Innan vi visar hur man utför den här vanliga säkerhetsåtgärden, låt oss gå igenom en översikt över MongoDB:s rollbaserade åtgärdskontroll.
Så fungerar MongoDB RBAC
MongoDB låter dig använda en RBAC-mekanism för att begränsa åtkomst till användare genom tilldelade "roller". RBAC-åtkomstkontroll är inte aktiverat som standard och måste konfigureras av en administratör i ditt team. Genom att ge en användare åtkomst till en specifik resurs auktoriserar du den rollen eller användaren att utföra åtgärder på den resursen.
-
Resurser
En databas, samling, uppsättning samlingar eller klustret.
-
Åtgärder
Specifika operationer som en användare kan utföra på en resurs (vanligtvis en databas).
MongoDB stöder fördefinierade roller som kallas inbyggda roller med åtgärder samlade i logiska grupper som read(-Only), readWrite, backup, etc. MongoDB stöder också skapandet av användardefinierade roller.
Auktorisera MongoDB reIndex RBAC-privilegier
Nu när du har lite kontext, låt oss gå in i stegen för att auktorisera en användare privilegiet att utföra reIndex-åtgärden.
Hur man skapar reIndex-privilegier genom MongoDB rollbaserad åtkomstkontroll #RBACClick To Tweet-
Bestämma privilegieåtgärderna
Åtgärder i MongoDB-sammanhang är kända som Privilege Actions och du kan hitta en uttömmande lista över dessa åtgärder i MongoDB:s dokumentation. Åtgärden vi är intresserade av är reIndex, eller privilegiet som tillåter en användare att utföra reIndex-kommandot på en given databas eller samling. Eftersom reIndex-kommandot kan vara dyrt för samlingar med stora mängder data eller ett stort antal index, är det en del av administrativa roller som standard.
-
Ge privilegier till en roll
När vi har bestämt vilka privilegier vi behöver, går vi vidare till att ge dessa privilegier till en roll. Du kan också helt enkelt välja en inbyggd roll som redan har privilegiet, men vi rekommenderar att du skapar din egen användardefinierade roll framför att ändra inbyggda roller eftersom de är goda standardinställningar att återgå till.
-
Skapa en ny användardefinierad roll
Här är vad vi kommer att använda för att skapa vår nya användardefinierade roll:
> 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" } ] }
-
Ge privilegier till den nya rollen
Nu ska vi tilldela våra önskade privilegier till vår nyskapade användardefinierade roll.
> 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" : [ .... ] }
-
-
Ge rollen till en användare
Det sista steget är att helt enkelt tilldela användaren den här nya rollen:
> 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" } ] }
Kom ihåg att utföra dessa steg på en dummyanvändare så att du kan testa och bekräfta att de nya privilegierna fungerar innan du beviljar och meddelar den relevanta användaren om deras auktorisering.
Ytterligare rättigheter:mongodump och mongorestore
Vi visade reIndex-exemplet först för att illustrera både beviljande av privilegier till roller och beviljande av roller till användare.
Ett vanligare användningsfall är att ge behörighet att utföra säkerhetskopierings- och återställningsåtgärder med mongodump
och mongorestore
. Detta kan göras i ett enda steg genom MongoDB:s inbyggda roller, och både säkerhetskopierings- och återställningsprivilegier kan beviljas för att göra det möjligt för användare att köra mongodump
och mongorestore
, respektive.
Till exempel, här är hur vi skulle ge en användare behörighet att säkerhetskopiera och återställa en databas. Observera att dessa roller endast är tillgängliga för användare i administratörsdatabasen.
> 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" } ] }
Att lägga till behörigheter för säkerhetskopiering och återställning på en enda databas eller samling kräver mer arbete. För mongodump
, måste du dessutom ge ett sökbehörighet för den givna databasen, dock mongorestore
har mer komplicerade behörighetskrav.
Intresserad av MongoDB-säkerhet? Här är de bästa inläggen om MongoDB-säkerhetsämnen:
- De tre A:en för MongoDB-säkerhet – autentisering, auktorisering och revision
- Tre enkla steg för att förbättra säkerheten för din MongoDB-installation
- Konfigurera MongoDB-CR-autentisering som standard på MongoDB 3.x
- MongoDB SSL med självsignerade certifikat i Node.js
- 10 tips för att förbättra din MongoDB-säkerhet