[keycloak] Keycloak 설치하기(with Kubernetes)
ruinnel
1437 Words CHANGE ME READ TIME 6 Minutes, 31 Seconds
2019-07-10 16:46 +0000
Keycloak 이란?
- Keycloak은 RatHat SSO에 사용되고 있는 오픈소스 프로젝트 입니다.
- Keycloak의 About 페이지에 의하면
- SSO(Single Sign-On)
- Identity Brokering and Social Login
- Oauth / SAML 규격으로 동작하는 다른 서비스의 ID로 로그인 기능 제공.
- Firebase에서 SNS 로그인을 통합해서 제공하듯이 유사한 기능.
- Keycloak 내부에서 한 Realm을 다른 Realm에 추가도 가능.
- User Federation
- LDAP나 Active Directory의 사용자 정보를 DB로 사용 가능.
- Client Adapters
- 다양한 언어에서 사용가능한 Client 제공
- Gatekeeper
- Keycloak의 인증 및 인가처리 Reverse Proxy.
- Admin Console
- 각종 설정 및 사용자 관리를 위한 Web Console 제공.
- Account Management Console
- 개별 사용자가 자신의 인증 정보를 설정 할수 있는 My Page 제공.
- Standard Protocols
- OpenID Connect(OAuth) 및 SAML 프로토콜 지원
- Authorization Services
- 유연한 권한 시스템 제공.
Keycloak을 어떻게 사용할 것인가?
- 사내에서 사용하는 백오피스 사이트가 여러개인데 각 사이트의 아이디 관리를 가입을 한곳(Keycloak)에서 받고 각 사이트들은 하나의 ID로 관리하는데 사용합니다.
- 더불어 패스워드 복잡도 설정 및 갱신 주기 설정, 2차인증(OTP)를 지원하므로 사내 백오피스 접속의 보안을 높이기 위해 사용할 수 있습니다.
- 유연한 권한 설정이 가능하므로 각 백오피스 사이트의 권한 관리도 한곳으로 통합 할 수 있습니다.
Kubernetes에 Keycloak 설치
- Keycloak는 Helm Chart로 제공 되고 있습니다.
- helm은 kubernetes의 패키지(?) 매니저 입니다. kubernetes에 각종 프로그램을 쉽게 설치/삭제 할 수 있도록 도와 줍니다. helm의 설치 단위가
Chart
이며 Chart는 크게 Yaml 생성을 위한 Template와 Template에 전달된 매개변수 모음(values.yaml)으로 구성되어 있습니다. - command line에서 매개변수로 설정을 할수도 있지만 변경해야 될 값들이 많으므로
values.yaml
을 수정해서 사용합니다. - 제가 설치한 환경에 맞게 설정하기 위해 수정한 부분 들입니다.
- Kubernetes는 AWS EKS를 사용
- nginx-ingress를 설치.
- AWS의 Route53에
*.mydomain.com
을 nginx-ingress 설치 후 생성된 LB로 연결.- Route53에
*.mydomain.com
를 사용하면 등록되지 않은 subdomain은 모두 이곳으로 연결되게 됩니다.
- Route53에
- RDS로 MySQL 사용.
...
keycloak:
...
# 초기 admin ID
username: keycloak
# 초기 admin password
# 파일을 저장하거나 git 등으로 관리 할 경우 비밀번호 노출 위험이 있음.
# 설치 이후 바로 암호 변경 권장.
password: "keycloak1234"
# 위에 'password'에 암호를 직접 입력하지 않고 kubernetes의 secret를 사용할 경우 패스워드가 저장된 Secret의 이름.
existingSecret: ""
# 위 'existingSecret'에 지정한 Secret 중 사용할 값이 저장된 key 값.
existingSecretKey: password
...
ingress:
# ingress 사용 여부
enabled: true
path: /
annotations: {}
# ssl 오프로딩 사용을 위한 설정
nginx.ingress.kubernetes.io/ssl-redirect: "false"
labels: {}
# key: value
hosts:
# 사용할 domain
- keycloak.mydomain.com
...
persistence:
# If true, the Postgres chart is deployed
# mysql을 사용하기 위해 false로 수정.
deployPostgres: false
# DB 종류 ("postgres", "mysql", "mariadb", "h2") 중 하나
dbVendor: mysql
# mysql 접속 정보가 저장된 kubernetes secret 이름.
existingSecret: "my-db-secret"
# 위 'existingSecret'에 지정한 Secret 중 사용할 값이 저장된 key 값.
existingSecretKey: password
# DB 접속 정보
dbName: db-name
dbHost: db-host
dbPort: 3306
dbUser: db-user
...
- 수정 후 아래와 같이 설치 합니다.
helm install --name keycloak -f values.yaml codecentric/keycloak
설치 후 해야 할일.
접속 후 admin 패스워드는 변경 하길 권장. (values.yaml 파일을 저장해두거나 git에 올려 두거나 할 경우)
- 권한 설정(Authorization) 문서