멀티 테넌트 환경, 데이터 격리 어떻게 할까?
by DD
1년 전
조회수 6
테넌트 데이터 격리는 행, 테이블, 데이터베이스 단위로 구분되며, 각 방식의 장단점 존재
행 단위 격리의 단점을 보완하기 위해 테넌트 ID 강제화를 위한 쿼리 검증 방법 제시
테넌트별 암호화를 통해 데이터 격리 실패 시에도 데이터 노출 리스크 최소화 가능
테넌트 데이터 격리 수준 비교
테넌트 데이터 격리는 행, 테이블, 데이터베이스 단위로 구분되며, 각 방식은 비용 절감과 보안 강화 사이의 트레이드오프를 가진다. 구체적으로, 행 단위 격리는 비용 효율적이지만, 보안 취약점에 노출될 수 있다. 따라서 서비스 요구사항에 맞는 격리 수준 선택이 중요하다.
JDBC DataSource Wrapper를 이용한 테넌트 ID 강제화
Spring 환경에서 JDBC DataSource Wrapper를 구현하여 쿼리에 tenant_id를 강제하는 방법을 제시한다. 따라서 PreparedStatement Wrapper를 통해 쿼리 검증을 수행하고, BeanPostProcessor를 활용하여 DataSource를 감싼다. 결과적으로, SQL Injection 공격을 방어하고 데이터 무결성을 확보한다.
테넌트별 암호화를 통한 데이터 보호
멀티 테넌트 환경에서 데이터 격리 실패 시, 테넌트별 암호화는 데이터 유출 리스크를 최소화하는 효과적인 방법이다. 구체적으로, 각 테넌트에 고유한 암호화 키를 부여하여 데이터를 보호한다. 반면, 키 관리 서비스를 활용하면 보안을 강화할 수 있지만, 성능 저하를 고려해야 한다.