Skip to content

[QA/Security/RAG] 내부 챗봇 사용자별 KB 권한 및 정보 비노출 E2E 검증 #375

Description

@yoonki1207

작업 설명

RAG의 KB 단위 팀·사용자 권한 제어와 내부 챗봇 배포 경로는 이미 구현되어 있다. 이 이슈는 로그인 사용자가 Gateway, Workflow Engine, RAG candidate resolution까지 동일한 execution_subject로 전달되는지 실제 PostgreSQL 기반 통합 테스트로 검증하고, 권한 없는 Knowledge 정보가 응답·citation·사용자 노출 로그에 나타나지 않도록 보강한다.

새 권한 모델이나 별도 데모 데이터를 만드는 작업이 아니라, #365/#366/#368/nodease/mbased#379에서 구현된 계약을 연결해 증명하는 QA·보안 이슈다.

완료 기준

  • 내부 챗봇 요청의 로그인 사용자가 execution_subject.type=user, execution_subject.id=current_user.id로 전달된다.
  • 요청 payload로 사용자 또는 조직 실행 문맥을 덮어쓸 수 없다.
  • 개발팀 사용자 A의 후보는 공통 KB와 개발팀 KB로 제한된다.
  • 기획팀 사용자 B의 후보는 공통 KB와 기획팀 KB로 제한된다.
  • 사용자 직접 operator 권한이 있는 KB는 후보에 포함된다.
  • 권한이 없거나 다른 조직에 속한 KB는 vector search 전에 후보에서 제거된다.
  • 직접 KB와 Collection route의 권한 계약을 분리해 검증한다.
  • 답변과 citation에는 최종 허용된 KB의 근거만 포함된다.
  • 사용자 노출 응답·로그·trace에 거부된 KB의 이름, 원문, 식별자, 정확한 개수가 포함되지 않는다.
  • 최종 후보가 0개이면 embedding/retrieval/LLM 호출을 건너뛰고 접근 가능한 문서에서 관련 정보를 찾지 못했습니다.를 반환한다.
  • 감사 이벤트는 raw 문서 정보 없이 버킷화된 권한 필터 결과만 기록한다.
  • Knowledge, Workflow, Chatbot Deployment 테스트 계약 문서를 갱신한다.
  • 기존 테스트 증거를 재사용하고, 누락된 cross-domain 통합 경로만 추가한다.

구현·검증 원칙

  • 실제 PostgreSQL production adapter를 사용하는 합성 fixture로 사용자별 후보 차이를 검증한다.
  • Gateway current-user 문맥, production candidate resolver, LLM node를 잇는 최소 통합 테스트를 우선한다.
  • 실패 테스트가 실제 계약 위반을 재현할 때만 production code를 수정한다.
  • 변경된 도메인의 targeted test만 반복 실행한다. 전체 회귀는 필요성이 확인된 경우 PR 직전에 1회만 실행한다.
  • secret, credential 원문, raw Knowledge payload를 fixture·로그·문서에 남기지 않는다.

범위 제외

선행·관련 이슈

Metadata

Metadata

Assignees

Type

No type

Fields

Priority

None yet

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions