기업에서 여러 애플리케이션 및 서비스를 개발하고 운영하다 보면, 다양한 인증 방식과 사용자 관리 시스템이 필요하다. 이때 Keycloak을 사용하면 중앙 집중식 인증 및 권한 관리를 할 수 있다.
예를 들어 기업에서는 내부 직원과 외부 제휴 업체 직원, 그리고 각각의 권한별로 애플리케이션 접근을 제한하고자 할 때, Keycloak을 사용하면 중앙에서 사용자 인증과 권한 부여를 관리할 수 있다. 이렇게 하면 각 애플리케이션이나 서비스마다 인증 시스템을 개발하거나 유지보수할 필요가 없어져서 개발 비용과 시간을 줄일 수 있다.
Keycloak이란?
Keycloak은 사용자 인증과 권한 부여를 위한 오픈 소스 Identity and Access Management (IAM) 솔루션이다. 이를 이용하여 여러 서비스 및 애플리케이션에 대한 사용자 인증 및 권한 부여를 중앙에서 관리할 수 있으며, SSO를 통해 사용자는 여러 서비스나 애플리케이션에 반복적으로 로그인하는 불편함을 해결할 수 있다.
Keycloak은 다양한 인증 방식을 지원하고, 강력한 보안 기능을 제공하여 사용자 인증과 권한 부여 시스템을 구축할 수 있다. 사용자 정보를 안전하게 저장하며, 다중 요소 인증 (MFA) 및 비밀번호 정책 등의 보안 기능을 제공한다.
또한 Keycloak은 사용자 관리 기능을 제공하며, 중앙에서 사용자 프로필 정보를 관리할 수 있다. 사용자 암호 분실 시 초기화 등의 기능을 제공하여 사용자의 편의성을 높일 수 있다.
Keycloak은 오픈 소스로 개발되어 있어서 무료로 사용할 수 있으며, 커뮤니티에서 개발 및 유지보수가 활발하게 이루어지므로 안정성과 신뢰성이 높다. 또한 다양한 클라우드 환경에서 쉽게 배포할 수 있도록 설계되어 있어서 Docker 컨테이너를 사용하거나 Kubernetes나 Red Hat OpenShift와 같은 컨테이너 오케스트레이션 시스템에서 실행할 수 있다.
Keycloak을 사용하면 아래와 같은 장점이 있다.
- 보안성
Keycloak은 다양한 인증 방식을 지원하고 강력한 보안 기능을 제공하여 인증 및 권한 부여 시스템을 구축할 수 있다. 사용자의 인증 정보를 안전하게 저장하고, 다중 요소 인증 (MFA) 및 비밀번호 정책 등의 보안 기능을 제공한다. - 편의성
Keycloak은 SSO (Single Sign-On)을 제공하여 사용자가 여러 개의 서비스나 애플리케이션을 사용할 때 다른 인증 시스템에 반복적으로 로그인하는 번거로움을 없앨 수 있다. - 사용자 관리
Keycloak은 중앙에서 사용자 정보를 관리할 수 있는 기능을 제공한다. 사용자 프로필 정보를 사용자가 직접 수정할 수 있도록 지원하며, 사용자 암호 분실 시 초기화 등의 기능을 제공한다. - 오픈 소스
Keycloak은 오픈 소스로 개발되어 있으며, 무료로 사용할 수 있다. 또한, 커뮤니티에서 개발 및 유지보수가 활발히 이루어지고 있어서 안정성과 신뢰성이 높다. - 클라우드 호환성
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 Web Ui 대시보드 화면을 볼 수 있다.
(화면은 Keycloak 버전마다 차이가 있을 수 있음)
마치며
이처럼 Keycloak의 Helm Chart를 이용하여 Kubernetes 환경에 설치한다면 간단하게 구축할 수 있다.
이번 글에서 Keycloak을 설치한 내용을 바탕으로, Keycloak과 다른 솔루션을 연동하여 SSO 로그인을 구현하는 실습을 진행할 예정이다.
'Security > Keycloak' 카테고리의 다른 글
Keycloak + Terraform Cloud SAML SSO 로그인 연동 (0) | 2024.02.19 |
---|---|
Keycloak을 활용한 Kubernetes 사용자 인증 및 권한 관리 (4) | 2023.12.19 |
Keycloak + saml2aws로 AWS 임시 자격 증명 얻기 (0) | 2023.05.09 |
Keycloak + AWS saml SSO 로그인 연동 (2) | 2023.05.09 |
Keycloak + Vault 연동 SSO(Single Sign-On) 구현하기 (2) | 2023.04.12 |
댓글