
Keycloak 주요 개념 및 컴포넌트 상세 설명
Realm (영역)
- Realm은 Keycloak에서 논리적으로 나누어진 관리 영역을 의미합니다. "왕국"이라는 뜻처럼 각 Realm은 서로 완전히 독립적인 자원을 갖는다.
- 사용자, 인증, 인가, 권한, 그룹이 관리되는 범위다.
- 한 Realm 내의 Client들은 서로 SSO(Single Sign-On)를 공유한다.
- 각 Realm은 고유한 설정, 정책, 사용자 데이터베이스를 가진다
- 여러 환경(개발/테스트/운영) 또는 다른 서비스 라인에 대해 별도의 Realm을 생성할 수 있다
- Master Realm은 Keycloak 설치 시 기본으로 제공되는 관리용 영역이다
Client (클라이언트)
- Client는 Keycloak에 사용자 인증을 요청하는 엔티티로, 일반적으로 애플리케이션이나 서비스를 의미한다.
- Keycloak의 보안 서비스를 이용하는 애플리케이션이다.
- 액세스 토큰이나 ID 토큰을 요청하고 사용한다.
- 웹 애플리케이션, 모바일 앱, RESTful 서비스 등이 모두 Client가 될 수 있다.
- Client ID와 Client Secret 등의 자격 증명을 통해 Keycloak과 통신한다.
- Client 유형은 public, confidential, bearer-only 등으로 구분된다.
User (사용자)
- User는 Keycloak 시스템에 로그인할 수 있는 실제 사용자 엔티티를 의미한다.
- 사용자명, 이메일, 주소, 전화번호 등 개인 정보를 포함한다.
- Realm 단위로 관리되어, 한 Realm에 생성된 사용자는 다른 Realm에서 사용할 수 없다.
- 그룹에 소속되거나 역할이 할당될 수 있다.
- 내장된 사용자 관리 기능 또는 외부 사용자 저장소(LDAP, Active Directory)와 연동할 수 있다.
Role (역할)
- Role은 사용자의 유형과 카테고리를 식별하고, 접근 권한을 정의하는 데 사용된다.
- 사용자가 수행할 수 있는 작업을 정의한다(admin, user, manager 등).
- 개별 사용자에게 직접 권한을 부여하기보다 역할을 통해 권한을 관리한다.
- Realm Role(전체 영역에 적용)과 Client Role(특정 클라이언트에만 적용)로 구분된다.
- Composite Role을 통해 여러 역할을 하나로 결합할 수 있다.
Group (그룹)
- Group은 사용자들의 집합으로, 역할 관리를 간소화한다.
- 여러 사용자를 하나의 그룹으로 묶어 관리할 수 있다.
- 역할을 그룹에 할당하면 그룹의 모든 구성원이 해당 역할을 상속받는다.
- 계층 구조로 구성할 수 있어 조직 구조를 반영할 수 있다.
- 사용자는 여러 그룹에 속할 수 있다.
Credential (자격 증명)
- Credential은 Keycloak이 사용자를 인증하기 위해 사용하는 데이터다.
- 비밀번호, OTP(일회용 비밀번호), 디지털 인증서, 지문 등 다양한 형태가 있다.
- 다양한 인증 방식(Multi-factor Authentication)을 지원한다.
- 비밀번호 정책(강도, 만료일, 이력 관리 등)을 설정할 수 있다.
- 사용자별로 필요한 자격 증명 유형을 구성할 수 있다.
Consent (동의)
- Consent는 사용자가 클라이언트에게 자신의 정보에 대한 접근 권한을 부여하는 과정이다.
- 관리자가 클라이언트의 인증 프로세스 참여 전에 사용자 동의를 요구할 수 있다.
- 사용자는 자격 증명을 제공한 후 권한 부여 요청에 대한 동의 여부를 결정할 수 있다.
- 어떤 정보가 어떤 클라이언트에게 공유되는지 투명하게 관리된다.
- 사용자는 이전에 제공한 동의를 계정 콘솔에서 관리할 수 있다.
Client Scope (클라이언트 스코프)
- Client Scope는 클라이언트가 요청할 수 있는 권한 범위를 정의한다.
- 액세스 토큰 내 선언된 역할을 제한하는 메커니즘이다.
- 새로운 클라이언트 생성 시 공통 설정을 쉽게 적용할 수 있다.
- Protocol Mapper를 정의해 토큰에 추가할 클레임을 관리한다.
- Default와 Optional로 구분하여 클라이언트에 자동 또는 선택적으로 적용할 수 있다.
Client Role (클라이언트 역할)
- Client Role은 특정 클라이언트에만 적용되는 역할이다.
- 클라이언트 애플리케이션에 고유한 역할을 정의할 수 있다.
- 해당 클라이언트에 전담된 역할 네임스페이스를 제공한다.
- 클라이언트별로 세분화된 권한 관리가 가능하다.
- 토큰에 포함되어 클라이언트 애플리케이션에서 권한 검사에 사용된다.
Identity Provider (신원 제공자)
- Identity Provider는 사용자 인증을 대신 처리해주는 외부 시스템이다.
- Google, Facebook, GitHub 등 소셜 로그인 서비스와 연동할 수 있다.
- SAML, OpenID Connect 등의 표준 프로토콜을 지원하는 외부 IdP와 연결 가능하다.
- 사용자는 로그인 화면에서 다양한 IdP 중 하나를 선택할 수 있다.
- 각 Realm은 여러 외부 Identity Provider와 통합할 수 있다.
Identity Brokering (신원 중개)
- Identity Brokering은 외부 Identity Provider를 통한 인증을 Keycloak이 중개하는 기능이다.
- 사용자가 기존 계정(Google, Facebook 등)으로 로그인할 수 있게 한다.
- 다른 조직이나 시스템 간의 사용자 인증을 통합한다.
- 사용자 정보를 매핑하여 Keycloak 내 사용자 프로필을 자동 생성할 수 있다.
- First Broker Login Flow를 통해 최초 로그인 시 추가 검증 절차를 구성할 수 있다.
User Federation (사용자 연동)
- User Federation은 외부 사용자 저장소와 Keycloak을 연결하는 기능이다.
- LDAP, Active Directory 등 외부 사용자 데이터베이스와 연계한다.
- 기존 사용자 정보를 마이그레이션하지 않고 활용할 수 있다.
- 사용자 정보를 실시간으로 동기화하거나 캐싱할 수 있다.
- 속성 매핑을 통해 외부 저장소의 데이터를 Keycloak 형식으로 변환한다.
Session (세션)
- Session은 사용자의 인증 상태와 관련된 정보를 관리한다.
- SSO Session Settings: 단일 로그인 세션의 수명주기를 관리한다.
- Client Session Settings: 클라이언트별 세션을 독립적으로 설정할 수 있다.
- Offline Session Settings: 오프라인 상태에서도 액세스할 수 있는 장기 세션을 관리한다.
- 세션 유휴 시간, 최대 지속 시간, Remember Me 기능 등을 세밀하게 설정할 수 있다.
Adapter (어댑터)
- Adapter는 애플리케이션이 Keycloak과 안전하게 통신하도록 지원하는 라이브러리다.
- 다양한 프로그래밍 언어와 프레임워크(Java, JavaScript, Node.js, .NET 등)를 위한 어댑터를 제공한다.
- 토큰 검증, 세션 관리, 권한 검사 등의 기능을 애플리케이션에 통합한다.
- 애플리케이션 환경에 설치되어 Keycloak과의 인증 및 권한 부여 통신을 자동화힌다.
- 오픈소스 및 서드파티 어댑터도 사용 가능하다.
Theme (테마)
- Theme는 Keycloak의 UI를 사용자 정의할 수 있는 요소다.
- 로그인, 계정 관리, 관리자 콘솔 등 다양한 화면의 모양을 변경할 수 있다.
- HTML 템플릿, CSS, 자바스크립트, 이미지, 메시지 파일로 구성된다.
- Freemarker 템플릿 엔진을 사용하여 동적 콘텐츠를 생성한다.
- 기업 브랜딩에 맞게 로고, 색상, 폰트 등을 맞춤 설정할 수 있다.
Event (이벤트)
- Event는 Keycloak 시스템 내에서 발생하는 주요 활동에 대한 기록이다.
- 로그인, 로그아웃, 계정 생성, 역할 할당 등의 이벤트를 추적한다.
- 관리자 콘솔에서 이벤트 로그를 조회하고 필터링할 수 있다.
- 이벤트 저장 기간, 저장할 이벤트 유형을 설정할 수 있다.
- 외부 데이터베이스에 이벤트를 저장하여 감사 및 분석에 활용할 수 있다.
Protocol Mapper (프로토콜 매퍼)
- Protocol Mapper는 사용자 정보를 토큰이나 SAML 어설션에 매핑하는 역할을 한다.
- 사용자 속성, 그룹 멤버십, 역할 등을 토큰 클레임으로 변환한다.
- 클라이언트 스코프 수준에서 정의하여 여러 클라이언트에서 재사용할 수 있다.
- 토큰에 추가되는 정보를 세밀하게 제어할 수 있다.
- 표준 매퍼 외에도 사용자 정의 매퍼를 개발할 수 있다.
Admin Console (관리 콘솔)
- Admin Console은 Keycloak 시스템을 관리하기 위한 웹 기반 인터페이스다.
- 사용자, 클라이언트, 역할, 그룹 등을 관리할 수 있다.
- Realm 설정, 인증 흐름, 토큰 설정 등을 구성할 수 있다.
- Identity Provider 및 User Federation 연동을 설정할 수 있다.
- 이벤트 로그, 세션 관리 등 시스템 모니터링 기능을 제공한다.
Account Console (계정 콘솔)
- Account Console은 사용자가 자신의 계정 정보를 관리할 수 있는 인터페이스다.
- 사용자가 프로필 정보, 비밀번호, 인증 방법 등을 변경할 수 있다.
- 연결된 소셜 계정을 관리할 수 있다.
- 활성 세션을 확인하고 로그아웃할 수 있다.
- 클라이언트에 제공한 동의 내역을 확인하고 관리할 수 있다.
SPI (Service Provider Interface)
- SPI는 Keycloak의 기능을 확장하거나 커스터마이즈할 수 있는 인터페이스다.
- 다양한 기능 영역(테마, 사용자 저장소, 인증 등)에 대한 확장 포인트를 제공한다.
- 자체 구현을 개발하여 Keycloak의 동작을 사용자 정의할 수 있다.
- ProviderFactory와 Provider 인터페이스를 구현하여 확장 모듈을 개발한다.
- 사용 가능한 SPI에는 AuthenticatorFactory, UserStorageProviderFactory 등이 있다.
Kerberos
- Kerberos는 Keycloak에서 지원하는 네트워크 인증 프로토콜이다.
- 윈도우 도메인 환경에서 SSO를 구현하는 데 사용된다.
- Active Directory와 연동하여 윈도우 계정으로 자동 로그인할 수 있다.
- SPNEGO 프로토콜을 통한 브라우저 기반 SSO를 지원한다.
- User Federation과 함께 사용하여 기업 환경의 인증 시스템과 통합할 수 있다.