ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB 비번을 숨겨라! + spring boot, Jenknis
    program_language 및 궁금한것/젠킨슨씨 안녕? 2024. 1. 17. 19:30

    우리 회사는 DB서버가 여러대입니다. 하지만 모두 하나의 비밀번호를 사용하는데요.

    resources.yml에서 비밀번호를 하나씩 변경하다보니 실수가 일어나 변수를 받아 비밀번호를 설정하도록 변경했습니다.

     

    하지만, 내년에 있을 ISMS를 대비하여 DB 비밀번호를 소스에서 안보이게 처리해야 합니다.

     

    그래서 생각했던 방법들과 적용한 것을 설명드리려 합니다.

    편의를 위해 반말로 작성합니다.

     

    방안1. config server 구성

     

    config server를 띄워 비밀번호를 따로 관리할수 있지만, 서버 관리 이슈가 생기고, 설정정보 변경 전파를 위해 spring cloud bus 까지 설정하게 되면 관리이슈의 부담은 더욱 커진다. 

    MSA구조라면 고려해볼만한 방법이나, monolithic 이라면 굳이 config sever를 따로 두는 효용보다 비용이 클것 같다. 

     

    방안2. kubernetes secret

     

    kubernetes의 secret으로 DB 비번과 같은 민감정보를 관리할수 있다.

    secret을 사용하고 싶었지만, jenkins에서 CI/CD시에 gradle build -> docker build -> kubectl apply를 진행하게 되는데

    gradle build시에 test코드 동작시에 DB 비밀번호가 필요한데 kubernetes secret을 알 수가 없었다.

    그럼 CI때 주입을 할수 있는방법이 뭐가 있을까 생각하다보니...

     

    방안3. Gitlab secret

     

    Gitlab의 secret값을 설정하고 action으로 CI/CD를 할때 secret을 가져다 쓸수가 있다. 이도 좋은 방법이나.. 우리 회사는 Jenkins를 사용한다. 그러므로 패쓰~~

     

    방안4. Jenkins Secret

     

    Jenkins에서 Credentials를 사용한다는 사실이 기억났다.

    credential의 kind를 secret text로 설정하면 jenkins서버에 AES로 암호화 되어 저장된다.

    Jenkins CI/CD시에 secret을 주입시켜주면 테스트 코드

     

    jenkins 공홈

    결론은 방안 4를 채택하게 되었다. test code 정상동작, application 정상동작, 추후 비번 변경시 jenkins secret만 변경하여 재배포해주면 되는것으로 마무리 되었다.

     

    하나의 문제를 해결하기 위해선 다양한 방법이 존재하고 각 상황에 맞는 방법을 선택하는게 중요한것 같다.

     

    새해 첫 포스팅 끝.

    반응형

    댓글

Designed by Tistory.