Problem z konfiguracją MongoDB w zdokeryzowanej aplikacji Spring Data - konfiguracja autoryzacji w kontenerze dokerowym

0

Cześć,
Link do projektu: https://github.com/lolnewbie/lubienosql

Mam potrzebę postawienia pierwszych kroków w MongoDB. W tym celu stworzyłem zasób REST, który pozwala na dodawanie nowego zasobu oraz pobranie wszystkich z kolekcji, co było tak proste jak się spodziewałem. Aplikacja działa na domyślnej konfiguracji bez autoryzacji. Schody zaczynają się jak chcę dodać autoryzację i jest to zaskakująco trudne.

Co chcę zrobić?

  • aby baza była zabezpieczona użytkownikiem i hasłem
  • konfigurowana za pomocą najlepiej jednego property mongodb_uri (które docelowo może być secretem pobieranym np. z Vaulta), więc jest dla mnie ok, że login,hasło, kolekcja z użytkownikami i nazwa bazy będą w linku
  • siedze nad tym dobre 2.5h i mi to nie działa, pomyślałem więc, że się z Wami skonsultuje
  • początkowo chciałbym uruchomić aplikacje z domyślnym użytkownikiem dev/example jako rola root
  • docelowo chciałbym utworzyć użytkownika z konkretną rolą:
db.createUser(
{
	user: 'spring',
	pwd: 'password',
	roles: [
	{
		db: 'employees',
		role: 'readWrite'
	}
	]
});

Po uruchomieniu docker-compose nie widać błędu.

Aby aplikacja uruchomiła się należy zakomentować w database/dev/data/docker-compose.yml:

#    environment:
#      MONGO_INITDB_ROOT_USERNAME: dev
#      MONGO_INITDB_ROOT_PASSWORD: example
#      MONGO_INITDB_DATABASE: testdb
#    command: "mongod --auth"

W resources/application.yml zakomentować:

#spring:
#  data:
#  mongodb:
#    uri: mongodb://dev:example@localhost/employees?authSource=admin

Używam oficjalnego obrazu dockerowego, który domyślnie działa bez autoryzacji:
https://hub.docker.com/_/mongo/

Problem prawopodobnie leży po stronie dokera, ponieważ również nie mogę połączyć się przez RoboMongo ani klienta IntelliJ. Udaje się natomiast połączyć z konsolą i zobaczyć użytkownika w bazie (myślałem, że pomoże # command: "mongod --auth" ale to za mało):

$ mongo "mongodb://dev:example@localhost/employees?authSource=admin"
MongoDB shell version v4.4.3
connecting to: mongodb://localhost:27017/employees?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("29e32cf2-bb8c-4c0d-8a16-ee8d425a0cdb") }
MongoDB server version: 4.4.3
---
The server generated these startup warnings when booting: 
        2021-02-06T21:54:07.429+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
        2021-02-06T21:54:08.394+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).

        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.

        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> use admin
switched to db admin
> show users
{
	"_id" : "admin.dev",
	"userId" : UUID("c32bc778-7fb1-418b-a2b9-206eba39b0bd"),
	"user" : "dev",
	"db" : "admin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	],
	"mechanisms" : [
		"SCRAM-SHA-1",
		"SCRAM-SHA-256"
	]
}
> 

Czytam w konfiguracji obrazu czego własciwie mi brakuje.

Dzięki za pomoc.

0

Tu masz opisane krok po kroku jak włączyć autoryzacje: https://docs.mongodb.com/manual/tutorial/enable-authentication/

Niedawno przechodziłem przez to jak stawiałem sobie Mongo na wirtualce i poszło. Autoryzacje włączałem w pliku konfiguracyjnym, ale przez flagę tez się powinno dać. Spróbuj to skonfigurować sobie bez dockera, ogranicz liczbę potencjalnych problemów. Jeśli się okaże, że to docker to googluj docker+mongo+auth :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1