개요
이전 프로젝트에서 Spring Boot 3.X 버전을 사용하면서 Spring Security와 함께 권한(Role) 기반 접근 제어를 구현한 경험이 있습니다.
이를 통해 얻은 인사이트를 바탕으로 권한 기반 접근 제어(Role Based Access Control, RBAC)와 속성 기반 액세스 제어 (Attribute-Based Access Control, ABAC) 대해 정리해보고자 합니다.
RBAC란❓
RBAC는 사용자의 역할(Role)을 기반으로 시스템 접근 권한을 관리하는 방식입니다.
예를 들어, '관리자', '매니저', '일반 사용자' 등의 역할을 정의하고, 각 역할에 맞는 권한을 부여할 수 있습니다.
1. 핵심 구성 요소
- 사용자(Users)
- 시스템을 사용하는 실제 사람이나 프로세스
- 역할(Roles)
- 조직 내 직무나 책임을 반영한 권한 그룹
- 권한(Permissions)
- 특정 리소스에 대한 접근/실행 권한
- 세션(Sessions)
- 사용자가 활성화한 역할들의 집합
2. 장점
- 관리 효율성
- 역할 단위로 권한을 관리하여 운영/관리가 용이
- 보안성
- 최소 권한의 원칙 적용이 쉬움
- 확장성
- 새로운 역할과 권한을 유연하게 추가/수정 가능
ABAC란❓
ABAC은 사용자, 리소스, 환경 등의 속성(Attribute)을 기반으로 접근 제어를 하는 방식입니다. RBAC보다 더 유연하고 세밀한 접근 제어가 가능합니다.
속성은 거의 모든 것이 될 수 있습니다. 사용자의 특정 특성(예: 직위 또는 보안 인가), 수행 중인 작업의 속성, 또는 현재 시간 또는 액세스되는 데이터의 물리적 위치와 같은 "실제" 속성까지도 포함됩니다.
1. 속성(Attribute)의 종류
- 주체(Subject) 속성
- 사용자 ID, 역할, 부서, 직급 등
- 리소스(Resource) 속성
- 파일 유형, 생성일, 보안 등급 등
- 액션(Action) 속성
- 읽기, 쓰기, 삭제 등
- 환경(Environment) 속성
- 시간, 위치, IP 주소 등
RBAC와 ABAC의 차이
RBAC와 ABAC는 모두 사용자의 특성을 고려합니다.
그러나 ABAC는 수행 중인 작업 및 사용자가 액세스하는 데이터 또는 시스템의 속성과 같은 더 많은 양의 컨텍스트를 고려할 수 있지만, RBAC는 사용자의 역할만 고려합니다.
따라서 ABAC는 RBAC 보다 더 동적이지만, 효과적으로 관리하기가 더 복잡해집니다.
즉, RBAC는 단순하고 명확한 권한 관리가 필요할 때 적합하며, ABAC는 더 세밀하고 동적인 접근 제어가 필요한 경우에 적합합니다. 실제 시스템에서는 두 방식을 혼합하여 사용하는 것도 좋은 접근 방법이 될 수 있습니다.