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

OhMyPolicy 메인 화면

OhMyPolicy는 Supabase 프로젝트의 Row Level Security(RLS) 설정을 바로 점검해 주는 보안 스캐너입니다. 프로젝트 URL과 키 두 개(스키마 조회용 service role, 익명 접근 시험용 anon)를 넣으면 실제 HTTP 요청으로 테이블마다 익명 접근이 되는지 찔러 보고, 테이블별 상태와 수정 SQL을 리포트로 냅니다. 키는 스캔에만 쓰고 저장·로깅하지 않습니다. 웹 외에 MCP 서버로도 제공해 Claude Desktop·Cursor·Continue 안에서 한 마디로 부릅니다.

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

스크린샷

OhMyPolicy 랜딩 페이지

주요 기능

  • 스캔 진행 스트리밍: 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 발행

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 호출 → 결과를 읽기 좋은 텍스트로 정리해 채팅에 반환