감사 로그는 누가 무엇을 바꿨는지 설명할 수 있어야 하지만, 모든 요청 본문을 저장할 필요는 없습니다. 토큰과 주민번호 같은 민감값을 통째로 남기면 조사 도구가 새로운 유출 경로가 됩니다. 재현에 필요한 사실과 보관하면 안 되는 내용을 분리해야 합니다.
질문에 답하는 이벤트만 기록한다
권한 변경, 데이터 내보내기, 승인, 삭제처럼 사후 설명이 필요한 행동을 먼저 정의합니다. 각 이벤트에는 시각, 행위자 ID, 테넌트, 대상 ID, 행동, 결과, 요청 추적 ID를 넣습니다. 모든 화면 클릭을 무작정 저장하면 중요한 사건을 찾기 어려워집니다.
원문 대신 참조와 차이를 남긴다
민감한 문서 전문이나 인증 토큰을 로그에 복제하지 않습니다. 변경 전후 값을 저장해야 한다면 필드별 허용 목록을 정하고 필요한 부분만 마스킹합니다. 원본은 별도 권한으로 관리되는 시스템에서 확인하도록 참조 ID를 남깁니다.
실패한 시도도 보안 신호다
성공한 변경만 기록하면 권한 없는 다운로드 시도와 반복된 로그인 실패를 분석할 수 없습니다. 거부된 요청의 이유를 내부 코드로 남기되 사용자에게는 과도한 정보를 공개하지 않습니다. 사용자가 입력한 문자열은 로그 주입을 막도록 안전하게 처리합니다.
조회 권한과 보존 기간을 정한다
감사 로그 자체도 고객 활동을 드러냅니다. 누가 조회할 수 있는지, 조회 행위는 기록하는지, 언제 삭제하거나 보관소로 옮길지를 정합니다. 법적 보존 의무는 업종과 국가에 따라 달라지므로 해당 조직의 정책 검토가 필요합니다.
조사가 가능한지 연습한다
샘플 사건 하나를 정해 변경 전후 흐름을 로그만으로 추적해 봅니다. 시계가 다른 서버의 이벤트가 이어지는지, 누락된 작업 ID가 없는지 확인합니다. 개인정보 노출 없이 사건을 재구성할 수 있어야 좋은 로그입니다.
현장에 적용할 때의 순서
- 사건별 최소 필드 정의
- 민감값 마스킹·접근 제한
- 샘플 사건 추적 연습
주의할 실패: 요청 본문과 토큰을 통째로 저장
관찰할 지표: 사건 재구성률과 민감값 발견 건수
적용 전 체크리스트
- 기록할 이벤트와 최소 필드를 정의했는가
- 토큰·민감 본문이 로그에 들어가지 않는가
- 로그 조회 권한·보존 기간·조회 이력이 있는가
참고 자료
OWASP Logging Cheat Sheet. 애플리케이션 보안 로그 설계 원칙을 참고했습니다. 구체적인 개인정보 보존 의무는 조직별 법률 검토가 필요합니다.
이미지와 도식은 이해를 돕기 위한 개념 시각화입니다. 특정 고객의 실제 설비·데이터·화면을 재현한 것이 아닙니다.
#감사로그 #개인정보보호 #보안로깅 #SaaS운영 #접근기록 #데이터보호 #로그설계 #OWASP #사고대응 #최소수집