紀錄Openshift介接Keycloak與389 Directory Server

自己做完一輪後發現有很多Authentication和Authorization知識和觀念需要再補強: OAuth Flow、OpenID Connect、User federation、憑證的SAN。或許之後會在整理一篇比較偏觀念性的,並且可以對照這一篇出現的概念。

此外,Keycloak感覺十分強大,可以整合很多服務,值得進一步研究

config_overview

目標

使用389 Directory Server的帳號與密碼登入Openshift Console

前置作業

  • Openshift 4.17
    • Ingress URI: apps.foo.bar.com
  • Keycloak 22.0.4
    • 啟用HTTPS且憑證需要包含SAN(Subject Alternative Name)
    • User federation設定介接389 Directory Server
    • DNS有一筆FQDN: keycloak.bar.com

啟用HTTPS且憑證需要包含SAN(Subject Alternative Name)

參考這篇,Keycloak container啟用HTTPS

User federation設定介接389 Directory Server

使用slominskir/keycloak_ldap: Docker Compose with Keycloak and 389 LDAP Directory Server當作例子

啟動container後預設Realm會有test-realm,包含一位使用者jdoe,User federation存在一個設定test-realm-ldap-provider

keycloak_with_ldap_example

keycloak_with_ldap_example_user_federation

這位預設的使用者並無指定密碼,可以進入至ldap的container內設定

1
dsidm localhost account reset_password uid=jdoe,ou=People,dc=example,dc=com

主要設定

  • Keycloak Client
  • Openshift OAuth settings

Keycloak Client

在Keycloak端的設定新增一個Client

keycloak_create_client_1

  • Client type: OpenID Connect
  • Client ID: keycloak

須注意這邊的keycloak可以設定其他任意值,需要和後續Openshfit內的設定有關

keycloak_create_client_2

keycloak_create_client_3

須注意最後面的openid字串可以設定其他任意值,需要和後續Openshfit內的設定有關

Openshift OAuth settings

Adminitration => Cluster Settings => Configuration => OAuth
openshift_cluster_settings_oauth

Identitiy providers => Add ‘OpenID Connect’

有發生錯誤的話可以在Cluster Settings的ClusterOperators中關於authentication的Message看到相關訊息,有遇到以下幾個狀況

  • 憑證不包含SAN時,會出現OAuthServerConfigObservationDegraded: failed to apply IDP openid config: tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead
  • Issure URL有問題,有出現well-known/openid-configuration:

例如下圖

openshift_cluster_settings_oauth_openid_error

成功的話Status顯示Available且登入畫面會出現所設定的OpenID Connect

openshift_cluster_settings_oauth_openid_success_1

openshift_cluster_settings_oauth_openid_success_2

測試

觀察一下URL:https://keycloak.bar.com:8443/realms/test-realm/protocol/openid-connect/auth?client_id=keycloak&redirect_uri=https%3A%2F%2Foauth-openshift.apps.foo.bar.com%2Foauth2callback%2Fopenid&response_type=code&scope=openid&state=xxx

有client_id和redirect_uri,看起來是之前在Keycloak Client當中設定的值

openshift_cluster_settings_oauth_openid_success_3

openshift_cluster_settings_oauth_openid_success_4

可以在kubeadmin觀察,jdoe登入後在User Management => Users會出現一筆紀錄,Identities為openid:xxx

openshift_cluster_settings_oauth_openid_success_5

參考