Podstawy MongoDB:konfigurowanie kontroli dostępu opartej na rolach (RBAC)
MongoDB, magazyn dokumentów typu open source i najpopularniejsza obecnie baza danych NoSQL na rynku, oferuje szereg zaawansowanych funkcji do administrowania zabezpieczeniami we wdrożeniach MongoDB. W tym poście samouczka pokażemy, jak skonfigurować kontrolę dostępu opartą na rolach (RBAC), aby zarządzać dostępem użytkowników w systemach MongoDB dla funkcji reIndex, mongodump i mongorestore.
Jeśli jesteś administratorem baz danych MongoDB, prawdopodobnie otrzymałeś prośby o udostępnienie indywidualnemu użytkownikowi możliwości wykonania określonych działań. Funkcje bezpieczeństwa MongoDB są teraz dość dojrzałe i umożliwiają tworzenie i przypisywanie bardzo szczegółowej kontroli dostępu opartej na rolach.
Przejdziemy krok po kroku przez przykład przyznawania użytkownikowi konkretnego uprawnienia do wykonywania czynności ponownej indeksacji w podejściu krok po kroku przez jego rozwiązanie. Zanim zademonstrujemy, jak wykonać tę typową czynność związaną z bezpieczeństwem, przejrzyjmy omówienie kontroli działań opartej na rolach MongoDB.
Jak działa MongoDB RBAC
MongoDB umożliwia korzystanie z mechanizmu RBAC do ograniczania dostępu do użytkowników poprzez przypisane „role”. Kontrola dostępu RBAC nie jest domyślnie włączona i musi zostać skonfigurowana przez administratora w Twoim zespole. Przyznając użytkownikowi dostęp do określonego zasobu, upoważniasz tę rolę lub użytkownika do wykonywania działań na tym zasobie.
-
Zasoby
Baza danych, kolekcja, zestaw kolekcji lub klaster.
-
Działania
Określone operacje, które użytkownik może wykonać na zasobie (zwykle na bazie danych).
MongoDB obsługuje wstępnie zdefiniowane role zwane rolami wbudowanymi z akcjami pogrupowanymi w logiczne grupy, takie jak read(-Only), readWrite, backup itp. MongoDB obsługuje również tworzenie role zdefiniowane przez użytkownika.
Autoryzacja ponownego indeksowania uprawnień RBAC MongoDB
Teraz, gdy masz już pewien kontekst, przejdźmy do etapów autoryzacji użytkownika uprawnienia do wykonywania czynności ponownego indeksowania.
Jak utworzyć uprawnienia ponownego indeksowania za pomocą kontroli dostępu MongoDB opartej na rolach #RBACClick To Tweet-
Określ działania związane z uprawnieniami
Działania w kontekście MongoDB są znane jako akcje uprzywilejowane, a ich pełną listę można znaleźć w dokumentacji MongoDB. Interesującą nas akcją jest reIndex, czyli uprawnienie umożliwiające użytkownikowi wykonanie polecenia reIndex w danej bazie danych lub kolekcji. Ponieważ polecenie reIndex może być kosztowne w przypadku kolekcji z dużą ilością danych lub dużą liczbą indeksów, domyślnie jest ono częścią ról administracyjnych.
-
Przyznaj uprawnienia do roli
Po ustaleniu potrzebnych uprawnień przechodzimy do nadawania tych uprawnień roli. Możesz też po prostu wybrać wbudowaną rolę, która ma już uprawnienia, ale zalecamy utworzenie własnej zdefiniowanej przez użytkownika roli zamiast modyfikowania wbudowanych ról, ponieważ warto do nich wracać.
-
Utwórz nową rolę zdefiniowaną przez użytkownika
Oto, czego użyjemy do stworzenia naszej nowej roli zdefiniowanej przez użytkownika:
> 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" } ] }
-
Przyznaj uprawnienia nowej roli
Teraz przypiszemy nasze pożądane uprawnienia do naszej nowo utworzonej roli zdefiniowanej przez użytkownika.
> 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" : [ .... ] }
-
-
Przyznaj rolę użytkownikowi
Ostatnim krokiem jest po prostu przypisanie użytkownikowi tej nowej 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" } ] }
Pamiętaj, aby wykonać te czynności na fikcyjnym użytkowniku, aby móc przetestować i potwierdzić działanie nowych uprawnień przed przyznaniem i powiadomieniem odpowiedniego użytkownika o ich autoryzacji.
Dodatkowe uprawnienia:mongodump i mongorestore
Najpierw zademonstrowaliśmy przykład reIndex, aby zilustrować zarówno nadawanie uprawnień do ról, jak i nadawanie ról użytkownikom.
Częstszym przypadkiem użycia jest zapewnienie autoryzacji do wykonywania operacji tworzenia kopii zapasowych i przywracania przy użyciu mongodump
i mongorestore
. Można to zrobić w jednym kroku przez wbudowane role MongoDB, a uprawnienia do tworzenia kopii zapasowych i przywracania można przyznać, aby umożliwić użytkownikom uruchamianie mongodump
i mongorestore
, odpowiednio.
Na przykład, oto jak przyznać użytkownikowi uprawnienia do tworzenia kopii zapasowych i przywracania dowolnej bazy danych. Pamiętaj, że te role są dostępne tylko dla użytkowników w bazie danych administratora.
> 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" } ] }
Dodanie uprawnień do tworzenia kopii zapasowych i przywracania w pojedynczej bazie danych lub kolekcji wymaga więcej pracy. Dla mongodump
, musisz dodatkowo przyznać uprawnienia do wyszukiwania w tej danej bazie danych, jednak mongorestore
ma bardziej skomplikowane wymagania dotyczące uprawnień.
Zainteresowany bezpieczeństwem MongoDB? Oto najlepsze posty na tematy związane z bezpieczeństwem MongoDB:
- Trzy A bezpieczeństwa MongoDB – uwierzytelnianie, autoryzacja i audyt
- Trzy proste kroki w celu poprawy bezpieczeństwa instalacji MongoDB
- Konfigurowanie uwierzytelniania MongoDB-CR jako domyślnego w MongoDB 3.x
- MongoDB SSL z samopodpisanymi certyfikatami w Node.js
- 10 wskazówek, jak poprawić bezpieczeństwo MongoDB