ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MongoDB 3.2.20 Authentication Setting
    설치&설정 관련 2018. 10. 5. 16:56
    728x90

    MongoDB 3.2.20 Authentication Setting

    MongoDB 3.2.20 버젼으로 진행된다. 설치와 cluster가 완료 되었다는 가정하에 진행이 된다. 또한 ElasticSearch와 MongoDB는 mongo-connect를 이용하여 연결 되어 있다.

    고객사의 요청으로 MongoDB 접근에 대한 권한을 설정해야 하는 일이 생겼다.

    간단하게 설정으로 해결되는 문제로 생각했는데 삽질이 컸다.

    현재 MongoDB의 구조는 다음과 같다.

    MongoDB Architecute

    총 5대의 서버로 구성되어 있으며, 2대는 데이터를 적재하는 MongoDB, 1대는 Primary/Slave의 투표를 하는 ARBITER, 클러스터의 메타 데이터 및 구성 설정을 저장하는 config 서버, 마지막으로 클라이언트 응용 프로그램과 공유 된 클러스터 사이의 인터페이스를 제공하는 쿼리 라우터 역할 하는 mongos로 구성된다.

    인증을 위한 KeyFile 생성

    MongoDB는 다음 2가지 인증 매커니즘을 지원 합니다.

    본 글에서는 간단하게 사용이 가능한 SCRMA을 이용합니다

    키 생성 명령어

    openssl rand -base64 756 > <path-to-keyfile>
    chmod 400 <path-to-keyfile>
    

    생성된 키를 각 설정 파일에 설정 해야 한다.

    security:
      keyFile: <path-to-keyfile>
    replication:
      replSetName: <replicaSetName>
    net:
       bindIp: localhost,<ip address>
    

    Server-A(20001), Server-B(20002), Server-C(20003), Server-D(20004)의 설정파일에 security: keyFile: 이 모두 설정되어야 한다. Server-F(10001)는 실행시 option으로 처리 한다.

    재기동 옵션 A~D, F

    /usr/bin/mongod --config /etc/mongod_repl1.conf
    /usr/bin/mongod --config /etc/mongod_repl2.conf
    /usr/bin/mongod --config /etc/mongod_repl3_arbiter.conf
    /usr/bin/mongod --config /etc/mongod_repl4_config.conf --configsvr
    /usr/bin/mongos --configdb localhost:20004 --port 10001 --fork --logpath /var/lib/mongodb/mongod_mongos.log --chunkSize 1 --keyFile /etc/m_key
    

    MongoDB 재기동 & 계정 생성

    설정이 완료된 이후에 MongoDB를 재기동 한다.

    재기동이 완료 되면 계정을 생성 한다.

    여기서는 단순하게 계정을 생성 하도록 한다. 계정 생성은 mongos와 repl1에 모두 생성 해야 한다.

    1. mongos 설정 ~~~ $> mongo –port 10001

    use admin; db.createUser( { user: “admin”, pwd: “1234”, roles: [ { role: “root”, db: “admin” } ] } );

    2. repl1 설정
    

    $> mongo –port 20001

    use admin; db.createUser( { user: “admin”, pwd: “1234”, roles: [ { role: “root”, db: “admin” } ] } );

    3. mongo-connector 실행(생성한 계정의 id/pw를 option에 추가 한다.)
    

    /usr/bin/python /usr/bin/mongo-connector -m localhost:10001 -t localhost:9200 -d elastic2_doc_manager -a admin -p 1234 ~~~

    테스트

    계정 처리가 완료 되면, 데이터를 조회/삽입 해본다.

    $> mongo --port 10001
    
    mongos> db.test.find({})
    Error: error: {
    	"ok" : 0,
    	"errmsg" : "not authorized on test to execute command { find: \"test\", filter: {} }",
    	"code" : 13
    }
    mongos>
    mongos> use admin
    switched to db admin
    mongos> db.auth("admin", "1234")
    1
    mongos> db.test.find({})
    mongos> db.test.insert({"x":1, "y":10})
    WriteResult({ "nInserted" : 1 })
    mongos> db.test.find({})
    { "_id" : ObjectId("5b6b76a593ec1b18e1f5f441"), "x" : 1, "y" : 10 }
    

    참고자료


    728x90
Designed by Tistory.