service_role은 API Route에서 금지

concept updated 2026-04-13

service_role은 API Route에서 금지

한 줄 정의

API Route(사용자 요청 처리)에서 service_role_key 사용 시 RLS가 완전 우회됨 → 인증된 사용자가 타 워크스페이스 데이터 접근 가능.

사고 사례 (lattice, 2026-03-20)

  • save-extractions/route.ts에서 supabaseAdmin(service_role) 사용
  • RLS 우회 → 인증된 사용자가 타 workspace의 meeting_id에 extraction 삽입 가능
  • meeting 소유권 검증도 누락

올바른 패턴

// ✅ API Route: createServerClient(cookies) → RLS 적용
const supabase = createServerClient(cookies)

// ❌ API Route: supabaseAdmin → RLS 완전 우회
const supabase = createClient(url, SERVICE_ROLE_KEY)

service_role 허용 위치: 마이그레이션 스크립트, 배치 작업 전용.

체크 기준

“RLS가 있으니까 괜찮겠지”가 아니라 “이 클라이언트가 RLS를 타는가?” 를 확인.

적용 맥락

Supabase를 사용하는 모든 프로젝트의 API Route.