개인 계정 권한을 모으는 내부 앱의 배포를 멈춘 이유
여러 사용자의 계정 권한을 서버에 보관하던 내부 앱을 코드로 확인하고, 서버 배포를 반려한 기록
- 문제
- 상시 운영이 필요한 내부 앱이 여러 사용자의 개인 계정 권한을 서버에 계속 보관해야 했다.
- 선택
- 개인 권한이 필요한 기능을 제외하지 않는 한 서버에 배포하지 않기로 했다.
- 결과
- 기존 앱의 서버 배포는 반려했으며, 개인 권한을 쓰지 않는 대안은 아직 적용되지 않았다.
현업 담당자가 직접 만든 자리비움 보고 앱을 사내 서버에서 24시간 운영해 달라고 요청했다. 반복해서 보고서를 작성하는 수고를 줄이려는 앱이었지만, 일부 기능을 실행하려면 여러 사용자의 개인 계정 권한을 받아 서버에 보관해야 했다. 계속 켜 두는 것보다 먼저 이 구조로 배포해도 되는지 확인해야 했다.
나는 앱의 코드를 살펴보고 권한을 받는 과정과 저장 방식을 확인했다. 서버의 파일 권한을 제한하고 해당 파일을 버전 관리에서 제외하는 조치는 있었지만, 저장된 권한 정보는 암호화되지 않았고 만료되거나 자동으로 삭제되는 처리도 없었다.
실제로 맡은 문제
요청의 핵심은 내부 앱을 상시 가동할 서버를 마련하는 일이었다. 다만 앱에는 사용자의 프로필과 상태를 대신 바꾸는 기능이 포함돼 있었다. 이 기능을 유지한 채 배포하면 여러 사람의 개인 계정 권한이 한 서버에 모이게 된다.
서버가 침해됐을 때 앱 하나만 영향을 받는 구조가 아니었다. 저장된 권한을 맡긴 사용자들의 계정까지 함께 위험해질 수 있었다. 따라서 단순한 배포 환경 검토가 아니라, 해당 기능을 운영 가능한 형태로 남길 수 있는지 판단해야 했다.
확인한 사실과 제약
코드상 프로필과 상태를 바꾸려면 각 사용자가 개인 권한을 앱에 넘겨야 했다. 앱은 이를 서버의 로컬 파일에 계속 저장했다. 파일 접근 권한은 제한돼 있었지만 암호화, 만료, 퇴사자나 미사용자의 권한을 자동으로 지우는 처리는 없었다.
저장 위치를 개인 PC로 바꿔도 문제는 사라지지 않았다. 앱이 다른 사람의 프로필을 수정하려면 누군가는 그 개인 권한을 계속 보관해야 했기 때문이다. 요청자는 24시간 가동이 필요해 개인 PC 운영만으로는 요구사항을 충족하기 어렵다고 설명했다.
내가 한 선택
나는 개인 권한을 보관하는 현재 구조로는 서버 배포를 허용하지 않았다. 파일 저장 방식을 조금 보완하는 수준으로 해결할 수 없다고 판단했다.
대신 프로필과 상태를 직접 바꾸는 기능을 제외하고, 앱이 자리비움 내용을 대신 게시하는 방식으로 범위를 줄이자고 제안했다. 자리비운 사람은 게시글에서 표시하고, 다른 사람이 대신 작성했다면 작성자도 함께 남기는 방식이다. 이 경우 앱 자체의 게시 권한만 사용하므로 여러 사용자의 개인 권한을 모을 필요가 없다.
실제로 한 일
권한 요청 범위와 코드의 저장 처리를 확인한 뒤, 개인 권한이 서버에 남는 지점을 정리했다. 파일 권한 제한이나 버전 관리 제외 여부뿐 아니라 암호화와 만료, 자동 정리 기능이 없는 상태도 함께 검토했다.
그 결과를 근거로 기존 형태의 서버 배포를 반려했다. 개인 권한을 쓰지 않는 게시 방식과 협업 도구에 내장된 양식 기능을 대안으로 제시했으며, 개인 PC에서 일정 기간 시험한 뒤 다시 검토하는 방안도 제안했다.
확인된 결과와 남은 일
확인된 결과는 기존 앱이 사내 서버에 배포되지 않았다는 점이다. 개인 계정 권한을 계속 보관하는 기능도 승인되지 않았다.
다만 제안한 게시 방식으로 앱이 실제 변경됐다는 기록은 없다. 요청자는 상시 운영이 필요하다는 이유로 서버 배포를 다시 요청했다. 개인 권한을 제거한 새 구조의 구현과 시험 운영, 이후의 배포 여부는 아직 남아 있다.