본문 바로가기
Security/Keycloak

Keycloak 이란? 개념과 설치 실습

by wlsdn3004 2023. 4. 8.
728x90
반응형

 

기업에서 여러 애플리케이션 및 서비스를 개발하고 운영하다 보면, 다양한 인증 방식과 사용자 관리 시스템이 필요하다. 이때 Keycloak을 사용하면 중앙 집중식 인증 및 권한 관리를 할 수 있다. 

 

예를 들어 기업에서는 내부 직원과 외부 제휴 업체 직원, 그리고 각각의 권한별로 애플리케이션 접근을 제한하고자 할 때, Keycloak을 사용하면 중앙에서 사용자 인증과 권한 부여를 관리할 수 있다. 이렇게 하면 각 애플리케이션이나 서비스마다 인증 시스템을 개발하거나 유지보수할 필요가 없어져서 개발 비용과 시간을 줄일 수 있다.

 

Keycloak이란?

Keycloak은 사용자 인증과 권한 부여를 위한 오픈 소스 Identity and Access Management (IAM) 솔루션이다. 이를 이용하여 여러 서비스 및 애플리케이션에 대한 사용자 인증 및 권한 부여를 중앙에서 관리할 수 있으며, SSO를 통해 사용자는 여러 서비스나 애플리케이션에 반복적으로 로그인하는 불편함을 해결할 수 있다.

 

Keycloak은 다양한 인증 방식을 지원하고, 강력한 보안 기능을 제공하여 사용자 인증과 권한 부여 시스템을 구축할 수 있다. 사용자 정보를 안전하게 저장하며, 다중 요소 인증 (MFA) 및 비밀번호 정책 등의 보안 기능을 제공한다.

 

또한 Keycloak은 사용자 관리 기능을 제공하며, 중앙에서 사용자 프로필 정보를 관리할 수 있다. 사용자 암호 분실 시 초기화 등의 기능을 제공하여 사용자의 편의성을 높일 수 있다.

 

Keycloak은 오픈 소스로 개발되어 있어서 무료로 사용할 수 있으며, 커뮤니티에서 개발 및 유지보수가 활발하게 이루어지므로 안정성과 신뢰성이 높다. 또한 다양한 클라우드 환경에서 쉽게 배포할 수 있도록 설계되어 있어서 Docker 컨테이너를 사용하거나 Kubernetes나 Red Hat OpenShift와 같은 컨테이너 오케스트레이션 시스템에서 실행할 수 있다.

 

Keycloak을 사용하면 아래와 같은 장점이 있다.

  1. 보안성
    Keycloak은 다양한 인증 방식을 지원하고 강력한 보안 기능을 제공하여 인증 및 권한 부여 시스템을 구축할 수 있다. 사용자의 인증 정보를 안전하게 저장하고, 다중 요소 인증 (MFA) 및 비밀번호 정책 등의 보안 기능을 제공한다.
  2. 편의성
    Keycloak은 SSO (Single Sign-On)을 제공하여 사용자가 여러 개의 서비스나 애플리케이션을 사용할 때 다른 인증 시스템에 반복적으로 로그인하는 번거로움을 없앨 수 있다.
  3. 사용자 관리
    Keycloak은 중앙에서 사용자 정보를 관리할 수 있는 기능을 제공한다. 사용자 프로필 정보를 사용자가 직접 수정할 수 있도록 지원하며, 사용자 암호 분실 시 초기화 등의 기능을 제공한다.
  4. 오픈 소스
    Keycloak은 오픈 소스로 개발되어 있으며, 무료로 사용할 수 있다. 또한, 커뮤니티에서 개발 및 유지보수가 활발히 이루어지고 있어서 안정성과 신뢰성이 높다.
  5. 클라우드 호환성
    Keycloak은 다양한 클라우드 환경에서 쉽게 배포할 수 있도록 설계되었다. Docker 컨테이너를 사용하거나, Kubernetes나 Red Hat OpenShift와 같은 컨테이너 오케스트레이션 시스템에서 실행할 수 있다.

 

이번 포스팅에서는 AWS EKS 환경에서 Helm Chart를 이용하여 Keycloak을 구성하는 실습을 다룬다.

 

<실습>


전제 조건

  • AWS EKS Cluster
  • Helm CLI 도구

설치 환경

  • AWS EKS : v1.24.17
  • Helm : v3.8.2

설치 버전

  • Keycloak Helm chat : 14.0.0
  • Keycloak app : 21.0.2

 

 

Helm 설치 전 override_values.yaml 파일 작성한다.

## override_values.yaml

## keyclok admin 유저 ID/Passwd 설정
auth:
  adminUser: admin
  adminPassword: "admin"

## 외부로 진입할 AWS NLB 프로비저닝 설정
service:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
  type: LoadBalancer
  http:
    enabled: true
  ports:
    http: 80
    https: 443    

## https self-signed
tls:
  enabled: true
  autoGenerated: true


## 기본 Helm Chart에서 사용하는 DB 비활성화
postgresql:
  enabled: true     ## external DB 사용할 경우 false로 변경
  auth:
    postgresPassword: ""
    username: admin_keycloak
    password: ""
    database: db_keycloak
    existingSecret: ""
  architecture: standalone

## external DB 사용할 경우 정보 입력
externalDatabase:
  host: ""
  port: 5432
  user: 
  database: 
  password: ""
  existingSecret: ""
  existingSecretPasswordKey: ""

 

[참고]
Client가 접근하는 L/B 에서 TLS Termination을 하고, 내부는 HTTP 통신하는 구성을 할 경우 아래와 같이 proxy mode를 "edge"로 변경해야 한다. 기본값은 "passthrough"이다.

## override_values.yaml
...

tls:
  enabled: false
  autoGenerated: false
proxy: edge

 

Helm 사용하여 설치한다.

## helm repo 등록
$ helm repo add bitnami https://charts.bitnami.com/bitnami

## helm install 설치
$ helm install keycloak --create-namespace -n keycloak bitnami/keycloak -f override_values.yaml

 

잘 설치되었는지 확인한다.

## Password 확인
$ kubectl get secret --namespace keycloak keycloak -o jsonpath="{.data.admin-password}" | base64 -d
admin

$ helm list -n keycloak
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
keycloak        keycloak        1               2023-04-08 01:37:24.279821831 +0000 UTC deployed        keycloak-14.0.0 21.0.2

$ kubectl get all -n keycloak
NAME                        READY   STATUS    RESTARTS   AGE
pod/keycloak-0              1/1     Running   0          3m32s
pod/keycloak-postgresql-0   1/1     Running   0          3m32s

NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP                                                   PORT(S)        AGE
service/keycloak                 LoadBalancer   10.100.15.2     aaae840ca965d451c9b90cd.elb.ap-northeast-2.amazonaws.com      80:32443/TCP   3m32s
service/keycloak-headless        ClusterIP      None            <none>                                                        80/TCP         3m32s
service/keycloak-postgresql      ClusterIP      10.100.124.40   <none>                                                        5432/TCP       3m32s
service/keycloak-postgresql-hl   ClusterIP      None            <none>                                                        5432/TCP       3m32s

NAME                                   READY   AGE
statefulset.apps/keycloak              1/1     3m32s
statefulset.apps/keycloak-postgresql   1/1     3m32s

 

정상 설치가 되었으면 Web UI 대시보드 화면으로 접근해 보자. 접근은 위에서 생성된 AWS NLB로 접근한다.

admin 관리 콘솔로 접근해 보자.

 

Keycloak 설치 때 설정한 ID/Passwd를 입력하고 로그인한다.

Keycloak 로그인 화면

 

Keycloak Web Ui 대시보드 화면을 볼 수 있다.

(화면은 Keycloak 버전마다 차이가 있을 수 있음)

Keycloak Web Ui 대시보드

 

 

마치며


이처럼 Keycloak의 Helm Chart를 이용하여 Kubernetes 환경에 설치한다면 간단하게 구축할 수 있다.

이번 글에서 Keycloak을 설치한 내용을 바탕으로,  Keycloak과 다른 솔루션을 연동하여 SSO 로그인을 구현하는 실습을 진행할 예정이다.

반응형

댓글