お品書き
1. やること
2. 検証構成
3. Active Directory(LDAP)側の設定
4. Keycloak側の設定
5. 動作確認
6. まとめ
1.やること
アドベントカレンダー11日目はKeycloakの機能として提供されている「ユーザーフェデレーション機能」を利用した、Active Directory(以下、AD)でのLDAP認証および情報の連携を試してみようと思います。
認証だけでなく、ADに登録されているユーザー情報をKeycloakへ一括登録したり、逆にKeycloakからADにユーザー情報を登録したりといったこともついでに試してみました。
2.検証構成
役割 | OS | アプリケーション | プライベートIPアドレス |
---|---|---|---|
SSOサーバ | Ubutu 22.04.3 LTS | Keycloak ver.22.0.2 | 172.26.22.26 |
ADサーバ | Windows Server 2022 | Active Directory | 172.26.22.94 |
※AWS上のEC2で構築し、サイズはt2.microで統一
3.Active Directory(LDAP)側の設定
1. ADのインストール(省略)
下記のサイトを参考にインストールしました。
2. ドメインの作成
今回は「example.com」で作成しました。
3. ログインテスト用ユーザの作成(ldap-user,ldap-user2)
※バインド用のユーザは新規に作成してもいいが、今回はAdministratorを使用しました。
※ADは特に設定不要でLDAPが利用可能です。
4.Keycloak側の設定
今回使用するレルムはldapレルムとします。
1. Keycloakの管理コンソールにログイン
localhost以外でアクセスする場合は、初期設定で「https required」になっている場合があり
keycloakを起動しているサーバのターミナルで下記のコマンドでhttpsの強制を解除してください。
./kcadm.sh config credentials --server http://localhost:8080/ --realm master --user admin
./kcadm.sh update realms/master -s sslRequired=NONE
※今回はテスト環境なのでHTTPで検証しております。本番環境においては基本HTTPSが必須となりますのでご注意ください。
2. 左メニューバーから、demoレルムを選択
3. 左メニューバーで「User federation」をクリック
4. プロバイダーを追加...からLDAPを選択
5. 以下のように設定値を入力して、保存をクリック
UI display name:任意
Vendor:ActiveDirectory
Connection URL:ldap://サーバのIP
Bind DN:cn=バインドユーザ名,cn=Users,dc=ドメイン名,dc=ドメイン名
Bind credentials:バインドユーザのパスワード
Edit mode:WRITABLE
Users DN:cn=Users,dc=ドメイン名,dc=ドメイン名
Username LDAP attribute&RDN LDAP attribute:cn
UUID LDAP attribute:objectGUID
User object classes:top, person, organizationalPerson, user
Import users:ON
Sync Registrations:ON
上記以外はデフォルトのままでいきました。
5.動作確認
ログインテスト
- SSOサーバにアクセス出来る端末でhttp://172.26.22.26:8080/realms/ldap/account/ にアクセス
- 右上の「Sign in」をクリック
- ユーザ名(cn)とパスワードを入力してログイン
Keycloakからのパスワード変更
AD側のlogに何か出ている
Microsoftの公式ドキュメントを調査すると、下記のような記載があり
LDAPSでないとパスワード変更が不可な仕様となっています。
この属性を変更するには、クライアントがサーバーへの 128 ビット トランスポート層
セキュリティ (TLS)/Secure Socket Layer (SSL) 接続を持っている必要があります。
ユーザ同期(AD→Keycloak)
- Keycloakの管理コンソールにログイン
- 左メニューバーから、ldapレルムを選択
- 左メニューバーでUser federationをクリック
- ldapをクリック
- 右上のプルダウンより「Sync all users」を選択
- 緑枠のポップアップに同期結果が表示
※krbtgtユーザはADに作られるサービスアカウント
ユーザ同期(Keycloak→AD)
前回の記事でobjectClassの必須項目をマッパー設定に入れる必要があると記載があり、今回のADユーザのobjectClassは下記の通りです。
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
パスワードは設定されてないので、AD側でパスワードを新規に設定する必要があります。
※ADをご利用の環境ではADからのユーザ同期が基本となりますので、このユースケースはあまりないと思います。
まとめ
前回の記事からKeycloakのバージョンがかなり変わってしまったので、今回はアップデート記事として執筆しました!
軽微な設定内容の変更はあったものの、基本的な概念は変更がなかった印象です。
GUI操作による構築が可能なため、Keycloak初学者でもある程度感覚的に進めすことが出来ました。
KeycloakとADの連携によるSSOをご検討の方は一読していただけますと幸いです。