부제: mongo-keyfile 을 설정해서 mongoDB를 restart해도 auth를 활성화 하지 않은 상태로 유지하기
0. 아래 1번부터 하면 좋지만, keyfile이 없는 서버와 있는서버간 통신이 안되는 문제가 있으므로
- security:
keyFile: /etc/mongo/mongo-keyfile
transitionToAuth: true
authorization: disabled
로 설정해서 3,2,1 순서로 restart하고
다되면 , mongoDB user추가 및 application 소스에 반영한 후에
# transitionToAuth: true 로 코멘트 하고, 3,2,1 다시 restart
1. keyFile = “노드끼리 비밀 합의용 패스워드”
keyFile은 원래 replica set / sharded cluster 노드끼리 서로 인증하는 용도입니다.
- security.keyFile: /etc/mongo-keyfile 만 설정하고
- security.authorization: disabled 로 두면:
👉 결과
- 서버끼리(replica set 멤버 간):
- keyFile을 사용해서 internal authentication을 합니다.
- 클라이언트(SPRING, mongo shell 등):
- 여전히 user/password 없이 접속 가능
- 기존처럼 mongosh --host ... 하면 그냥 접속
즉, keyFile만 설정했다고 해서 바로 “유저 인증 필수” 모드로 바뀌진 않습니다.
유저/비밀번호 강제를 하려면 authorization: enabled 가 결정적 스위치입니다.
2. 그래서 rollout 순서는 이렇게 가면 돼요
당신이 계획한 것처럼:
- 지금:
- authorization: disabled
- keyFile 없음
- 아무나 접속 가능
- 1단계 – keyFile만 먼저 적용 (auth 여전히 꺼둔 상태)
- 모든 노드에 /etc/mongo-keyfile 배포
- mongod.conf에:
-
security: authorization: disabled keyFile: /etc/mongo-keyfile
- replica set이면 롤링 재시작
- 이때도 여전히 애플리케이션은 비번 없이 접속 가능
- 2단계 – 유저 생성 + 스프링부트에서 계정/비번 사용하도록 변경
- 아직 authorization: disabled라
- 유저를 만들어도
- 비번을 보내도 / 안 보내도
전부 통과됩니다.
- 이 상태에서 Spring Boot 설정을 미리:
-
spring.data.mongodb.uri=mongodb://appUser:강력비번@host1,host2,host3/yourDb?replicaSet=rs0&authSource=admin
- 아직 authorization: disabled라
- 3단계 – 마지막에 auth ON
로 바꾸고, 다시 replica set 롤링 재시작.security: authorization: enabled keyFile: /etc/mongo-keyfile
- 이 시점부터는
- 계정/비번 없이 접속하는 옛날 클라이언트 → 전부 접속 실패
- 이미 계정/비번 쓰도록 바꾼 Spring Boot → 정상 동작
- 이 시점부터는
- 이제 정말로:
3. 한 줄로 요약
keyFile 설정 + 재시작만으로는 클라이언트 인증이 강제되지 않습니다.
그래서 원하는 대로
“keyFile 먼저 → 나중에 authorization: enabled”
순서로 점진적 전환(거의 무중단) 진행이 가능합니다.



