피드로 돌아가기
Dev.toDatabase
원문 읽기
RLS 도입을 통한 B2B SaaS 테넌트 격리 보안 강화
How I built multi-tenant Row Level Security with Aurora PostgreSQL for a B2B SaaS — H0 Hackathon
AI 요약
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) 사례를 포함한 격리 테스트 수행