인가(Authorization) 구성
1️⃣ Keycloak Authorization Services 이해
1. Keycloak의 인가 서비스란?
Keycloak은 단순한 인증(로그인)뿐 아니라, 리소스 접근을 세밀하게 제어하는 Authorization Service를 제공합니다.
즉, 어떤 사용자(또는 역할)가 어떤 리소스에 어떤 조건으로 접근할 수 있는지를 정의합니다.
🖼️ Keycloak 인가 아키텍처 다이어그램
+---------+ +---------------------+
| Browser | <---> | Application |
+---------+ +----------+----------+
|
v
+--------------+
| Keycloak |
| Authorization|
+--------------+
| - Resource |
| - Policy |
| - Permission |
+--------------+
2. 주요 용어 정리
용어 | 설명 |
---|---|
Resource | 보호 대상 (예: 문서, API, 버튼 등) |
Policy | 접근 조건 정의 (역할, 속성 등) |
Permission | 리소스 + 정책의 매핑 |
3. 인가 흐름 요약
[사용자 요청]
↓
[Keycloak Token 검사]
↓
[리소스 → 정책 평가 → 허용 여부 판단]
↓
[Access Granted or Denied]
2️⃣ RBAC (Role-Based Access Control)
1. RBAC 개념
RBAC는 역할(Role) 기반으로 권한을 부여하는 방식입니다.
예를 들어:
admin
역할은 모든 문서 편집 가능user
역할은 읽기만 가능
2. Keycloak에서의 구성
- Role 생성
- Realm Role or Client Role 생성
- 사용자에게 역할 할당
- 정책(Policy) 생성
Role-based policy
사용
- 리소스에 퍼미션 부여
🖼️ RBAC 흐름
[사용자] --(Role: admin)--> [Keycloak]
↓
[정책: admin만 허용] → [문서 편집 허용]
3️⃣ ABAC (Attribute-Based Access Control)
1. ABAC 개념
ABAC는 사용자나 요청의 속성(Attribute) 에 따라 접근 제어를 수행합니다.
예시:
부서=IT
이고근무지=서울
인 경우만 허용- 사용자의
email_verified=true
조건 시 허용
2. Keycloak에서의 구성
- 사용자 속성 등록
Attributes
:department: IT
,location: Seoul
- JavaScript 기반 정책 생성
- 조건 검사 코드를 직접 작성
- 퍼미션에 적용
📄 정책 예시 (JavaScript)
if (user && user.getAttribute("department")[0] === "IT") {
$evaluation.grant();
}
🖼️ ABAC 흐름 다이어그램
+-----------------------------+
| Request from user "John" |
+-----------------------------+
| Attributes: |
| department = IT |
| location = Seoul |
+-----------------------------+
↓
[Policy 검사 → 조건 만족]
↓
[Access Granted]
4️⃣ 리소스, 정책, 퍼미션 구조
1. Resource 정의
리소스는 보호 대상입니다. 예:
/api/project
문서-123
버튼-삭제
{
"name": "delete-project",
"uri": "/api/project/delete",
"type": "API"
}
2. Policy 정의
정책은 접근 조건입니다. 여러 타입이 있습니다:
- Role-based
- JS-based (Attribute 검사)
- Time-based
- Group-based
3. Permission 정의
퍼미션은 Resource + Policy를 매핑하여 실제 보호 규칙을 만드는 구성입니다.
퍼미션 예시
- Resource:
문서-삭제
- Policy:
admin-only-policy
→ “admin만 문서 삭제 가능”
🖼️ Permission 매핑 흐름
+----------------+ +-----------------+
| Resource | ---> | Policy |
| delete-project | | Role: admin |
+----------------+ +-----------------+
↓
[Permission: allow]
4. 실습 예시 정리
구성 요소 | 값 |
---|---|
리소스(Resource) | /api/secret-data |
정책(Policy) | Role: secret-reader |
퍼미션(Permission) | 리소스 + 정책 |
→ secret-reader
역할이 있는 사용자만 /api/secret-data
접근 가능
🔚 요약
개념 | 설명 |
---|---|
RBAC | 역할 기반 접근 제어, 간단하고 직관적 |
ABAC | 속성 기반 제어, 유연하지만 복잡 |
Policy | 접근 허용 조건 정의 |
Permission | 리소스 + 정책 매핑 |
Resource | 보호하려는 API 또는 오브젝트 |
마지막 수정일자