Supabase CRM, 왜 뚫리는가
Supabase는 바이브코딩 CRM의 백엔드로 가장 많이 쓰인다. 문제는 기본 설정 그대로 쓰면 모든 데이터가 공개된다는 것이다.
2025년 Lovable 사건에서 170개 이상의 Supabase 앱이 RLS 미설정으로 데이터가 노출됐다. 대부분 고객 관리, 주문 관리 등 CRM 성격의 앱이었다.
필수 보안 설정 4단계
1단계: RLS 활성화
모든 테이블에 RLS를 켜야 한다. Supabase 대시보드에서 테이블 → Authentication → Enable RLS.
-- customers 테이블 RLS 활성화
ALTER TABLE customers ENABLE ROW LEVEL SECURITY;
-- 인증된 사용자만 자기 데이터 조회
CREATE POLICY "Users can view own customers"
ON customers FOR SELECT
USING (auth.uid() = user_id);
2단계: anon key vs service_role key 분리
anon key: 클라이언트(브라우저)에서 사용. RLS 정책의 적용을 받는다.
service_role key: 서버에서만 사용. RLS를 우회한다. 절대 클라이언트에 노출하면 안 된다.
AI가 코드를 생성할 때 service_role key를 프론트엔드에 넣는 경우가 있다. 이러면 RLS가 무용지물이 된다.
3단계: API 접근 제어
Supabase REST API는 기본적으로 모든 테이블에 CRUD가 가능하다. 필요 없는 테이블은 API 노출을 끄거나, RLS로 완전히 차단해야 한다.
4단계: 실시간 구독 보안
Supabase Realtime을 쓰는 CRM에서, 구독 필터 없이 전체 테이블 변경사항을 수신하면 다른 사용자의 데이터까지 받을 수 있다.
내 Supabase CRM 점검하기
CodeScan은 Supabase 설정 오류를 자동 탐지한다. RLS 미설정, 서비스키 노출, API 접근 제어 상태를 30초 만에 확인할 수 있다.