社員1000人の登録作業が、たった1つのボタンで終わる快感。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回(第3回)は、Keycloakを構築し、日本語化するところまで進めました。
しかし、今のKeycloakは「空っぽ」の状態です。ユーザーが一人も登録されていません。
企業でSSOを導入する場合、既存の社員情報(ID/パスワード)は、多くの場合「Active Directory (AD)」で管理されています。
ここにある情報をKeycloakに手入力でコピーしますか? ……絶対に嫌ですよね。
今回は、KeycloakとADをパイプで繋ぎ、ユーザー情報を一瞬で同期させる「ユーザーフェデレーション(User Federation)」の設定を行います。
先生、AD連携やりたいです!
でも…僕の家にはWindows Serverがないんです。
検証のために数十万円のサーバーソフトを買うわけにもいかないし、どうすればいいですか?
大丈夫よ、コウ君。
Linuxには「Samba(サンバ)」という、WindowsのADと互換性のある素晴らしいOSSがあるわ。
今回はDockerを使って、擬似的なADサーバーも一緒に立ててしまいましょう。
本物のADがある現場でも使える知識だから、しっかり覚えてね!
本記事では、検証用ADサーバーの構築から、KeycloakでのLDAP連携設定、そしてプロが使う属性マッピングのテクニックまでを徹底解説します。
🚀 本連載のカリキュラム(全8回)
- 【第1回】SSOの基礎知識と設計:AD連携を含めた全体像
- 【第2回】サーバー構築の準備:AlmaLinux 9とDocker、SSL証明書
- 【第3回】認証基盤 Keycloakの導入:コンテナ起動と日本語化
- 【第4回】ユーザー情報の統合(今回):Active Directory (AD) とのFederation設定
- 【第5回】WebアプリのSSO化:OIDCによる認証連携
- 【第6回】Windows統合認証 (IWA):ADドメイン参加とKerberos設定
- 【第7回】セキュリティと冗長化:本番運用に向けた堅牢化
- 【第8回】運用とトラブルシューティング:ログ解析と緊急対応
目次
1. 検証用ADサーバー(Samba)の構築
まずは、Keycloakが参照するための「名簿(AD)」を用意します。
既存の docker-compose.yml にSambaコンテナを追加して構築します。
1-1. docker-compose.yml の追記
作業ディレクトリに移動し、ファイルを編集します。
cd ~/sso-project vi docker-compose.yml
services: セクションの末尾(keycloak の下)に、以下の内容を追記してください。
# --- 擬似Active Directory (Samba 4) ---
samba-ad:
image: nowsci/samba-domain
container_name: sso-ad
environment:
DOMAIN: "linuxkoubou.local"
DOMAINPASS: "Password123!"
DNSFORWARDER: "8.8.8.8"
NOCOMPLEXITY: "true" # パスワード複雑性要件を無効化(検証用)
ports:
- "389:389" # LDAP
- "636:636" # LDAPS
- "53:53" # DNS
- "53:53/udp" # DNS
- "88:88" # Kerberos
- "88:88/udp" # Kerberos
privileged: true
restart: always
networks:
- sso-net
※ DOMAINPASS はADの管理者(Administrator)パスワードになります。忘れないようにしてください。
1-2. コンテナの再起動
設定を反映させるために、Docker Composeを再起動します。
# 設定変更を反映してコンテナを起動 sudo docker compose up -d
起動後、ログを確認してADが正常に立ち上がっているか確認します。
sudo docker compose logs -f samba-ad
ログが落ち着いたら準備完了です。
2. ADへのテストユーザー登録
ADサーバーは立ち上がりましたが、中身は空っぽです。
Keycloakで同期するためのテストユーザーを作成しましょう。
今回はWindowsの管理ツールを使わず、Sambaコンテナ内のコマンドで直接ユーザーを作ります。
2-1. コンテナ内に入る
sudo docker exec -it sso-ad /bin/bash
2-2. ユーザー作成コマンドの実行
以下のコマンドを実行して、sso.user01 というユーザーを作成します。
# ユーザー作成 (samba-tool) samba-tool user create sso.user01 Password123! \ --surname="Test" \ --given-name="User01" \ --mail-address="user01@linuxkoubou.local" # 念のためもう一人作成 samba-tool user create sso.user02 Password123! \ --surname="Test" \ --given-name="User02" \ --mail-address="user02@linuxkoubou.local"
「User ‘sso.user01’ created successfully」と表示されればOKです。exit でコンテナから抜けます。
3. Keycloakでの「ユーザーフェデレーション」設定
いよいよ本題です。Keycloak管理コンソールからADへの接続設定を行います。
3-1. プロバイダーの追加
- Keycloak管理コンソール(
https://sso.linuxkoubou.local/)に管理者でログインします。 - 左上のレルム選択で、前回作成した「DemoCorp」を選択します(Masterではないことを確認!)。
- 左メニューの「User federation」をクリックします。
- 「Add new provider」 から 「ldap」 を選択します。
3-2. 接続設定 (Connection settings)
以下の通りに入力してください。
(※Sambaコンテナのサービス名 samba-ad をホスト名として使います)
| 項目 | 設定値 | 説明 |
|---|---|---|
| Console display name | Active Directory | 管理画面での表示名 |
| Vendor | Active Directory | AD固有の設定を自動適用します |
| Connection URL | ldap://samba-ad:389 | Docker内部ネットワークで接続 |
| Users DN | CN=Users,DC=linuxkoubou,DC=local | ユーザーが格納されている場所 |
| Bind DN | CN=Administrator,CN=Users,DC=linuxkoubou,DC=local | KeycloakがADに接続するための管理者ID |
| Bind Credential | Password123! | AD管理者のパスワード |
入力後、「Test connection」ボタンを押し、「Successfully connected to LDAP」と表示されることを確認します。
次に「Test authentication」ボタンを押し、「Successfully verified LDAP Bind credential」と表示されれば、認証情報のテストも成功です。
3-3. LDAP検索設定 (LDAP searching and updating)
どの項目をユーザーIDとして使うかなどを定義します。
ADの場合、デフォルトで概ねOKですが、確認しましょう。
![]() |
[試して理解]Linuxのしくみ ―実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】 新品価格 |
| 項目 | 設定値 | 説明 |
|---|---|---|
| Username LDAP attribute | sAMAccountName | WindowsのログオンIDを使います |
| RDN LDAP attribute | cn | 識別名の属性 |
| UUID LDAP attribute | objectGUID | ユーザーを一意に識別するID |
| User Object Classes | person, organizationalPerson, user | 検索対象のクラス |
3-4. 同期設定 (Synchronization settings)
運用を楽にするための設定です。
- Import users: ON (KeycloakDBにコピーを持つ)
- Sync Registrations: OFF (Keycloakで作ったユーザーをADに書き込まない。通常はADがマスタなのでOFF推奨)
- Periodic full sync: ON (定期的な全同期。例: 86400秒 = 1日)
- Periodic changed users sync: ON (変更分のみ同期。例: 300秒 = 5分)
最後に最下部の「Save」をクリックして保存します。
4. 属性マッパーの設定(姓・名・メール)
保存後、画面上部のタブに「Mappers」が表示されます。
ここでは「ADのどの項目を、Keycloakのどの項目に入れるか」を定義します。
デフォルトで主要なものは設定されていますが、確認しておきましょう。
- Mappers タブをクリックします。
- 以下のマッピングが存在することを確認します(なければ作成)。
| Name | Mapper Type | LDAP Attribute | User Model Attribute |
|---|---|---|---|
| first name | user-attribute-ldap-mapper | givenName | firstName |
| last name | user-attribute-ldap-mapper | sn | lastName |
| user-attribute-ldap-mapper |
💡 プロのノウハウ:部署名や役職も同期したい?
ADにある「部署名(department)」や「役職(title)」もKeycloakに取り込みたい場合は、ここで「Create」ボタンから新しいマッパーを追加します。LDAP Attribute: department → User Model Attribute: department のように設定すれば、OIDCのトークンに部署情報を含めることができ、アプリ側で「人事部の人だけに見せる画面」といった制御が可能になります。
5. 同期実行とログイン確認
設定は完了しました。実際にユーザーを引っ張ってきましょう。
5-1. 手動同期の実行
- Settings タブに戻ります。
- 画面下部の 「Action」 メニューから 「Sync all users」 をクリックします。
- 画面上部に「Success! Sync of users finished.」と表示されれば成功です。
5-2. ユーザー一覧の確認
左メニューの「Users」をクリックしてください。
リストに sso.user01 や sso.user02 が表示されていれば、AD連携は大成功です!
5-3. アカウントコンソールへのログイン
実際にADのパスワードでログインできるか試してみます。
- ブラウザの別タブ(またはシークレットウィンドウ)を開きます。
- ユーザー用のアカウント管理画面にアクセスします。
https://sso.linuxkoubou.local/realms/DemoCorp/account/ - ログイン画面が出るので、以下を入力します。
- Username: sso.user01
- Password: Password123!
ログインに成功し、ユーザー情報画面(氏名やメアド)が表示されれば完了です。
これで、KeycloakはADの「代理人」として認証を行えるようになりました。
6. 【プロの技】LDAPフィルタによる同期対象の絞り込み
実運用では、AD上の全ユーザー(数千人)を同期するとライセンスや負荷の問題が発生することがあります。
「特定のグループに所属するユーザーだけ同期したい」というケースがほとんどです。
LDAPフィルタの設定
User federationの設定画面にある 「Custom User LDAP Filter」 を使います。
例えば、「SSO_Users」というグループに入っている人だけを対象にする場合、以下のように記述します。
(&(objectClass=person)(memberOf=CN=SSO_Users,CN=Users,DC=linuxkoubou,DC=local))
このように設定することで、退職者をADのグループから外すだけでKeycloakからもログインできなくなり、セキュリティ運用が非常に楽になります。
まとめ:ID管理の一元化完了
お疲れ様でした!
今回は、Sambaを使って擬似ADを構築し、Keycloakと連携させるという、SSO構築のハイライトとも言える工程をクリアしました。
今回の達成項目:
- DockerでSamba ADサーバーを構築した。
- KeycloakのUser FederationでADと接続した。
- 属性マッパーを設定し、氏名やメールアドレスも同期させた。
- ADのユーザーでKeycloakにログインできることを確認した。
感動です! ADで作ったユーザーが勝手にKeycloakに出てくるなんて!
これで「パスワード変更はAD側でやってください」って言えば済むんですね。
でも先生、まだログインできる「アプリ」がひとつもないですよね…?
その通りです。今は「入館証(ID)」が発行できるようになっただけで、「アトラクション(アプリ)」がありません。
次回、【第5回】WebアプリのSSO化では、Apacheを使ったWebサーバーを構築し、実際にSSOでログインできるように設定します。
いよいよ「シングルサインオン」の便利さを体感できる瞬間がやってきます。お楽しみに!
▼ 自宅ラボ環境を作ろう ▼
DockerやADも快適に動く
「おすすめVPS」
認証基盤エンジニアへ
「ITエンジニア転職」


コメント