Realm, Client, Role, User 구조
1️⃣ Realm: 멀티 테넌시 개념
1. Realm이란?
Realm은 Keycloak에서 인증 및 권한 부여를 독립적으로 관리할 수 있는 보안 도메인입니다. 하나의 Keycloak 서버에서 여러 개의 Realm을 만들 수 있으며, 서로 완전히 격리됩니다.
🔐 한 Realm의 사용자, 클라이언트, 역할은 다른 Realm과 공유되지 않습니다.
2. 주요 활용 시나리오
- 회사 A, B 고객사 분리 운영
- Dev / Staging / Production 환경 분리
- SaaS 다중 테넌시 구조
3. 시각적 구조
[Keycloak Server]
├── Master Realm (관리용)
├── CompanyA-Realm
│ ├── Users
│ ├── Clients
│ └── Roles
└── CompanyB-Realm
├── Users
├── Clients
└── Roles
2️⃣ Client: 어플리케이션 등록과 Client Type
1. Client란?
Keycloak에서 Client는 인증을 필요로 하는 애플리케이션 또는 서비스를 의미합니다.
- 웹 앱, 모바일 앱, 백엔드 API 서버 등
- Keycloak과 통신하며 로그인/토큰을 처리
2. Client Type 종류
타입 | 설명 |
---|---|
public | 비밀 키 없이 접근. 프론트엔드 앱에 적합 (e.g. React) |
confidential | 클라이언트 시크릿 필요. 백엔드 서버, API 서버 등 |
bearer-only | 로그인 UI 없이 토큰만 검증. API Gateway에 적합 |
3. 예시
[Client: my-app]
↓ 요청
[Keycloak: 인증 & 토큰 발급]
↓ 토큰 전달
[my-app 내부: 사용자 정보 확인]
3️⃣ Role: Realm Role vs Client Role
1. Role이란?
사용자 또는 그룹에게 할당할 수 있는 권한/역할을 정의합니다. RBAC (Role-Based Access Control)의 핵심 요소입니다.
2. Role의 종류
종류 | 설명 |
---|---|
Realm Role | 전체 Realm 수준에서 공통 사용 (e.g., admin , user ) |
Client Role | 특정 Client 전용 역할 (e.g., my-api.admin ) |
🔄 사용자에게 Realm Role과 Client Role을 동시에 할당할 수 있습니다.
3. 구조 예시
[User: Alice]
├── Realm Roles: admin
└── Client Roles:
└── my-api: reader
🖼️ Role 할당 플로우
[User] ← (할당) ← [Realm Role] / [Client Role]
↓
[Token에 포함됨]
↓
[Application에서 권한 확인]
4️⃣ User: 속성, 그룹, Credential 구조
1. User 구조
Keycloak의 사용자 객체는 다음과 같은 요소로 구성됩니다:
- 기본 정보: ID, 이메일, 이름
- 속성 (Attributes): 추가 사용자 정의 정보
- 자격 증명 (Credential): 비밀번호, OTP, WebAuthn
- 역할: Realm/Client 역할
- 그룹: 사용자 그룹으로 Role 묶음 구성 가능
2. 사용자 속성 구조 예시
{
"username": "alice",
"email": "alice@example.com",
"attributes": {
"department": ["engineering"],
"employeeId": ["A123"]
}
}
3. 사용자 → 그룹 → 역할 예시
[User: Bob]
└── Group: dev-team
└── Role: my-app.developer
🖼️ 사용자 인증과 역할 구조
+------------+
| User |
+------------+
↓ 로그인
+------------+
| Credentials|
+------------+
↓ 인증 성공
+------------+
| Assigned Roles (Realm + Client) |
+------------+
↓
+------------+
| Access Token (JWT) |
+------------+
🔚 요약
구성 요소 | 설명 | 예시 |
---|---|---|
Realm | 멀티 테넌시 분리 단위 | dev-realm , prod-realm |
Client | 인증 대상 앱/서비스 | frontend-app , api-service |
Role | 권한 부여 단위 | admin , viewer , api.editor |
User | 최종 사용자 | alice , bob |
마지막 수정일자