OhMyPolicy - Supabase RLS 보안 스캐너 + MCP 서버

OhMyPolicy 메인 화면

OhMyPolicy는 Supabase 프로젝트의 Row Level Security(RLS) 설정을 즉시 분석해주는 보안 스캐너입니다. URL과 API 키를 입력하면 실제 HTTP 요청으로 각 테이블의 익명 접근 여부를 프로빙하고, 테이블별 상태와 수정 SQL을 리포트로 제공합니다. 웹뿐 아니라 Model Context Protocol(MCP) 서버로도 제공되어 Claude Desktop·Cursor·Continue 같은 AI 코딩 도구 안에서 한 마디로 호출됩니다.

🔗 서비스 바로가기 · 🇰🇷 한국어 페이지 · 📦 npm: ohmypolicy-mcp · 💻 MCP 소스코드

📸 스크린샷

OhMyPolicy 랜딩 페이지

🧩 주요 기능

  • 실시간 스캔 스트리밍: 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: 스캔 로직, 토큰 생성, 보안 유틸리티 유닛 테스트

🔍 작동 원리

  1. 스키마 조회: Service Role 키로 PostgREST OpenAPI 스펙에서 테이블 목록과 컬럼 구조 파싱
  2. 병렬 프로빙: Publishable(anon) 키로 각 테이블에 GET/POST 요청 — 응답 코드로 노출 여부 판별
  3. 상태 분류: read_exposed / write_exposed 조합으로 4단계 상태 분류
  4. 리포트 생성: Fix SQL, Supabase 딥링크, Mermaid ERD를 KV에 저장 후 리포트 페이지로 리다이렉트
  5. MCP 어댑터: AI 클라이언트가 호출 → MCP 서버가 위 API를 호출 → 결과를 AI 친화 텍스트로 포맷팅하여 채팅에 반환