해커톤을 진행하면서 네이버 클라우드에서 준 크레딧으로 백엔드 서버를 배포하고 있다.
데이터베이스 postgres를 발급한 VM 내에 설치해서 사용한다.
그런데 NCP로 배포를 할 때 마다 계속 데이터가 삭제되는 현상이 발견됐다. 처음에는 ddl-auto
설정이 잘못되어 있는 줄 알았다. 그런데 로컬 환경에는 이런 일이 안생기니까 이건 원인에서 제외했다.
postgres의 문제인가 하고 로그를 살펴보기 시작했다.
DB의 로그는 /var/lib/pgsql/14/data/log
내에 있었다. 그런데 기본 설정에서는 삭제되는 쿼리가 언제 실행되는지 안나오기 때문에 로그 레벨을 ddl
로 바꾸고 확인해보니 일정한 시간마다 삭제되는 것도 아니고 랜덤하게 삭제되는 것을 발견할 수 있었다.
왜 갑자기 실행한 적 없는 쿼리가 마음대로 날라가고 내 데이터를 삭제하는지.. 팀원이 그러는건 당연히 아니고 (db 삭제되면 에러난다고 해결해달라고 하니까..) 도통 원인을 밝힐 수 없는 상태로 이틀 정도 지났다.
하지만 원인은 생각보다 간단했고 나의 부주의였다. 로그를 열어봤을 때 왜 깨닫지 못했을까..
위에서는 로그 일부만 캡쳐를 해놨는데 전체를 보면..
수없이 많은 로그인 시도가 있는 것을 알 수 있다. 처음 로그를 열어봤을 땐 단순히 DDL 쿼리만 찾아 헤메서 생각을 못했는데 무작위로 외부의 누군가 나의 클라우드 서버에 접속해서 데이터를 날려버리는 것이라는 생각이 들었다.
지금까지 회사에서 개발하는 경우 어짜피 DB는 내부망에 있으니 기본 포트를 그대로 쓰고, 계정 역시 간단한 id/password를 사용했는데, 처음으로 퍼블릭 클라우드에서 무언가를 해보려다 보니 생각하지 못한 부분이 생긴 것이다.
그래서 오늘 오전 당장 포트도 기본포트에서 바꾸고 서비스를 위한 계정과 데이터베이스도 새로 만들고 비밀번호도 길고 복잡한 비밀번호로 설정했다. (아마 기본 포트만 사용 안했어도 NCP의 보안 정책이 있기 때문에 이렇게 안됐을 것 같다)
아무튼 요며칠 원인을 찾을 수 없는 데이터 증발 사건이 있었고 지금 조치 후에는 약 4시간이 지났는데 아무일이 발생하지 않는 걸로 봐서 해결한 것 같다.
너무나 당연하게 필요한 조치였지만 사설망에서만 사용하던 사람이 생각하지 못한 부분은 깨닫게 해주는 사건이었다.
다만 이 과정에서 DB접속 정보를 github에 올릴 수 없으니 CI/CD를 위해 사용하던 GitHub Actions역시 어떻게 해야할 지 고민이 필요할 것 같다. 스프링은 아직 익숙하지가 않아서 시행착오를 좀 겪는 것 같다.
글 작성 다음 날 메일을 확인해보니 이런 메일이 있었다. 브루트포스 공격.. 예상한 대로 무작위로 접속해 데이터를 지우는 것이었다.
요청 사항 중 신뢰하는 IP만 접속은 어려울 것 같고.. 패스워드 변경과 기본 포트는 변경했으니 로그인 실패 시 일정 시간 접속 제한 하도록 설정해야겠다.
아무튼 퍼블릭 클라우드에서 보안을 더 신경써야 한다는 것을 배웠다!
안녕하세요, 네이버 클라우드 플랫폼입니다.
네이버클라우드의 기술 콘텐츠 리워드 프로그램 ‘이달의 Nclouder(4월)’ 도전자로 초대합니다 🙂
네이버 클라우드 플랫폼 서비스와 관련된 모든 주제로 5/2(목) 23시까지 신청 가능합니다. (*4월 작성 콘텐츠 한정 신청 가능)
Ncloud 크레딧을 포함한 다양한 리워드가 준비되어 있으니 많은 관심 부탁드립니다!
자세한 내용은 아래 링크에서 확인부탁드립니다.
https://blog.naver.com/n_cloudplatform/223410617146
신청 링크
https://navercloud.typeform.com/to/lF8NUaCF