DataBase/mongodb

[mongodb] 외부 접속 허용하기와 인증 설정

Satisfaction 2022. 1. 31. 02:32

mongodb는 외부 접속이 기본적으로 막혀 있다.

 

외부에서 DB 접속 클라이언트를 사용해 접속하기 위해서는 조금 설정을 바꾸어 주어야 한다.

 

https://ianlondon.github.io/blog/mongodb-auth/

 

How to connect to your remote MongoDB server

I have MongoDB running on my Ubuntu server in Amazon EC2. Since there’s no simple all-in-one tutorial out there explaining how to set up user authentication for Mongo so that you can read and write to your MongoDB server from your laptop, I decided to wr

ianlondon.github.io

 

위 링크를 참고하여 설명한다.

 

모든 외부 아이피 허용을 위해 /etc/mongod.conf 단순 수정 

.......
net:
  port: 27017
  bindIp: 127.0.0.1
  #bindIp: 0.0.0.0
.......

 

위처럼 생긴 부분을 찾는다.

 

기본적으로는 bindIp: 127.0.0.1 로 되어있고 다음 라인은 주석처리 되어 있을 것이다.

 

여기에서 단순히 외부 접속을 허용하고 싶다면 

 

.......
net:
  port: 27017
  #bindIp: 127.0.0.1
  bindIp: 0.0.0.0
.......

 

위처럼 하면 되겠지만, 이건 모든 사람이 인증 절차 없이 접근 가능하게 하기 때문에 위험하다.

 

일단 인증을 추가한 다음 bindIp: 0.0.0.0을 활성화하는 것이 좋다.

 

계정 추가하기

mongo 커맨드를 이용해 mongo shell을 연다.

 

use cool_db

db.createUser({
    user: 'ian',
    pwd: 'secretPassword',
    roles: [{ role: 'readWrite', db:'cool_db'}]
})

use 커맨드로 대상 db를 선택하고,

db.createUser 메서드로 인증 사용자를 추가한다.

 

여기에서는 대상 db가 cool_db, 

사용자의 id가 ian,

사용자의 비밀번호가 secretPassword,

권한은 cool_db에 대해 읽기&쓰기 권한을 부여한다.

 

사용자가 성공적으로 생성되었다면 쉘을 빠져나온다.

 

인증을 사용하도록 /etc/mongod.conf 수정

security:
  authorization: 'enabled'

맨 아래에 다음을 추가한다.

 

그리고 나서 다시 net: 쪽으로 돌아가서

.......
net:
  port: 27017
  #bindIp: 127.0.0.1
  bindIp: 0.0.0.0
.......

외부 접속을 모두 허용한다.

 

이제 인증이 걸려있기 때문에 시도를 할 수는 있지만 인증 정보가 없으면 접근이 불가능하다.

 

이것도 불안하다면

 

.......
net:
  port: 27017
  bindIp: 127.0.0.1,123.456.789.123
  #bindIp: 0.0.0.0
.......

처럼 127.0.0.1옆에 컴마를 찍은 후 접근 허용할 아이피를 입력한다.

 

컴마 옆에 공백문자를 넣지 않도록 주의한다.

 

sudo service mongod restart

몽고를 재시작한다.

 

인증이 잘 먹는지 로컬에서 실험해보자.

mongo

정상적으로 완료되었다면 이제 mongo 명령어로는 db에 접근할 수 없다.

 

mongo -u [USER_ID] -p [PASSWORD] 127.0.0.1/[DB_NAME]

이렇게 하면 그 DB에 접근할 수 있게 된다.

 

외부에서도 동일한 방법으로 실행할 수 있다.

 

mongo -u [USER_ID] -p [PASSWORD] [YOUR_MONGO_SERVER_IP]/[DB_NAME]