리소스(Resource) 정의
Keycloak에서 리소스는 보호 대상이 되는 엔티티를 추상화한 개념이다. API 엔드포인트, 정적 파일, 특정 기능, 데이터 집합 등 보호해야 할 모든 요소를 리소스로 정의할 수 있다. 권한 부여(Authorization) 기능은 이 리소스 정의를 기반으로 사용자나 클라이언트가 접근할 수 있는지 여부를 세밀하게 제어한다.
리소스는 다음과 같은 기본 요소들로 구성된다.
이름(Name) 관리자가 식별하기 쉽도록 설정하는 리소스의 내부 식별자다. 사용자가 실제로 요청하는 경로나 기능 이름과 동일할 필요는 없지만, 관리 편의성과 가독성을 위해 명시적으로 작성하는 것이 좋다.
URI 경로(Uri) 보호 대상 엔드포인트나 파일 경로를 지정한다. 여러 경로를 하나의 리소스로 묶을 수도 있으며, 와일드카드(*) 표기를 통해 패턴 매칭으로 보호 범위를 지정할 수 있다.
스코프(Scope) 리소스에서 수행될 수 있는 동작을 세분화한다. 예를 들어
view,edit,delete와 같이 명시적으로 동작을 구분해 두면, 동일한 리소스라도 어떤 스코프에 대한 접근을 허용할지를 독립적으로 설정할 수 있다.소유자(Owner) 리소스에 대한 기본 소유자 정보를 담는다. 일반적으로 애플리케이션(클라이언트) 자체가 소유자가 되거나, 실제 사용자 계정이 소유자가 될 수 있다. 소유자 정보는 정책(Permission) 설정 시 중요한 기준이 된다.
유형(Type) 리소스의 카테고리를 분류하기 위한 용도로 사용한다. 예컨대
urn:photo,urn:document,urn:api등으로 구분해두면, 정책 생성 시 특정 리소스 유형 전체에 일괄 권한을 부여하기 용이해진다.리소스 속성(Attributes) 추가 메타데이터를 포함하기 위해 임의의 속성을 key-value 형태로 저장할 수 있다. 정책 정의 시 이 속성을 조건으로 활용해 세부적인 접근 제어가 가능하다.
리소스 정의 방법
Keycloak에서 리소스를 정의하기 위해 다음 단계를 거친다.
Keycloak 관리자 콘솔 접속 보호하려는 애플리케이션(클라이언트)에 대한 설정 화면으로 이동한다. 해당 클라이언트의 “Authorization” 탭에서 “Resources” 섹션을 확인할 수 있다.
새 리소스 생성 “Resources” 섹션에서 “Create Resource” 버튼을 클릭하여 새 리소스를 등록한다. 이때 이름, URI, 스코프, 소유자, 유형 등을 설정한다.
추가 설정 필요한 경우 “Attributes” 탭을 통해 커스텀 속성을 추가할 수 있다. 이후 정책(Policy)이나 권한(Permission)을 생성할 때 이 속성을 활용해 더 세밀한 규칙을 지정할 수 있다.
리소스와 정책의 연계
리소스가 정의되면 다음 단계인 정책 및 권한 설정에서 이를 참조해 접근 제어 로직을 구성한다. 예를 들어, 특정 URI를 리소스로 지정하고 해당 리소스에 edit 스코프가 설정되어 있다면, edit 스코프에 대한 정책을 별도로 정의하여 “편집” 기능에 대한 접근을 제한할 수 있다.
정책(Policy) “어떤 조건일 때 접근을 허용/거부하는가?”를 정의한다. 역할(Role) 기반, 사용자 속성, 그룹(Group) 또는 커스텀 로직 등을 활용할 수 있다.
권한(Permission) 특정 리소스와 연결된 정책을 실제로 작동하도록 묶는 개념이다. “어떤 리소스에 어떤 스코프를 허용하며, 그 조건은 무엇인가?”를 결정한다.
설계 시 고려 사항
리소스 분류 전략 너무 많은 리소스를 개별적으로 설정하면 관리가 복잡해지고, 너무 적은 리소스를 사용하면 세부적인 제어가 어려울 수 있다. 공통 기능이나 동일한 접근 제어가 필요한 URI들을 묶어서 효율적으로 구성해야 한다.
스코프 범위 설정 “읽기/쓰기”와 같이 단순화된 스코프를 사용할 수도 있으나, 필요에 따라 “생성/조회/수정/삭제”처럼 더 세분화하는 편이 좋다. 스코프 설계가 섬세할수록 정책 정의가 유연해진다.
정책과 권한 확장성 리소스 속성(Attributes)이나 유형(Type)을 활용하면, 신설되는 리소스나 기능에 대해서도 최소한의 변경만으로 확장 가능한 정책 체계를 유지할 수 있다.
Keycloak의 권한 부여 기능에서 리소스는 세분화된 접근 제어의 핵심 단위이다. 관리자 콘솔이나 API를 통해 정확하고 일관성 있게 리소스를 정의해야만, 이후 정책과 권한 구성이 명확해지며 유지보수 부담을 줄일 수 있다.
Last updated