WEBBOOK CHAPTER

Spring Security 6, 인증에서 운영까지: 15장. RBAC에 자원과 관계를 더한다

15장. RBAC에 자원과 관계를 더한다

RBAC는 “검토자, 승인자, 관리자” 같은 직무 권한을 표현하기 좋다. 그러나 ROLE_MANAGER만으로는 어느 회사의 어느 계약인지 알 수 없다. ContractHub 결정은 네 입력을 가진다.


subject  = userId, tenantId, global role, authentication strength
resource = contractId, owner tenant, state, amount
action   = read, comment, approve, archive
context  = time, device risk, step-up, request channel

정책은 deny by default다. 먼저 인증, tenant 일치, 역할별 action, 가능한 상태 전이, 고위험 작업의 step-up을 순서대로 검사한다. 역할 수를 계약마다 늘리는 “role explosion”을 피하고 관계와 속성을 도메인 데이터로 둔다.

주체와 자원, 작업, 환경을 함께 판정하는 권한 결정
주체와 자원, 작업, 환경을 함께 판정하는 권한 결정

정책 변경은 코드 변경과 같은 수준으로 review한다. 누가 요청했고 어떤 위험을 줄이거나 늘리는지, 기존 테스트가 어떻게 바뀌는지 남긴다. 외부 정책 엔진을 도입하더라도 입력 스키마, timeout, fail-close 여부, 캐시 무효화와 감사 책임은 애플리케이션에 남는다.