역할 기반 접근 제어 (Role-based access control)
역할 기반 접근 제어 (RBAC)은 역할에 따라 사용자에게 권한 (Permissions)을 할당하는 방법입니다. 다음과 같은 상황에서 RBAC 사용을 고려하세요:
- 여러 사용자가 서로 다른 접근 권한을 필요로 하는 경우: RBAC는 관리자, 에디터, 뷰어 등 역할에 따라 사용자가 다양한 권한을 필요로 할 때 이상적입니다.
- 권한 관리를 단순화해야 하는 경우: 개별적으로 권한을 설정하는 대신 역할을 할당함으로써 대규모 사용자 그룹을 효율적으로 관리할 수 있습니다.
- 앱이 여러 부서 또는 팀을 지원하는 경우: 서로 다른 그룹이 리소스에 대해 서로 다른 수준의 접근 권한을 필요로 하는 시나리오에서 유용합니다.
역할 기반 접근 제어가 어떻게 작동하는지 이해하기
권한 (Permissions, 스코프 (Scopes))
권한 (Permission)은 API 리소스에 접근할 수 있는 인가 (Authorization)를 의미합니다. 실제 환경에서는 주문, 상품, 문서와 같은 엔티티를 리소스로 지정하고, 다양한 동작을 할당할 수 있습니다.
주문을 수정하거나, 문서를 읽거나, 상품을 삭제하는 등 권한의 예시는 다음과 같습니다:
write:orders
read:documents
delete:products

위 그림은 https://api-1.store.io
리소스의 read:item
권한과 https://api-2.store.io
리소스의 read:item
권한이 서로 다름을 보여줍니다.
API 리소스가 제공되지 않으면, 권한은 "OIDC 용"으로 간주됩니다. 일반적으로 RBAC에서는 원하지 않는 동작입니다.
Logto에서 API 권한 구성 방법을 알아보세요.
역할 (Roles)
역할 (Role)은 권한의 집합 으로, 사용자에게 할당할 수 있습니다. 또한 서로 다른 API에 대해 정의된 권한을 집계하는 방법을 제공하여, 개별적으로 권한을 할당하는 것보다 추가, 제거, 조정이 훨씬 효율적입니다.
다음은 두 리소스에 여러 권한을 가진 order_admin
역할의 예시입니다:

역할 간에 권한이 중복되어도 괜찮습니다.
Logto에서 역할 구성 방법을 알아보세요.
예시: 온라인 서점
온라인 서점을 관리한다고 가정해봅시다. 여기서는 시연을 위해 접근 제어 모델을 크게 단순화했습니다.
이 모델은 두 개의 주요 API 리소스, 주문과 상품으로 나뉩니다. 각각의 리소스 지표는 다음과 같습니다:
- 주문:
https://api.store.io/orders
- 상품:
https://api.store.io/products
각 리소스마다 읽기, 쓰기, 삭제 권한을 분리하고자 합니다. 그래서 총 여섯 개의 권한을 정의합니다:
https://api.store.io/orders
- 권한
read:order
- 권한
write:order
- 권한
delete:order
- 권한
https://api.store.io/products
- 권한
read:product
- 권한
write:product
- 권한
delete:product
- 권한
이 모델의 도식은 다음과 같습니다:

두 가지 유형의 관리자를 두고자 합니다: 주문 관리자와 상품 관리자
- 주문 관리자는 주문을 관리하고 상품을 볼 수 있지만 (주문은 상품으로 구성되므로), 상품을 관리할 수는 없습니다.
- 상품 관리자는 상품을 관리할 수 있으며, 주문에 대해서는 알 필요가 없습니다.
따라서 order_admin
과 product_admin
두 역할을 만들고, 권한을 다음과 같이 할당합니다:
order_admin
https://api.store.io/orders
read:order
,write:order
,delete:order
https://api.store.io/products
read:product
product_admin
https://api.store.io/products
read:product
,write:product
,delete:product
이 두 역할의 도식은 다음과 같습니다:

한 사용자에게 order_admin
과 product_admin
을 모두 할당해도 괜찮으며, 이 경우 방금 정의한 여섯 개의 모든 권한을 갖게 됩니다.
주문 관리자와 상품 관리자가 read:product
권한을 공유하며, 사용자가 가지는 최종 권한은 할당된 모든 역할의 권한의 합집합임을 유의하세요.
관련 리소스
실전 RBAC: 애플리케이션을 위한 안전한 인가 (Authorization) 구현 단계별 가이드
Logto에서 RBAC 마스터하기: 종합적인 실전 예제CIAM 102: 인가 (Authorization) & 역할 기반 접근 제어 (RBAC)