OhMyPolicy - Supabase RLS 보안 스캐너 + MCP 서버
OhMyPolicy는 Supabase 프로젝트의 Row Level Security(RLS) 설정을 즉시 분석해주는 보안 스캐너입니다. URL과 API 키를 입력하면 실제 HTTP 요청으로 각 테이블의 익명 접근 여부를 프로빙하고, 테이블별 상태와 수정 SQL을 리포트로 제공합니다. 웹뿐 아니라 Model Context Protocol(MCP) 서버로도 제공되어 Claude Desktop·Cursor·Continue 같은 AI 코딩 도구 안에서 한 마디로 호출됩니다.
🔗 서비스 바로가기 · 🇰🇷 한국어 페이지 · 📦 npm: ohmypolicy-mcp · 💻 MCP 소스코드
📸 스크린샷
🧩 주요 기능
- 실시간 스캔 스트리밍: Server-Sent Events(SSE)로 테이블별 스캔 진행 상황을 실시간 표시
- RLS 상태 분류: No RLS / Public read / Public write / Protected — 판단이 아닌 현황 그대로 표시
- Fix SQL 자동 생성: 노출된 테이블마다 바로 실행 가능한 RLS 정책 SQL 제공
- Supabase 딥링크: “Open in Supabase SQL Editor” 버튼으로 SQL 에디터에 쿼리 자동 주입
- Schema ERD: PostgREST OpenAPI 스펙 파싱으로 Mermaid erDiagram 자동 생성 — MermanDraw 연동
- 동적 OG 이미지: 스캔 결과별 1200×630 PNG 자동 생성 — Twitter/Slack 공유 시 결과가 미리보기로 노출
- 키 미저장 보장: API 키는 스캔 실행에만 사용, 저장·로깅 없음
- 다국어 + AEO 인프라: 영문/한국어 랜딩, FAQPage·HowTo·SoftwareApplication JSON-LD,
llms.txt발행으로 LLM 검색 시대 대응
🤖 MCP 서버 (ohmypolicy-mcp)
Claude Desktop·Cursor·Continue 같은 AI 클라이언트의 설정에 한 줄 추가하면 5개의 도구가 자동 등록됩니다.
{
"mcpServers": {
"ohmypolicy": {
"command": "npx",
"args": ["-y", "ohmypolicy-mcp"]
}
}
}
사용 흐름:
유저: “Claude, scan my Supabase at https://abcd.supabase.co” Claude: [
ohmypolicy_scan_supabase호출] “4 tables exposed: posts, messages, users, orders. Fix SQL을 생성하려면…”
제공 도구:
ohmypolicy_list_platforms— 지원 플랫폼 발견 (Supabase Live / Firebase·Clerk·Postgres 로드맵)ohmypolicy_scan_supabase— Supabase RLS + Storage 전체 감사ohmypolicy_get_report— 토큰 기반 리포트 재조회ohmypolicy_explain_finding— 노출 타입 평문 설명ohmypolicy_generate_fix— Fix SQL 생성
설계 시 향후 Firebase Security Rules, Clerk Permissions, 일반 PostgreSQL RLS까지 확장 가능하도록 플랫폼 레지스트리 + 도구 모듈 구조로 분리. 새 플랫폼 추가는 한 파일만 추가하면 됩니다.
💡 핵심 기술
- Cloudflare Workers + Hono.js: 서버리스 런타임 — SSE 스트리밍, KV 저장, 라우팅
- Cloudflare KV: 스캔 결과 저장 (72시간 TTL)
- workers-og: Satori 기반 동적 1200×630 OG 이미지 생성 — 1시간 엣지 캐시
- PostgREST OpenAPI:
/rest/v1/엔드포인트에서 테이블 스키마 및 컬럼 정보 파싱 - Server-Sent Events: TransformStream 기반 실시간 스캔 진행 스트리밍
- Model Context Protocol SDK:
@modelcontextprotocol/sdk기반 stdio 서버, zod 입력 검증 - Vitest: 스캔 로직, 토큰 생성, 보안 유틸리티 유닛 테스트
🔍 작동 원리
- 스키마 조회: Service Role 키로 PostgREST OpenAPI 스펙에서 테이블 목록과 컬럼 구조 파싱
- 병렬 프로빙: Publishable(anon) 키로 각 테이블에 GET/POST 요청 — 응답 코드로 노출 여부 판별
- 상태 분류: read_exposed / write_exposed 조합으로 4단계 상태 분류
- 리포트 생성: Fix SQL, Supabase 딥링크, Mermaid ERD를 KV에 저장 후 리포트 페이지로 리다이렉트
- MCP 어댑터: AI 클라이언트가 호출 → MCP 서버가 위 API를 호출 → 결과를 AI 친화 텍스트로 포맷팅하여 채팅에 반환