MongoDB

MongoDB의 보안 설정과 계정

ChoriDev 2024. 3. 16. 10:35

들어가면서

저번 글에서 MongoDB 설치하고 실행하는 것까지 다루었는데요. MongoDB를 처음 설치하면 보안이 설정되어 있지 않아서 문제가 생길 수 있습니다 🥺 이러한 문제를 예방하기 위해 이번에는 MongoDB의 보안 설정과 계정에 대해 알아보겠습니다!


admin 계정 생성

먼저 DB의 모든 권한을 가지는 admin 계정을 만들어보겠습니다.
MongoDB를 실행해주세요.

$ sudo systemctl start mongod

그리고 MongoDB 쉘을 시작합니다.

$ mongosh

쉘에 들어왔으면 admin DB로 이동합니다.

> use admin
switched to db admin

모든 권한을 가진 계정을 생성합니다.

> db.createUser({user: "계정명", pwd: "비밀번호", roles: ["root"]})
{ ok: 1 }

계정을 만들었으면 MongoDB 쉘에서 나가고 MongoDB를 종료합니다.

> exit
$ sudo systemctl stop mongod

보안 설정

이제 인증과 관련된 설정을 할 건데요. /etc/mongo.conf 파일의 내용을 변경해야 합니다. /etc/mongo.conf 파일을 편집기로 열어주세요.

$ sudo vi /etc/mongod.conf

파일 내용 중 보안과 관련된 부분을 찾아주세요. 아래와 같이 주석 처리가 되어 있습니다.

...
#security:
...

이 부분을 다음과 같이 수정하고 :wq로 저장 후 파일을 닫아주세요.

...
security:
  authorization: enabled
...

보안 설정이 끝났으니 다시 MongoDB를 시작합니다.

$ sudo systemctl start mongod

그리고 이제 생성한 계정으로 MongoDB 쉘에 접속하면 됩니다.

$ mongosh -u 계정명 -p 비밀번호

또는 비밀번호를 따로 입력할 수도 있습니다.

$ mongosh -u 계정명 -p
Enter password:

일반 계정 생성

모든 데이터베이스 작업을 admin 권한으로 하면 위험하니 특정 데이터베이스에서 사용할 일반 계정을 만들어봅시다.

먼저 새로 만들 계정이 사용할 데이터베이스가 생성되어 있어야 합니다. 만약 없다면 use 데이터베이스_이름을 입력합니다. use 데이터베이스_이름을 썼을 때 해당하는 데이터베이스가 없다면 새로 만들고 이동합니다. 이미 존재하는 데이터베이스라면 해당 데이터베이스로 이동합니다.

> use 데이터베이스_이름
switched to db 데이터베이스_이름

MongoDB의 계정은 하나의 데이터베이스에 종속되어 생성됩니다. 그렇기 때문에 A라는 데이터베이스에 tester1이라는 사용자가 있어도 B라는 데이터베이스에도 teseter1라는 사용자가 있을 수 있는 것입니다. A에 있는 tester1B에 있는 tester1은 다른 사용자로 취급됩니다. 계정을 새로 만들었을 때 사용 중이던 데이터베이스에 계정이 종속됩니다. admin 계정은 admin DB에 저장된 것이죠.

이렇게 데이터베이스마다 계정이 따로 생기면 계정 관리가 어려워질 수 있기 때문에 admin DB에서 모든 계정을 한 번에 관리하도록 하겠습니다.

admin 계정을 만들었던 것처럼 admin DB로 이동하여 db.createUser()를 사용하면 됩니다. 단, admin 계정과 달리 어느 데이터베이스에 대해 어떤 권한을 부여할 것인지 적절히 제한하여 만들어야 합니다. 여기서는 권한을 dbOwner 수준으로 설정하겠습니다. 그리고 db데이터베이스_이름으로 적어주어 해당 데이터베이스에 대한 권한만 부여했습니다.

> use admin
switched to db admin
> db.createUser({user: "일반_계정명", pwd: "비밀번호", roles: [ { role: "dbOwner", db: "데이터베이스_이름" } ] })
{ ok: 1 }

계정 삭제

계정을 생성했다면 삭제도 할 줄 알아야겠죠! 계정을 삭제하는 방법은 다음과 같습니다.

> use admin
switched to db admin
> db.dropUser("일반_계정명")

마무리하며

간단하게 보안 설정과 계정 생성 및 삭제 방법에 대해 알아보았습니다. MongoDB의 계정과 관련하여 계정을 생성하는 또 다른 방법, 권한과 역할의 종류 등등 더 많은 내용이 있는데요. 자세한 내용은 앞으로 계속 포스팅을 하면서 다뤄보겠습니다!

오늘도 긴 글 읽어주셔서 고맙습니다 😊