피드로 돌아가기
How I built multi-tenant Row Level Security with Aurora PostgreSQL for a B2B SaaS — H0 Hackathon
Dev.toDev.to
Database

RLS 도입을 통한 B2B SaaS 테넌트 격리 보안 강화

How I built multi-tenant Row Level Security with Aurora PostgreSQL for a B2B SaaS — H0 Hackathon

Carolina2026년 6월 26일3intermediate

Context

Application Layer의 WHERE 절 필터링 방식은 개발자 실수로 인한 데이터 유출 위험이 큼. 특히 B2B SaaS 환경에서 테넌트 간 데이터 격리는 타협 불가능한 보안 필수 요건임.

Technical Solution

  • Aurora PostgreSQL의 Row Level Security(RLS)를 적용하여 DB 계층에서 데이터 접근 제어
  • FORCE RLS 설정을 통한 Table Owner 및 Superuser의 우회 경로 차단
  • FastAPI Middleware에서 JWT의 Cognito Claim을 추출하여 SET LOCAL app.current_tenant_id로 트랜잭션 단위 컨텍스트 주입
  • DB User 권한 분리를 통해 DDL 수행 Migration User와 DML 수행 Application User를 격리하여 보안성 향상
  • Bastion EC2 및 AWS SSM을 활용한 DB 접근 제어로 공개 IP 노출 및 자격 증명 유출 원천 차단

1. Application Layer 필터링 대신 DB Native RLS 도입 검토

2. SET LOCAL을 사용하여 요청 간 테넌트 컨텍스트 누수 방지

3. DDL 권한과 Application 쿼리 권한을 분리한 DB User 전략 수립

4. RLS 적용 후 데이터 미노출(Empty Result) 사례를 포함한 격리 테스트 수행

원문 읽기