[keycloak] Keycloak 설치하기(with Kubernetes)


Keycloak 이란?

  • KeycloakRatHat 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은 모두 이곳으로 연결되게 됩니다.
    • 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

설치 후 해야 할일.


관련글 목록

1. Keycloak를 이용한 SSO 구축

2. Keycloak 설치하기(with Kubernetes)

3. RADIUS 서버 설치 및 Keycloak 연동 설정

4. Linux 서버의 SSH(+ sudo) 인증 설정

5. EAP-TTLS & PAP 접속 설정

번외. Custom Linux PAM을 이용해 Keycloak 계정으로 ssh, sudo 인증 하기

번외. TinyRadius로 RADIUS 서버 만들기(feat. netty)

comments powered by Disqus