# Fine-Grained Authorization

Keycloak의 Fine-Grained Authorization은 리소스 단위로 매우 세밀한 접근 정책을 수립하고 관리할 수 있도록 돕는 기능이다. 단순히 사용자 역할(Role)에만 의존하는 것이 아니라, 리소스(Resource)와 스코프(Scope)의 개념을 도입해 보다 높은 수준의 정책을 구성할 수 있게 해준다. 이를 통해 시스템은 각 리소스마다 독립적인 접근 통제 기준을 마련하고, 세분화된 권한을 명확히 정의할 수 있다.

다음은 Fine-Grained Authorization을 구성하는 주요 요소와 동작 방식을 단계적으로 살펴본 내용이다.

1. **리소스(Resource)**
   * Keycloak에서의 리소스는 보호가 필요한 대상(예: API 엔드포인트, 파일, 데이터베이스 레코드 등)을 의미한다.
   * 관리자는 Keycloak Admin Console에서 애플리케이션마다 필요한 리소스를 정의할 수 있으며, 각 리소스에는 이름과 URI, 소유자 등을 설정한다.
   * 리소스는 스코프를 포함하여 정의될 수 있다. 예컨대 `document`라는 리소스에 `view`, `edit` 스코프를 부여해 “문서를 조회할 권한”과 “문서를 편집할 권한”을 구분할 수 있다.
2. **스코프(Scope)**
   * 특정 리소스에 대해 수행할 수 있는 동작을 정의한다.
   * “읽기”, “쓰기”, “삭제”와 같이 RESTful API 접근 방식을 기준으로 명명하는 경우가 많다.
   * 스코프 단위의 권한 관리를 통해 같은 리소스라도 동작별로 접근을 통제할 수 있다.
3. **폴리시(Policy)**
   * “어떠한 조건에서 접근이 허용(또는 거부)되는가?”를 정의하는 규칙이다.
   * 역할(Role), 그룹(Group), 사용자 속성, 시간 조건, 사용자 동의(Consent) 등 다양한 방식으로 조건을 설정할 수 있다.
   * 사용자 정의 스크립트(자바스크립트, JBoss Drools 등)를 활용한 고급 정책도 가능하다.
   * 폴리시는 단일 조건만 정의하거나, 다른 여러 폴리시를 참조해 복합적인 로직을 구성할 수 있다.
4. **퍼미션(Permission)**
   * 폴리시와 리소스(혹은 스코프)를 연결하여 최종적인 접근 권한을 생성하는 과정이다.
   * 예를 들어, “`document` 리소스의 `edit` 스코프에 대해 ‘Admin’ 역할만 접근 가능”이라는 퍼미션을 정의하면, 해당 역할을 가진 사용자만 문서를 편집할 수 있게 된다.
   * 퍼미션 단위에서 정책 조합 방식을 설정해, 여러 폴리시를 “AND” 또는 “OR” 조건으로 결합할 수 있다.
5. **정책 평가(Policy Evaluation)**
   * 사용자가 특정 리소스에 접근 요청을 하면 Keycloak은 관련 리소스와 스코프를 확인하고, 여기에 할당된 퍼미션 및 정책을 검사한다.
   * 정책에서 설정한 조건이 모두 충족되면 접근이 허가되고, 조건 중 하나라도 충족되지 않으면 접근이 거부된다.
   * Keycloak은 이 과정을 통합적으로 관리하므로, 외부 애플리케이션 로직을 단순화할 수 있다.
6. **리소스 서버(Resource Server) 구성**
   * 애플리케이션이 Keycloak으로부터 정책 평가를 받아 적용하려면, 일반적으로 애플리케이션을 리소스 서버로 등록해야 한다.
   * Admin Console에서 애플리케이션 클라이언트(Client)의 “Authorization” 탭을 활성화해 리소스와 폴리시, 퍼미션 등을 설정한다.
   * 애플리케이션 측에서는 Keycloak Policy Enforcement Point(PEP) 라이브러리를 사용하거나, 직접 Authorization API를 호출해 접근 권한 여부를 확인할 수 있다.
7. **고려 사항**
   * 세밀한 정책이 늘어날수록 정책 관리가 복잡해질 수 있다. 리소스와 스코프, 정책, 퍼미션 설계를 체계적으로 진행해야 한다.
   * 정책 충돌이 발생하지 않도록 역할, 그룹, 속성 기반 정책들을 충분히 검토하고, 테스트 환경에서 시뮬레이션을 거쳐 실제 운영에 반영해야 한다.
   * 실행 시간에 부하가 우려되는 복합 정책(스크립트, 다단계 조건 등)을 과도하게 사용하지 않도록 주의한다.

Fine-Grained Authorization을 올바르게 활용하면, 시스템의 리소스별 접근 제어를 투명하고 정확하게 설정할 수 있다. 이를 통해 민감 데이터나 기능에 대한 보안을 한층 강화할 수 있으며, 조직 내 다양한 접근 권한 요구사항을 유연하게 수용할 수 있다. Keycloak이 제공하는 Authorization Services UI와 API를 적절히 활용하면 관리와 확장이 용이하므로, 애플리케이션 요구사항에 맞춰 세밀한 정책을 적극적으로 도입하는 것이 좋다.
