부제: 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 순서는 이렇게 가면 돼요

당신이 계획한 것처럼:

  1. 지금:
    • authorization: disabled
    • keyFile 없음
    • 아무나 접속 가능
  2. 1단계 – keyFile만 먼저 적용 (auth 여전히 꺼둔 상태)
    • 모든 노드에 /etc/mongo-keyfile 배포
    • mongod.conf에:
    •  
      security: authorization: disabled keyFile: /etc/mongo-keyfile
    • replica set이면 롤링 재시작
    • 이때도 여전히 애플리케이션은 비번 없이 접속 가능
  3. 2단계 – 유저 생성 + 스프링부트에서 계정/비번 사용하도록 변경
    • 아직 authorization: disabled라
      • 유저를 만들어도
      • 비번을 보내도 / 안 보내도
        전부 통과됩니다.
    • 이 상태에서 Spring Boot 설정을 미리:
    •  
      spring.data.mongodb.uri=mongodb://appUser:강력비번@host1,host2,host3/yourDb?replicaSet=rs0&authSource=admin
  4. 3단계 – 마지막에 auth ON
     
    security: authorization: enabled keyFile: /etc/mongo-keyfile
    로 바꾸고, 다시 replica set 롤링 재시작.
    • 이 시점부터는
      • 계정/비번 없이 접속하는 옛날 클라이언트 → 전부 접속 실패
      • 이미 계정/비번 쓰도록 바꾼 Spring Boot → 정상 동작
  5. 이제 정말로:

3. 한 줄로 요약

keyFile 설정 + 재시작만으로는 클라이언트 인증이 강제되지 않습니다.

그래서 원하는 대로
“keyFile 먼저 → 나중에 authorization: enabled”
순서로 점진적 전환(거의 무중단) 진행이 가능합니다.

 

Posted by yongary
,