프로그래밍/NoSQL

[MongoDB] 인증 활성화: DB 사용자 추가 방법 (docker compose)

Lou Park 2022. 7. 14. 23:08

All your data is a backed up. You must pay 0.01 BTC to <wallet> 48 hours for recover it.

개발중에 절대 데이터가 날라갈리가 없는데, 데이터가 날라가서 보니 mongodb에 READ_ME라는 DB가 떡하니 생겨있었다. 랜섬웨어인데 지금은 개발도중이라 망정이지 실제 프로덕션에서 데이터가 날라간 상황을 생각하다면 아주 아찔하다. 이런 일을 방지하기 위해서 docker compose 사용시 mongodb 유저를 생성하여 컨테이너를 운용하는 방법을 살펴보도록 하겠다.

 

# MongoDB 사용자(User) 만들기

먼저, mongodb /data/db 볼륨이 마운트되어있다고 가정, mongodb가 돌아가고있는 컨테이너속으로 들어간다. 

docker exec -it <mongodb_container_name> sh

"mongo"라고 명령어를 치면 mongodb cli가 열릴건데, 여기서 다음과 같이 유저를 만들어 준다. 관리자 계정을 먼저 만들어두고, 권한이 제한적인 일반계정을 만드는 것이 좋다.

use admin # admin으로 전환
# 관리자 계정 만들기
db.createUser({
	user: "username",
    pwd: "password",
    roles: [{
    	role: "root",
        db: "admin"
    }]
});
# 일반 계정 만들기
db.createUser({
	user: "username",
    pwd: "password",
    roles: [{
    	role: "readWrite",
        db: "db"
    }]
});

이제 사용자 계정이 생성되었을 것이다. 

 

# Docker 설정하기

docker-compose.yaml이 위치한 폴더내에 .env 파일을 생성하여, 방금 만든 mongodb username과 password를 적어준다.

MONGO_USER="someusername"
MONGO_PASS="somepassword"

이제 docker-compose.yaml에서 위 변수들을 사용할 수 있다.

 

services:
	mongo:
    	image: mongo:4.4.13
        restart: unless-stopped
        environment:
        	- MONGO_INITDB_ROOT_USERNAME="${MONGO_USER}"
            - MONGO_INITDB_ROOT_PASSWORD="${MONGO_PASS}"
        ports:
        	- 27017:27017
        command: mongod --auth
        volumes:
            - ./mongo/data:/data
            - ./mongo/data/configdb:/data/configdb
            - ./mongo/data/db:/data/db

mongod --auth를 이용하여 mongodb 접속시에 인증을 반드시 요구하도록 설정한다.

 

 

# MONGO URI 변경하기

모든 설정이 끝났다면, Application단에서는 mongodb 접속 URI를 다음과 같은 형식으로 바꾸어주면된다.

mongodb://<user>:<pwd>@<host>:<port>

 

제대로 설정했다면, 인증없이 mongodb에 접근하려 들 경우 오류를 발생시킬 것이다. 아래는 MongoDBCompass로 접속을 시도한 사진이다.

'프로그래밍 > NoSQL' 카테고리의 다른 글

[MongoDB] upsert시 E11000 duplicate key error 해결  (0) 2022.05.29