01환각보다 무서운 사고
사내 AI 도입 논의에서 가장 많이 나오는 걱정은 환각입니다. 그런데 실제로 회사를 곤란하게 만드는 사고는 다른 쪽에서 납니다.
사원이 사내 AI에 물었습니다. "다음 분기 조직 개편 방향이 어떻게 되나요?"
AI가 답했습니다. "영업 2팀을 신설하고 일부 인원을 재배치하는 방안이 검토 중입니다. [근거: 임원회의록]"
환각이 아닙니다. 정확한 답변이라서 사고입니다. 권한 누수는 틀린 답보다 맞는 답에서 발생합니다.
02자주 뚫리는 세 구멍
권한 필터를 "검색 결과에만" 걸어두면 아래 세 경로로 새어 나갑니다. 셋 다 실제 구축 사례에서 반복적으로 발견되는 패턴입니다.
구멍 1. 요약본 유출
원문 접근은 막았지만 요약·브리핑 생성 단계에서 필터가 빠진 경우입니다. 대시보드의 "오늘의 한 줄 요약"이나 자동 생성 보고서는 여러 문서를 종합하는데, 이때 소스 목록에 권한 밖 문서가 섞이면 원문을 못 봐도 내용은 전달됩니다. 링크는 안 보이고 문장만 보이니 발견도 늦습니다.
구멍 2. 그래프 노드 노출
관계 그래프나 엔티티 목록에서 흔히 발생합니다. 문서 본문은 가렸는데 노드 이름은 그대로 노출되는 경우입니다. "○○기업–인수검토"라는 노드가 보이면 본문 없이도 정보는 전달됩니다. 자동완성 목록, 태그 목록, 필터 드롭다운도 같은 종류의 누수 경로입니다.
구멍 3. 통계 역추적
집계는 안전하다고 여기기 쉽지만 아닙니다. 팀별 문서 수를 보여주는 화면에서 분모가 1인 집계는 특정 개인의 정보를 그대로 드러냅니다. 기간 필터를 조합해 차이를 계산하면 개별 항목을 복원할 수도 있습니다.
세 구멍의 공통 원인은 하나입니다. 권한 필터를 '검색'이라는 하나의 기능에 붙였기 때문입니다.
03원칙: 출력 경로 전체에 건다
권한은 기능이 아니라 경계여야 합니다. 데이터가 사용자에게 도달하는 모든 경로에 동일한 필터가 걸려야 하며, 새 기능을 만들 때마다 개발자가 필터를 "기억해서 붙이는" 구조라면 언젠가 반드시 빠집니다.
컴키는 이를 세 겹으로 방어합니다.
1층. DB 레벨 — Row-Level Security
Postgres의 행 단위 보안(RLS)으로 워크스페이스 경계를 DB가 강제합니다. 애플리케이션 코드가 실수로 WHERE 절을 빠뜨려도 다른 테넌트의 행은 조회 자체가 되지 않습니다. 코드 리뷰에 의존하지 않는 마지막 방어선입니다.
2층. 역할 가시성 필터
검색 후보 집합을 만드는 단계에서, 질문자의 역할·팀·본인 여부로 먼저 걸러낸 뒤 RAG 파이프라인에 진입시킵니다. 답변 생성 후에 가리는 게 아니라, 애초에 모델이 볼 수 없게 하는 순서가 중요합니다.
| 역할 | AI 질의로 볼 수 있는 범위 |
|---|---|
| 경영자 | 전사 [일반]·[리더] |
| 리더 | 전사 [리더] + 자기 팀 [일반] |
| 일반 | 본인 + 팀 공유 [일반] |
3층. 분류 게이트
[경영]·인사·급여로 분류된 문서는 역할과 무관하게 RAG 경로에서 하드 제외됩니다. 경영자 본인이 물어도 AI 답변의 근거로는 쓰이지 않습니다. 2층이 뚫려도 3층이 막는 이중 구조이며, 이 문서들은 애초에 임베딩을 생성하지 않아 벡터 검색 후보에도 들어가지 않습니다.
04놓치기 쉬운 두 가지
조직 이동 시 소급 노출. 직원이 A팀에서 B팀으로 옮기면, 순진한 구현은 "현재 소속 = B팀"으로 필터를 걸어 과거 A팀 시절 문서를 못 보게 하거나, 반대로 B팀의 과거 문서를 전부 볼 수 있게 만듭니다. 후자가 사고입니다. 권한은 조회 시점이 아니라 작성 당시의 팀·분류 기준으로 판정해야 합니다.
직무 분리. 인프라를 운영하는 시스템 관리자가 업무 데이터를 볼 수 있으면, 권한 모델 전체가 무의미해집니다. 서버 접근 권한과 콘텐츠 접근 권한은 분리되어야 하며, 권한 운영 주체는 인사·경영 관리자여야 합니다.
05검증 방법
설계보다 중요한 건 누수가 없음을 증명하는 절차입니다. 최소한 아래는 자동화된 테스트로 고정하십시오.
- 권한 밖 문서를 근거로 답하지 않는지 — 역할별 계정으로 동일 질의 후 출처 목록 비교
- 요약·보고서 생성 경로에도 같은 필터가 걸리는지
- 그래프·자동완성·통계 화면에서 권한 밖 엔티티 이름이 노출되지 않는지
- 조직 이동 계정으로 과거·현재 문서 가시성이 기대대로인지
권한 누수는 발생하면 되돌릴 수 없는 종류의 사고입니다. 기능 추가마다 이 4개 테스트가 돌아가는 것이, 문서로 된 어떤 정책보다 확실합니다.
