Keycloak
Keycloak은 RedHat에서 개발한 오픈소스 IAM(Identity and Access Management) 솔루션이다.
현대 애플리케이션에서 필수적인 사용자 인증과 접근 제어를 손쉽게 구현할 수 있게 해주는 도구이며, SSO(Single Sign On) 지원, 다양한 프로토콜 활용(Oauth, OIDC 및 SAML 등) 및 용이한 소셜 로그인 통합과 같은 장점으로 많은 기업에서 채택하여 사용하고 있다.
간단한 예시로는 대시보드 오픈소스(Kibana, Grafana 등)를 사용하면, 사용하는 오픈소스가 늘어나면서 더불어 사용자까지도 늘어나게 된다.
이는 사용자 관리에 있어서 관리자의 부하가 점점 늘어날 수밖에 없다.
그러할 때 Keycloak을 활용하면, 사용자 통합 관리가 가능해지고, 이는 업무 부하를 낮출 수 있게 되는 것이다.
설치
쿠버네티스 환경에서는, 아래 yaml을 활용하여 간단하게 설치가 가능하다.
apiVersion: v1
kind: Service
metadata:
name: keycloak
labels:
app: keycloak
spec:
ports:
- name: http
port: 8080
targetPort: 8080
nodePort: <접속할 노드 포트>
selector:
app: keycloak
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: keycloak
labels:
app: keycloak
spec:
replicas: 1
selector:
matchLabels:
app: keycloak
template:
metadata:
labels:
app: keycloak
spec:
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:25.0.4
args: ["start-dev"]
env:
- name: KEYCLOAK_ADMIN
value: "admin"
- name: KEYCLOAK_ADMIN_PASSWORD
value: "1234"
- name: KC_PROXY
value: "edge"
ports:
- name: http
containerPort: 8080
readinessProbe:
httpGet:
path: /realms/master
port: 8080
volumeMounts:
- name: keycloak-data
mountPath: /opt/keycloak/data
volumes:
- name: keycloak-data
emptiDir: {}
오브젝트를 생성 후 선언한 NodePort로 접속한다면 아래와 같이 로그인 창이 나오는 것을 볼 수 있다.
환경변수로 주입했던 관리자의 아이디 및 비밀번호(admin / 1234)로 로그인하면 메인 대시보드를 확인할 수 있다.
※ Ingress 적용 시 아래 Reference를 참조하면 된다.
https://www.keycloak.org/getting-started/getting-started-kube
설치를 마쳤다면, 실제 운영에 들어가기 전, 아래 목록을 하나씩 수행하는 것이 권고된다.
- PostgreSQL과 같은 데이터베이스와 통합
- SSL 인증서 적용
- admin의 비밀번호를 더욱 안전한 것으로 변경
아래는 관련 공식 문서이다.