어서와, 개발은 처음이지?

[처음부터 시작하는 EC2] mongodb 계정 생성, 외부 접속 본문

EC2_Ubuntu_Devops

[처음부터 시작하는 EC2] mongodb 계정 생성, 외부 접속

오지고지리고알파고포켓몬고 2019. 2. 4. 18:09
반응형



지난 글에 이어, mongodb 계정 생성, 외부 접속 방법에 대해 알아보겠습니다.



0. mongodb 실행


지난 글에서 언급한 내용으로, mongodb를 실행하기 위해서는 데몬(mongod)이 실행되어 있어야 합니다.

아래 명령을 사용해서 데몬을 실행하고 mongo shell을 실행합니다.

> sudo service mongod start
> mongo



1. mongodb root 계정 생성


우선 root 계정을 생성하기위해 admin 데이터 베이스를 사용합니다.

> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB

> use admin;
switched to db admin

> db;
admin


다음으로, createUser 명령어를 사용하여 root 계정을 생성합니다.

> db.createUser({user: "아이디", pwd: "비밀번호", roles:["root"]});
> exit;

user키의 value에 root 아이디, pwd키의 value에 비밀번호를 입력하고 엔터를 치면 root 권한 계정이 생성됩니다.


roles는 계정이 갖는 역할/권한(읽기, 쓰기 등)을 의미하며, roles의 종류는 공식 문서에서 확인할 수 있습니다.



2. mongodb config 변경


외부 접속을 위한 ip bind, 인증된 사용자만 사용할 수 있도록 security 설정을 변경하기 위해 mongodb config 파일을 수정해야합니다.


ubuntu의 경우 /etc/mongod.conf 혹은 /etc/mongodb.conf에 위치하고 있습니다.

설치 방법에 따라 mongodb service가 참조하고 있는 config 파일이 다를 수 있으니 유의하시기 바랍니다.


편집기를 사용하여 mongod.conf 파일을 엽니다.

> sudo vi /etc/mongod.conf


여러가지 항목 중에 network interfaces와 security 항목을 아래와 같이 수정합니다.

# mongod.conf
# ...

net:
  port: 27017
  bindIp: 0.0.0.0

# ...

security:
  authorization: 'enabled'

# ...


수정을 완료했다면 저장 후 mongod service를 재실행합니다.

> sudo service mongod restart




3. root 계정으로 접속


다시 mongo shell에 접속해서 명령을 입력하면 아까는 볼 수 없었던 에러 메세지가 출력됩니다.

> mongo
> show databases;
2019-02-04T08:00:30.164+0000 E QUERY    [js] Error: listDatabases failed:{
	"ok" : 0,
	"errmsg" : "command listDatabases requires authentication",
	"code" : 13,
	"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:124:1
shellHelper.show@src/mongo/shell/utils.js:876:19
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1

> exit;

인증되지 않은 사용자는 명령을 수행할 수 없음을 확인할 수 있습니다.


이제부터는 mongo shell을 이용할 때 계정 정보를 함께 입력 해야합니다.


-u와 -p 옵션을 사용하여 1번에서 생성한 root 계정으로 접속합니다.

> mongo -u 아이디 -p 비밀번호
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB



4. database, user 생성


이제 서비스에 사용할 database를 설정하고, 해당 database에 읽기 쓰기 권한을 갖는 user를 생성하겠습니다.


우선 임의로 명명한 chatbot_service라는 database를 생성 합니다.

> use chatbot_service;
> db;
chatbot_service


다음은 createUser명령으로 해당 database에 user를 생성합니다.

> db.createUser({user: "developer", pwd:"developer", roles:["readWrite"]});
Successfully added user: { "user" : "developer", "roles" : [ "readWrite" ] }

developer / developer라는 임의의 계정을 readWrite 권한으로 생성했습니다.




5. ec2 인바운드 정책 수정


외부에서 ec2 인스턴스의 특정 포트에 접속하려면 인바운드 정책을 수정 해줘야 합니다. 



aws 콘솔 페이지 -> 보안그룹 -> 인바운드에서 27017번 포트를 추가 해줍니다.



6. 외부 접속


이제 제 로컬 pc에서 developer 계정으로 chatbot_service database에 접속 해보겠습니다.(로컬 pc에도 mongo shell이 설치 되어있어야 합니다.)

> mongo -u developer -p developer public_ip:27017/chatbot_service > db; chatbot_service

자신의 ec2 public ip 혹은 public dns를 통해 접속할 수 있습니다.

슬래쉬(/) 뒤에는 원하는 db명을 적어줍니다.


문제없이 설정이 완료되었다면 아래 이미지처럼 정상 동작하는 모습을 볼 수 있습니다.

7. Robo Mongo(Robo 3T) 툴을 사용한 외부 접속(선택)


저는 Robo 3T라는 툴을 사용하여 mongodb database를 관리하고 있습니다.

Robo 3T는는 sql developer처럼 데이터를 visualize 해주고 query를 사용할 수 있도록 도와줍니다.


이 곳에서 다운로드 받을 수 있으며, 툴에 대해 자세한 설명은 이 글에서 다루지 않겠습니다.


Robo 3T에서 connect를 생성하고 아래 이미지처럼 ec2 public 주소, 접속 정보를 입력합니다.

저장을 완료 한 후, 접속하면 아래 화면처럼 chatbot_service database의 모습을 볼 수 있습니다.



이제 툴을 사용해서 콜랙션 생성, 도큐먼트 입력 등을 수행할 수 있습니다.


또한 admin databse에 root 계정으로 접속 시 모든 database에 명령을 수행할 수 있으니 참고하시기 바랍니다.



이상으로 mongodb 계정 생성과 외부 접속에 관한 글을 마치겠습니다.


Comments