권한정책(Policy) 생성 및 유형

Keycloak의 권한 부여(Authorization) 기능에서는 자원(Resource)에 대한 접근 권한을 세밀하게 제어하기 위해 다양한 유형의 권한정책(Policy)을 지원한다. 권한정책은 ‘누가’, ‘언제’, ‘어떤 조건에서’ 특정 자원에 접근할 수 있는지를 정의한다. 이 장에서는 Keycloak에서 권한정책을 생성하는 방식과 주요 유형(Roles, User, Time 등)에 대해 설명한다.

권한정책 개념

Keycloak의 권한정책은 ‘정책’을 기반으로 접근을 허용하거나 거부하는 조건을 기술한다. 각 정책은 독립적으로 동작하며, 하나 이상의 정책을 묶어 종합적인 접근 제어 전략을 수립할 수도 있다. 예를 들어 ‘특정 역할(Roles)을 가진 사용자이면서(User), 일정 시간(Time) 내에만 접근 가능’한 복합 조건을 정의할 수 있다.

정책 생성 위치

  1. Keycloak Admin Console에 접속한다.

  2. 사용 중인 Realm을 선택한다.

  3. 왼쪽 메뉴에서 Clients 혹은 Authorization(해당 Client를 선택 후 Authorization 탭)으로 이동한다.

  4. Policies 탭에서 새로운 정책을 추가하거나 기존 정책을 편집한다.

정책 평가 순서

Keycloak에서는 하나의 자원(Resource)에 여러 정책이 적용될 수 있다. 최종적으로 접근 허용 여부는 모든 정책을 종합한 결과로 결정된다.

  • 모든 정책을 만족해야 하는(ALL) 방식

  • 하나 이상의 정책을 만족하면 되는(ANY) 방식

  • 정책 중 최소한 한 개는 거부 조건을 만족하지 않아야 하는(CONSENSUS) 방식

이러한 결합 방식을 잘 설계해야 의도치 않은 허용이나 거부가 발생하지 않는다.

주요 정책 유형

Roles Policy

Roles Policy는 Keycloak에 정의된 Role을 기준으로 접근 권한을 결정한다.

  • 생성 시 설정

    • 정책 이름: “role-based-access”와 같이 식별 가능한 이름을 지정

    • 적용할 Role: ‘admin’, ‘user’ 등 접근 권한을 평가할 대상 Role 선택

  • 적용 예시

    • “admin” Role을 가진 사용자만 특정 자원에 접근 가능하도록 설정

    • 여러 Role을 지정하여 모두 해당하면 허용 또는 그중 하나만 해당해도 허용 등 다양하게 구성 가능

Roles Policy는 Keycloak의 Role 매핑과 밀접하게 연관되어 있어, 그룹(Group)이나 사용자(User)가 어떤 Role을 보유하는지를 통해 손쉽게 접근 제어를 적용할 수 있다.

User Policy

User Policy는 특정 사용자(User)에 대해 직접 권한을 부여하거나 거부하는 데 사용한다.

  • 생성 시 설정

    • 정책 이름: “specific-user-access” 등으로 지정

    • 적용할 사용자: Realm에 등록된 사용자 중 접근 권한을 설정할 대상 선택

  • 적용 예시

    • 사내 시스템에서 특정 사용자(예: “alice” 계정)에게만 관리자 기능 접근 권한을 주고 싶을 때

    • 테스트 계정, 관리자 계정 등 개별 사용자의 접근을 정밀하게 제어할 때

단일 사용자에 대한 접근 제어가 필요한 경우에 유용하지만, 유지보수 측면에서 Role 기반이나 그룹 기반 권한 관리가 더 효율적일 수 있으므로 신중히 설계해야 한다.

Time Policy

Time Policy는 접근을 허용 또는 거부할 시간을 조건으로 설정한다. 업무 시간에만 특정 자원을 사용하도록 제한하거나, 특정 이벤트 기간에만 서비스를 활성화하는 식으로 활용할 수 있다.

  • 생성 시 설정

    • 정책 이름: “office-hours-access” 등 시간 기반임을 알 수 있게 지정

    • 시간을 조건으로 지정:

      • 일별(월~일) 사용 가능 시간

      • 특정 날짜 범위

      • 시간대(Timezone) 고려

  • 적용 예시

    • 금, 09시18시에만 접근 허용

    • 특정 캠페인 기간(예: 1월 1일부터 1월 10일까지)에만 접근 가능

Time Policy는 다른 정책(예: Roles Policy, User Policy 등)과 결합하여 “특정 역할을 가진 사용자라 할지라도, 정해진 시간 외에는 접근 불가” 같은 복합 조건을 구성할 수 있다.

다른 정책 유형

  • Aggregated Policy: 이미 생성된 둘 이상의 정책을 논리 연산(AND, OR, NOT 등)으로 결합할 수 있다.

  • JavaScript Policy: JavaScript 스크립트를 작성해 세부 조건(사용자 속성, 세션 정보 등)에 기반한 동적 접근 제어를 구현할 수 있다.

  • Group Policy: 특정 그룹에 속한 사용자를 조건으로 삼아 권한을 관리한다. 대규모 사용자 조직에서 사용자 그룹별 접근 제어가 필요할 때 유용하다.

정책 생성 시 주의 사항

  • 테스트와 검증: 정책 설정 후에는 반드시 테스트를 통해 의도한 대로 접근이 허용 또는 거부되는지 검증해야 한다.

  • 정합성 유지: 여러 정책이 동시에 적용될 때 상호 충돌이 없는지 확인한다.

  • 정책 명명 규칙: 정책 이름을 통해 용도와 조건을 쉽게 파악할 수 있도록 컨벤션을 마련하는 것이 좋다.

  • 정책 범위 제한: 불필요하게 광범위한 정책은 시스템 보안을 약화시킬 수 있으므로, 실제 필요한 범위에 맞춰 정책을 설계한다.

Keycloak에서는 이러한 다양한 정책 유형을 자유롭게 조합하여 원하는 수준의 세밀한 권한 부여 체계를 구성할 수 있다. Roles, User, Time을 비롯해 JavaScript, Aggregated, Group 등 풍부한 정책 유형을 적절히 활용하면, 확장성과 유연성이 높은 접근 제어를 설계하고 운영할 수 있다.

Last updated