ABAC

속성 기반 접근 제어 모델

ABAC(Attribute-Based Access Control)는 사용자·리소스·환경 속성을 조합해서 접근 허용 여부를 판단하는 모델. RBAC보다 유연하지만 복잡하고, 실무에선 RBAC + ABAC 혼용이 많다.

RBAC

개념

ABAC는 속성(attribute) 조합으로 접근을 판단하는 모델이다. "어떤 역할을 가졌는가"가 아니라 "어떤 속성을 만족하는가"가 기준이다. 사용자 속성, 리소스 속성, 환경 속성 등을 조건식으로 엮어서 허용/거부를 결정한다.

왜 필요한가

RBAC는 단순하지만 조건이 세밀해지면 역할이 폭발한다. "engineering 부서의 시니어가, 업무 시간 안에, 자기가 만든 리소스만 수정 가능"을 RBAC로 표현하려면 새 역할을 끝없이 찍어내야 한다. ABAC는 이런 조건을 속성 조합으로 직접 표현한다.

어떤 속성을 보나

  • 사용자 속성 — 부서, 직급, 소속 팀, 국적
  • 리소스 속성 — 소유자, 분류(public/internal/secret), 민감도
  • 환경 속성 — 시간, IP, 접속 위치, 디바이스 종류

예시

user.department == "engineering"
AND resource.owner == user.id
AND time.hour >= 9 AND time.hour <= 18
→ allow

세 가지 축을 모두 동시에 체크한다. RBAC로는 이 조건 하나만 해도 새 역할을 파야 하는데, ABAC는 정책 한 줄이면 끝난다.

RBAC vs ABAC

RBAC ABAC
기준 역할 속성 조합
복잡도 단순 복잡
유연성 낮음 높음
디버깅 역할만 보면 됨 조건식 추적 필요
적합한 경우 역할이 명확한 시스템 조건이 세밀한 시스템

대표 도구

  • OPA (Open Policy Agent) — Rego 언어로 속성 조합 정책 작성
  • AWS Cedar — AWS가 만든 정책 언어
  • XACML — 오래된 XML 기반 표준 (현업에선 거의 안 씀)

실무에서는

  • RBAC을 기본으로 쓰고, 세밀한 제어가 필요한 부분만 ABAC를 섞는 혼합이 흔함
  • "팀장 역할은 RBAC으로, 리소스 소유자 체크는 ABAC으로" 같은 분업

더 보기

  • RBAC — 역할 기반 모델
  • OPA — 정책을 앱 밖으로 빼는 엔진 (ABAC 구현에 자주 사용)
  • 멀티테넌트-RBAC-설계 — 테넌트 격리가 필요한 경우
sunshinemoon · 2026