본문으로 건너뛰기

SpiceDB와 ReBAC을 활용한 RAG 파이프라인 보안 강화 가이드

SpiceDB와 ReBAC을 활용하여 RAG 파이프라인에서 사용자의 권한에 따른 문서 접근을 제어하고 정보 유출을 방지하는 구체적인 아키텍처와 구현 방법을 제시한다.

섹션별 상세

01
RAG 파이프라인에서 발생할 수 있는 민감 정보 노출 위험을 방지하기 위해 Google Zanzibar 기반의 SpiceDB를 도입하여 관계 기반 액세스 제어(ReBAC)를 구현한다.
02
SpiceDB는 사용자, 그룹, 문서 간의 관계를 그래프 형태로 저장하며, definition과 relation을 통해 복잡한 권한 로직을 마이크로초 단위로 평가한다.
python
SCHEMA = """
definition user {}
definition article {
  relation viewer: user
  permission view = viewer
}
"""

SpiceDB에서 사용자(user)와 문서(article) 간의 조회 권한 관계를 정의하는 스키마

03
Pre-Filter 전략은 검색 수행 전 SpiceDB의 LookupResources API로 사용자가 접근 가능한 문서 ID 목록을 먼저 확보한 뒤, 이를 Pinecone의 메타데이터 필터로 전달하여 권한이 있는 데이터만 검색 범위에 포함시킨다.
python
def lookupArticles():
    return client.LookupResources(
        LookupResourcesRequest(
            subject=subject,
            permission="view",
            resource_object_type="article",
        )
    )
# ...(중략)
authorized_articles = [response.resource_object_id async for response in resp]

Pre-Filter 방식에서 사용자가 접근 가능한 문서 ID 목록을 SpiceDB로부터 조회하는 코드

Pre-filter 방식의 RAG 보안 아키텍처 다이어그램
Diagram사용자의 쿼리가 들어오면 먼저 SpiceDB에서 접근 가능한 문서 목록을 조회하고, 이를 필터로 사용하여 Pinecone에서 검색을 수행한 뒤 LLM에 전달하는 과정을 보여준다. 검색 단계에서 이미 권한 없는 문서가 배제되므로 보안성이 높다.
04
Post-Filter 전략은 벡터 데이터베이스에서 검색된 결과 문서들에 대해 SpiceDB의 CheckPermission API를 개별적으로 호출하여 권한을 확인하고, 승인된 문서들만 LLM의 컨텍스트로 구성한다.
python
async def filter_docs_with_spicedb(docs: List):
    filtered_docs = []
    for doc in docs:
        article_id = doc.metadata.get("article_id")
        resp = await client.CheckPermission(
            CheckPermissionRequest(
                subject=SubjectReference(object=ObjectReference(object_type="user", object_id="kim")),
                resource=ObjectReference(object_type="article", object_id=str(article_id)),
                permission="view",
            )
        )
        if resp.permissionship == CheckPermissionResponse.PERMISSIONSHIP_HAS_PERMISSION:
            filtered_docs.append(doc)
    return filtered_docs

Post-Filter 방식에서 검색된 각 문서에 대해 SpiceDB 권한을 개별적으로 확인하는 코드

Post-filter 방식의 RAG 보안 아키텍처 다이어그램
DiagramPinecone에서 먼저 관련 문서를 검색한 후, 각 문서에 대해 SpiceDB에 권한 확인 요청을 보내 승인된 문서만 LLM의 프롬프트에 포함시키는 흐름을 나타낸다. 검색 결과의 적중률이 높을 때 효율적인 방식이다.
05
대규모 문서 집합에서 검색 적중률이 낮을 때는 Pre-Filter가 효율적이며, 검색 결과의 품질이 높을 때는 Post-Filter가 적합하므로 시스템의 특성과 SpiceDB 메트릭을 고려하여 방식을 결정한다.

용어 해설

관계 기반 액세스 제어(ReBAC)
사용자나 자원 간의 관계를 그래프로 모델링하여 권한을 결정하는 방식이다. 정적인 역할 기반(RBAC)보다 유연하며 대규모 시스템의 복잡한 권한 구조를 표현하는 데 필수적이다.
구글 잔지바르(Google Zanzibar)
구글이 개발한 전사적 권한 관리 시스템이다. 수십억 개의 객체와 사용자 간의 관계를 실시간으로 처리하며, SpiceDB와 같은 현대적인 ReBAC 시스템의 기술적 토대가 되었다.
메타데이터 필터링(Metadata Filtering)
벡터 검색 시 임베딩 유사도 외에 추가적인 속성을 기준으로 결과를 제한하는 기법이다. RAG 보안에서 특정 사용자에게 허용된 문서 ID로 검색 범위를 좁히는 데 사용된다.

기술

  • SpiceDB
  • Pinecone
  • OpenAI
  • LangChain
  • Python

활용 사례

  • 기업용 지식 관리 시스템
  • 권한 기반 챗봇
  • 보안이 강화된 RAG 파이프라인

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 01. 09.수집 2026. 02. 21.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.