Discourse에 중앙 인증 로그 추가하기

요약

Discourse에 모든 활성화된 인증 방식의 인증 이벤트를 저장하여 분석 및 문제 해결에 활용할 수 있는 표준화된 인증 로그 시스템을 추가해야 합니다.

세부 사항

모든 인증 시스템이 이 시스템에 연결되어 이벤트를 전송하는 인증 로깅 제공자(authentication logging provider)를 제공할 것입니다.

예를 들어, 로컬 로그인 제공자는 다음과 같은(완전하지 않은) 이벤트 목록을 가질 수 있습니다:

  • [IP]에서 fhqwhgads 사용자로 로그인 시도했으나 해당 사용자가 존재하지 않아 실패
  • [IP]에서 supermathie 사용자로 로그인 시도했으나 레이트 리밋(rate limit)에 걸려 실패
  • [IP]에서 supermathie 사용자로 로그인 시도했으나 잘못된 비밀번호를 입력하여 실패
  • [IP]에서 supermathie 사용자로 유효한 비밀번호를 입력하여 로그인 성공
  • [IP]에서 supermathie 사용자로 유효한 비밀번호를 입력했으나 계속 진행하려면 MFA가 필요하여 실패
  • [IP]에서 supermathie 사용자로 유효한 비밀번호를 입력했으나 잘못된 TOTP 코드를 입력하여 실패
  • [IP]에서 supermathie 사용자로 유효한 비밀번호와 vault-work 토큰에 대한 유효한 TOTP 코드를 입력하여 로그인 성공

기존 로그(웹 로그)에 의존하는 문제는 레이트 리밋 관련 로그를 제외하고는 모두 정확히 동일하게([200] POST /session HTTP/1.1) 보인다는 점입니다. 로그에는 의미가 전달되지 않습니다.

우려 사항

익명 이벤트가 로그 항목을 생성하는 것에 대한 우려가 있으며, 이를 SIEM 분석 관점에서 흥미로운 이벤트(예: 비밀번호 스프레이 공격)를 탐지하는 것과 어떻게 균형 있게 맞출지가 문제입니다.

모든 것을 기록하면 인터넷상의 누구나 로그를 채울 수 있습니다… 하지만 이것이 실제로 문제가 되는지는 논쟁의 여지가 있습니다. 아래 보관 기간을 참고하세요 - 아마도 실패 이벤트는 애플리케이션 로그 내에서 더 짧은 기간 동안 보관될 수 있습니다.

일회용 토큰 기반 로그(예: 이메일 로그인)에 대해서도 유사한 문제가 발생합니다. 잘못된 토큰은 기록할 가치가 “낮은” 것으로 보이지만, *재사용(replayed)*된 토큰은 SIEM 맥락과 사용자 지원 모두에서 절대적으로 중요합니다.

질문

보관 기간: 영원히 보관? 30일? 90일? 익명 이벤트는 더 빨리 삭제?

API 키 인증: 잘못된 사용자 또는 관리자 API 키로 이루어진 호출을 여기에 기록해야 합니까? 아마도 그렇습니다 - 디버깅에 도움이 될 것이기 때문입니다.

얼마나 설정 가능해야 하는가? 예: 모든 것에 대해 디버그 로그를 켜거나 특정 제공자에 대해서만 켜기?

구현 고려 사항

구현은 로깅 파이프라인에 다른 이벤트 저장 제공자를 추가할 수 있도록 충분히 유연해야 합니다. 이러한 제공자의 예로는 원시 로그 파일, 메시지 큐, 또는 S3 버킷이 있습니다. 이러한 제공자의 정확한 세부 사항은 이 주제의 범위를 벗어나지만, 플러그인이 생성되는 로그를 수신하도록 등록할 수 있을 만큼 구현은 충분히 유연해야 합니다.

배경

고객 한 명이 SIEM에 이벤트를 전달하려는 의도로 이 기능을 요청했고, 우리는 이것이 Discourse의 기능적 결함(feature gap)임을 깨달았습니다.

내부 논의 중에도 이 정보가 사이트 관리자와 우리 자체의 지원 담당자에게 유용하다는 것을 발견했습니다. 인증 로그는 여러 곳에 흩어져 있을 수 있으며, 이를 찾으려면 어디를 봐야 하는지 알아야 하기 때문입니다. 이것은 개인적인 지식에 의존하고 있으며, 중앙 집중식 로그는 이러한 부담을 크게 줄여줄 것입니다.

Rails 콘솔에서 이러한 로그를 편리하게 볼 수 있는 방법은 우리와 사이트 관리자 모두에게 유익할 것입니다.

19개의 좋아요