인가(Authorization) 구성

인가(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에서의 구성

  1. Role 생성
    • Realm Role or Client Role 생성
  2. 사용자에게 역할 할당
  3. 정책(Policy) 생성
    • Role-based policy 사용
  4. 리소스에 퍼미션 부여

🖼️ RBAC 흐름

[사용자] --(Role: admin)--> [Keycloak]
[정책: admin만 허용] → [문서 편집 허용]

3️⃣ ABAC (Attribute-Based Access Control)

1. ABAC 개념

ABAC는 사용자나 요청의 속성(Attribute) 에 따라 접근 제어를 수행합니다.

예시:

  • 부서=IT이고 근무지=서울인 경우만 허용
  • 사용자의 email_verified=true 조건 시 허용

2. Keycloak에서의 구성

  1. 사용자 속성 등록
    • Attributes: department: IT, location: Seoul
  2. JavaScript 기반 정책 생성
    • 조건 검사 코드를 직접 작성
  3. 퍼미션에 적용

📄 정책 예시 (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 또는 오브젝트

RSS Feed
마지막 수정일자