Repository navigation
KO Privacy and security
toard는 계정과 사용량을 다룹니다. 선택에 따라 프롬프트와 응답 본문도 저장할 수 있으므로, 운영자는 기능을 켜기 전에 데이터 경계를 이해해야 합니다.
기본 수집은 프롬프트와 응답 텍스트를 보내지 않습니다. provider, 모델, 입력·출력·캐시 토큰 수, 세션 식별자, 발생 시각, 기기 표시값, 서버가 계산한 비용 같은 사용량 메타데이터를 다룹니다.
수집 API는 Bearer token을 사용하며, 서버는 이벤트 본문보다 token 소유자를 기준으로 사용자를 확정합니다. 공개망에서는 TLS를 사용하고, token은 비밀번호처럼 취급하세요. 분실·퇴사·오염이 의심되면 해당 token을 폐기합니다. 기기 host 표시값이 민감하다면 shim에서 별칭을 쓰거나 host 전송을 끌 수 있습니다.
AUTH_MODE는 대시보드의 기본 OAuth 흐름 또는 open 보기 모드를 고르는 설정입니다. credentials 로그인 활성화는 AUTH_CREDENTIALS_ENABLED가 별도로 담당합니다. open 모드는 대시보드와 설정 페이지를 viewer fallback으로 열 수 있으므로 신뢰된 내부망에서만 사용하세요. token 발급·폐기 같은 변경 작업과 관리 화면은 실제 로그인 세션을 요구합니다. 프로덕션에서는 CRON_SECRET을 설정해 /api/cron/* 요청을 보호합니다.
본문 수집은 기본으로 꺼져 있습니다. 서버에 KEK가 있어야 하며, 기본적으로는 사용자가 명시적으로 선택해 수집을 켭니다. 운영자는 CONTENT_COLLECTION_DEFAULT=on으로 설치 흐름에서 본문 수집을 기본 제안하는 opt-out 정책을 선택할 수도 있습니다. 이 경우 조직 내 고지와 보존 정책을 먼저 정하세요. shim은 원격 HTTP endpoint로는 본문을 전송하지 않으므로, 원격 본문 수집에는 HTTPS를 사용해야 합니다.
본문은 서버에서 암호화돼 저장되고 RLS는 소유자 기준 조회를 제한합니다. 하지만 KEK를 가진 운영자나 서버 접근자, DB superuser는 접근할 수 있으므로 end-to-end encryption이 아닙니다. RLS는 앱이 superuser나 BYPASSRLS 권한으로 접속하지 않을 때에만 실제 경계가 됩니다.
취약점은 공개 이슈에 올리지 말고 GitHub Security Advisory로 비공개 신고하세요.