← 블로그 목록
26

관리자 기능에 감사 로그를 넣을 때 남겨야 할 사건의 맥락

관리자 작업을 나중에 추적할 수 있게 하려면 누가 무엇을 어디에서 왜 실행했고 결과가 어땠는지를 어떤 형태로 기록해야 하는지, 보안과 운영을 함께 고려한 감사 로그 기준을 정리합니다.

관리자 화면에서 ‘수정 성공’이라는 로그만 남기면 장애와 보안 사건을 복원하기 어렵습니다. 어떤 계정이 어떤 대상을 어떤 권한으로 변경했고, 요청이 어디에서 들어와 어떤 결과로 끝났는지 알아야 합니다. 감사 로그의 목적은 로그를 많이 쌓는 것이 아니라 결정과 변경의 맥락을 나중에 검증할 수 있게 하는 것입니다.

특히 사용자·권한·주문·결제·콘텐츠처럼 영향 범위가 큰 관리 기능은 성공한 작업과 실패한 작업을 같은 기준으로 기록해야 합니다. 다만 개인정보와 인증 정보까지 원문으로 남기면 감사 로그 자체가 새로운 위험이 되므로 기록 항목과 보존 범위를 함께 설계해야 합니다.

관리자 감사 로그에 행위자·대상·동작·결과의 맥락을 일관되게 남기는 운영 로그 흐름도

인증과 권한을 사건으로 분리하기

로그인에 성공했다는 사실은 그 사용자가 모든 관리 작업을 수행할 수 있다는 뜻이 아닙니다. 인증 성공·실패, 권한 거부, 권한 변경, 실제 리소스 변경을 서로 다른 이벤트로 남기면 ‘누가 들어왔는가’와 ‘무엇을 할 수 있었는가’를 구분해 조사할 수 있습니다.

  • 관리자 로그인·로그아웃·세션 만료·실패

  • 권한 부여·회수·역할 변경·비상 권한 사용

  • 민감한 데이터 조회·내보내기·삭제·복구

  • 정책·가격·상태·발행 여부처럼 업무 결과를 바꾸는 수정

한 사건에 ‘누가·언제·어디서·무엇을·결과’를 담기

감사 로그의 최소 단위는 메시지가 아니라 구조화된 사건입니다. 행위자와 대상의 식별자, 동작, 결과, 시각, 요청 식별자를 같은 스키마로 기록하면 검색·상관 분석·알림을 자동화하기 쉬워집니다. 사람 사용자인지 자동화 계정인지도 구분해야 책임 경계를 확인할 수 있습니다.

  1. 누가: 사용자 ID·역할·서비스 계정·대리 실행 주체

  2. 언제: 이벤트 시각과 기록 시각, 표준 시간대

  3. 어디서: 애플리케이션·환경·요청 경로·상관 ID

  4. 무엇을: 동작·대상 리소스·변경된 필드·정책 판정

  5. 결과: 성공·거부·실패·부분 처리와 오류 분류

변경 전후 값을 남기되 비밀은 남기지 않기

상태가 바뀌는 작업은 변경된 필드와 이전·이후의 업무상 의미를 남겨야 합니다. 그러나 비밀번호, 액세스 토큰, 결제 인증 값, 주민등록번호 같은 비밀을 그대로 저장하면 조사 편의보다 피해가 커집니다. 원문 대신 필드명, 마스킹된 식별자, 변경 여부, 안전한 참조 ID를 사용합니다.

로그를 남기는 계층도 정합니다. 인프라 로그에는 요청 도착과 응답이 남고, 애플리케이션 감사 로그에는 권한 판정과 업무 대상이 남습니다. 둘을 요청 ID나 trace ID로 연결하면 ‘요청은 성공했지만 저장은 실패한’ 식의 경계를 한 번에 추적할 수 있습니다.

감사 로그의 접근 자체를 통제하기

감사 로그는 관리자 작업보다 더 민감할 수 있습니다. 기록을 볼 수 있는 역할을 제한하고, 로그를 수정·삭제할 수 있는 권한은 기록을 생성하는 권한과 분리합니다. 보존 기간과 삭제 요청 처리 방식도 데이터 분류에 맞춰 정해야 하며, ‘영구 보관’은 기본값이 아니라 별도 근거가 필요한 선택입니다.

  • 감사 로그 조회·다운로드·삭제 시도도 다시 기록합니다.

  • 운영자와 개발자의 접근 범위를 업무상 필요한 수준으로 나눕니다.

  • 로그 보존 기간과 파기 확인 담당자를 문서화합니다.

  • 시스템 간 시계를 맞추고 표준 시간대를 통일합니다.

로그를 조사 질문과 테스트로 연결하기

스키마를 만든 뒤에는 실제 조사 질문으로 검증합니다. ‘지난 24시간 동안 누가 발행 상태를 바꿨는가’, ‘실패한 권한 변경이 있었는가’, ‘한 사용자의 데이터가 어떤 계정에 의해 내보내졌는가’에 답할 수 있어야 합니다. 질문에 필요한 값이 없으면 로그를 더 남기기 전에 데이터 최소화와 접근 권한을 다시 검토합니다.

  1. 성공·실패·권한 거부 이벤트가 모두 생성되는지 확인합니다.

  2. 서로 다른 서비스의 사건을 요청 ID로 연결해 봅니다.

  3. 민감한 필드가 원문으로 저장되지 않는지 검사합니다.

  4. 로그 조회 권한과 보존·파기 절차가 실제로 작동하는지 확인합니다.

감사 로그는 사후 장식이 아니라 관리자 기능의 일부입니다. 사건의 주체·대상·동작·결과를 일관되게 기록하고, 비밀과 불필요한 개인정보는 제외하고, 로그를 읽고 보호하는 권한까지 설계하면 운영자는 더 빠르게 원인을 찾고 조직은 중요한 변경을 설명할 수 있습니다.