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

[처음부터 시작하는 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 계정 생성과 외부 접속에 관한 글을 마치겠습니다.


4 Comments
댓글쓰기 폼
Prev 1 2 3 4 5 6 7 8 9 Next