Ovlt: 셀프 호스팅을 위한 가볍고 Rust 기반의 인증 서버

인증 및 인가 인프라는 종종 시스템에서 가장 중요하면서도 가장 번거로운 부분입니다. 관리형 플랫폼의 무거운 오버헤드를 피하거나 JVM 기반 솔루션의 복잡성을 피하고 싶은 팀에게, 가볍고 안전하며 셀프 호스팅이 가능한 대안을 찾는 것은 도전적인 과제입니다.

Ovlt는 "플랫폼 비대화" 없이 전문가 수준의 인증 인프라를 제공하도록 설계된 셀프 호스팅 OAuth2 및 OIDC 서버입니다. 전체가 Rust로 구축되어 고성능, 엄격한 테넌트 격리, 그리고 최소한의 리소스 사용량(종종 20MB 정도의 RAM만으로 실행됨)에 집중합니다.

핵심 아키텍처 및 주요 기능

Ovlt는 단일 Rust 바이너리로 제공되며, 현대적 인증의 필수 구성 요소인 OAuth2, 사용자 관리, 멀티 테넌시, 그리고 다요소 인증(MFA)을 통합합니다.

PostgreSQL RLS를 통한 테넌트 격리

Ovlt의 가장 중요한 아키텍처적 선택 중 하나는 멀티 테넌시를 처리하는 방식입니다. 단순히 애플리케이션 수준의 로직에 의존하여 데이터를 필터링하는 대신, Ovlt는 **PostgreSQL Row-Level Security (RLS)**를 활용합니다.

이 모델에서 모든 요청은 테넌트 컨텍스트를 해결하고, 이는 테넌트 범위의 트랜잭션을 엽니다. 데이터베이스 자체가 경계를 강제하여, 쿼리가 실행되기도 전에 다른 테넌트의 행이 애플리케이션 코드에서 보이지 않도록 보장합니다. 이는 테넌트 간 데이터 유출 위험을 크게 줄여 보안 경계를 데이터 레이어로 이동시킵니다.

보안 및 "감사 준비 완료" 암호화

보안 감사 및 CTO의 우려를 사항을 해결하기 위해, Ovlt는 hefesto 크레이트를 사용하여 이중 봉투 암호화(double-envelope encryption) 전략을 채택합니다. 이메일, TOTP 비밀번호, SMTP 비밀번호와 같은 민감한 필드는 데이터베이스에 저장되기 전에 AES-256-GCM 암호화로 보호됩니다.

문서화된 키 계층 구조와 투명한 암호화 레이어를 활용함으로써, Ovlt는 보안 팀이 데이터가 저장 시점에 어떻게 암호화되는지 정확한 메커니즘을 감사할 수 있도록 합니다. 이러한 "zero-knowledge" 방식은 데이터베이스가 침해되더라도 민감한 필드가 봉인된 상태로 유지됨을 보장합니다.

TUI를 통한 관리

복잡한 웹 기반 관리 콘솔이 필요한 많은 인증 서버와 달리, Ovlt는 **터미널 사용자 인터페이스(TUI)**를 제공합니다. 이 TUI는 다음과 같은 인증 서버의 전체 수명 주기를 관리하는 데 사용됩니다:

  • 테넌트 및 사용자 생성
  • 클라이언트 및 역할 관리
  • Passkey 및 세션 구성
  • 테넌트별 SMTP 설정 및 Google/GitHub IdP 통합
  • 감사 로그

성능 및 리소스 효율성

Ovlt는 전통적인 인증 제공업체의 더 가벼운 대안으로 자리매김하고 있습니다. JVM, Redis, 그리고 다양한 사이드카 프로세스를 피함으로써, 종종 단일 브라우저 탭보다 작은 메모리 사용량을 달성합니다. 이는 엣지 배포나 RAM 용량이 중요한 리소스 제한 환경에 이상적인 후보입니다.

오픈 소스 및 커뮤니티

Ovlt는 ELv2 라이선스 하에 소스 공개(source-available) 상태이며 공개적으로 구축됩니다. 이 프로젝트는 커뮤니티 기여를 권장하며, 로드맵은 공개적으로 검토할 수 있어 개발자들이 프로젝트가 어디로 향하고 있는지 정확히 확인할 수 있습니다.

커뮤니티에서는 Kanidm과 같은 다른 가벼운 ID 관리자와의 비교를 제안하기도 했지만, 개발자들은 공개된 로드맵과 사용자 피드백에 기반한 반복적인 개발에 집중하고 있습니다.

Sources