4.3. LDAP (Lightweight Directory Access Protocol) および Active Directory
Red Hat Single Sign-On には LDAP/AD プロバイダーが含まれます。1 つの Red Hat Single Sign-On レルムで複数の LDAP サーバーをフェデレーションし、LDAP ユーザー属性を Red Hat Single Sign-On 共通ユーザーモデルにマッピングすることができます。
デフォルトでは、Red Hat Single Sign-On はユーザーアカウントのユーザー名、電子メール、姓名をマッピングしますが、追加の マッピング を設定することもできます。Red Hat Single Sign-On の LDAP/AD プロバイダーは、LDAP/AD プロトコルおよびストレージ、編集、同期モードを使用したパスワード検証をサポートします。
4.3.1. フェデレーションされた LDAP ストレージの設定
手順
メニューの User Federation をクリックします。
ユーザーフェデレーション
- Add Provider リストから ldap を選択します。Red Hat Single Sign-On では、LDAP 設定ページに移動します。
4.3.2. ストレージモード
Red Hat Single Sign-On は、LDAP からローカルの Red Hat Single Sign-On ユーザーデータベースにユーザーをインポートします。このユーザーデータベースのコピーは、オンデマンドまたは定期的なバックグラウンドタスクを介して同期します。パスワード同期の例外が存在します。Red Hat Single Sign-On はパスワードをインポートしません。パスワードの検証は LDAP サーバーで常に行われます。
同期の利点は、必要な追加の追加のデータがローカルで保存されるため、すべての Red Hat Single Sign-On 機能を効率的に機能させることです。欠点は、Red Hat Single Sign-On が特定のユーザーに初めてクエリーを実行するたびに、Red Hat Single Sign-On に対応するデータベースの挿入を実行することです。
インポートを LDAP サーバーと同期できます。LDAP マッパーがデータベースではなく LDAP から特定の属性を常に読み取る場合、インポート同期は必要ありません。
ユーザーを Red Hat Single Sign-On ユーザーデータベースにインポートせずに、Red Hat Single Sign-On で LDAP を使用できます。LDAP サーバーは、Red Hat Single Sign-On ランタイムが使用する共通のユーザーモデルをバックアップします。LDAP が Red Hat Single Sign-On 機能が必要とするデータをサポートしない場合、その機能は動作しません。このアプローチの利点は、LDAP ユーザーのコピーを Red Hat Single Sign-On ユーザーデータベースにインポートおよび同期するリソース使用を持たないことです。
LDAP 設定ページの Import Users スイッチは、このストレージモードを制御します。ユーザーをインポートするには、この切り替えを ON に切り替えます。
ユーザーのインポート を無効にすると、Red Hat Single Sign-On データベースにユーザープロファイル属性を保存できません。また、LDAP にマッピングされたユーザープロファイルメタデータ以外のメタデータを保存することはできません。このメタデータには、LDAP マッパーの設定に基づくロールマッピング、グループマッピング、およびその他のメタデータを含めることができます。
LDAP 以外のマッピングユーザーデータを変更しようとすると、ユーザーの更新ができません。たとえば、ユーザーの enabled
フラグが LDAP 属性にマッピングされていない限り、LDAP マッピングされたユーザーを無効にすることはできません。
4.3.3. モードの編集
ユーザーと管理者はユーザーメタデータを変更できます。ユーザーは Account Console から、管理者は管理コンソールから変更できます。LDAP 設定ページの Edit Mode
設定により、ユーザーの LDAP 更新権限が定義されます。
- READONLY
- ユーザー名、メール、名、姓、他のマップされた属性を変更することはできません。Red Hat Single Sign-On は、ユーザーがこれらのフィールドの更新を試みる際にエラーが表示されます。パスワードの更新はサポートされていません。
- WRITABLE
- ユーザー名、メール、名、姓、他のマップされた属性を変更し、LDAP ストアと自動的に同期することはできません。
- UNSYNCED
- Red Hat Single Sign-On では、Red Hat Single Sign-On のローカルストレージのユーザー名、メール、名、姓、およびパスワードへの変更が保存され、管理者はこのデータを LDAP に戻す必要があります。このモードでは、Red Hat Single Sign-On デプロイメントでは、読み取り専用 LDAP サーバーでユーザーメタデータを更新できます。このオプションは、LDAP からローカルの Red Hat Single Sign-On ユーザーデータベースにユーザーをインポートする場合にも適用されます。
Red Hat Single Sign-On が LDAP プロバイダーを作成すると、Red Hat Single Sign-On は一連の初期 LDAP マッパー も作成します。Red Hat Single Sign-On は、Vendor、Edit Mode、および Import Users スイッチの組み合わせに基づいてこれらのマッパーを設定します。たとえば、編集モードが UNSYNCED の場合、Red Hat Single Sign-On は、LDAP サーバーからではなく、データベースから特定のユーザー属性を読み取るようにマッパーを設定します。ただし、後で編集モードを変更すると、設定が UNSYNCED モードで変更されたかどうかを検出できないため、マッパーの設定は変更できません。LDAP プロバイダーの作成時に Edit Mode を決定します。この注記は、ユーザーのインポート スイッチにも適用されます。
4.3.4. その他の設定オプション
- コンソール表示名
- 管理コンソールで表示するプロバイダーの名前。
- 優先度
- ユーザーを検索したり、ユーザーを追加したりする際のプロバイダーの優先順位です。
- 登録の同期
- Red Hat Single Sign-On で作成した新規ユーザーを LDAP に追加する場合は、この切り替えを ON に切り替えます。
- Kerberos 認証を許可
- LDAP からプロビジョニングされたユーザーデータを使用して、レルムで Kerberos/SPNEGO 認証を有効にします。詳細については、Kerberos セクション を参照してください。
- その他のオプション
- マウスポインターを管理コンソールのツールチップの上に置き、これらのオプションの詳細を表示します。
4.3.5. SSL 経由での LDAP への接続
LDAP ストアにセキュアな接続 URL (例: ldaps://myhost.com:636
) を設定する場合、Red Hat Single Sign-On は SSL を使用して LDAP サーバーと通信します。Red Hat Single Sign-On が LDAP への SSL 接続を信頼できるように、Red Hat Single Sign-On サーバー側でトラストストアを設定します。
Truststore SPI を使用して Red Hat Single Sign-On のグローバルトラストストアを設定します。グローバルトラストストアの設定の詳細については、サーバーのインストールおよび設定ガイド を参照してください。Truststore SPI を設定しないと、トラストストアは Java によって提供されるデフォルトのメカニズムにフォールバックします。これは、システムプロパティーが設定されていないと、javax.net.ssl.
ONLY システムプロパティーまたは JDK からの cacerts ファイルによって提供されるファイルになります。
LDAP フェデレーションプロバイダー設定の Use Truststore SPI
設定プロパティーは、トラストストア SPI を制御します。デフォルトでは、Red Hat Single Sign-On はプロパティーを Only for ldaps
に設定します。これは、ほとんどのデプロイメントでで十分です。LDAP への接続 URL が ldaps
のみで始まる場合は、Red Hat Single Sign-On では Truststore SPI を使用します。
4.3.6. LDAP ユーザーの Red Hat Single Sign-On への同期
Import Users オプションを設定すると、LDAP プロバイダーは LDAP ユーザーの Red Hat Single Sign-On ローカルデータベースへのインポートを処理します。ユーザーの初回ログイン時に、LDAP プロバイダーは LDAP ユーザーを Red Hat Single Sign-On データベースにインポートし、LDAP パスワードを検証します。この場合、Red Hat Single Sign-On がユーザーをインポートする場合のみ、ログインが初めてログインされます。管理コンソールの Users メニューをクリックし、View all users ボタンをクリックすると、少なくとも Red Hat Single Sign-On によって少なくとも 1 度認証された LDAP ユーザーのみが表示されます。Red Hat Single Sign-On はこの方法でユーザーをインポートするため、この操作は LDAP ユーザーデータベース全体のインポートをトリガーしません。
全 LDAP ユーザーを Red Hat Single Sign-On データベースに同期する場合は、LDAP プロバイダー設定ページで Sync Settings を設定し、有効にすることができます。
2 種類の同期が存在します。
- 定期的な完全同期 (Periodic Full)
- このタイプは、すべての LDAP ユーザーを Red Hat Single Sign-On データベースに同期します。LDAP ユーザーはすでに Red Hat Single Sign-On にありますが、LDAP で利用でき、Red Hat Single Sign-On データベースで直接更新されます。
- 定期的な変更したユーザー同期 (Periodic Changed)
- 同期時に、Red Hat Single Sign-On は、最後の同期のみ後に作成または更新されたユーザーを作成または更新します。
同期する最適な方法として、LDAP プロバイダーの初回作成時にすべてのユーザーの同期をクリックし、変更したユーザーの定期的な同期を設定するのが最適です。
4.3.7. LDAP マッパー
LDAP マッパーは LDAP プロバイダーによってトリガーされる listeners
です。別の拡張は LDAP 統合を指定します。LDAP マッパーは、以下の場合にトリガーされます。
- ユーザーは LDAP を使用してログインします。
- ユーザーは最初に登録されます。
- 管理コンソールはユーザーにクエリーを実行します。
LDAP フェデレーションプロバイダーを作成すると、Red Hat Single Sign-On はこのプロバイダーの mappers
のセットを自動的に提供します。これは、ユーザーはマッパーの開発や、既存マッパーの更新/削除を行えます。
- ユーザー属性マッパー
-
このマッパーは、Red Hat Single Sign-On ユーザーの属性にマップする LDAP 属性を指定します。たとえば、
mail
LDAP 属性を Red Hat Single Sign-On データベースのemail
属性に設定できます。このマッパーの実装では、1 対 1 のマッピングが常に存在します。 - fullName マッパー
-
このマッパーはユーザーのフルネームを指定します。Red Hat Single Sign-On は LDAP 属性 (通常は
cn
) に名前を保存し、Red Hat Single Sign-On データベースのfirstName
およびlastname
属性にマッピングします。ユーザーのフルネームを含むcn
は LDAP デプロイメントで共通です。
Red Hat Single Sign-On で新規ユーザーを登録し、Sync Registrations
が LDAP プロバイダー用に ON になっている場合、fullName マッパーはユーザー名にフォールバックできます。このフォールバックは、Microsoft Active Directory (MSAD) を使用する際に役に立ちます。MSAD の一般的なセットアップでは、cn
LDAP 属性を fullName として設定し、同時に LDAP プロバイダー設定の RDN LDAP Attribute
として cn
LDAP 属性を使用します。この設定では、Red Hat Single Sign-On はユーザー名にフォールバックします。たとえば、Red Hat Single Sign-On ユーザー john123 を作成して firstName と lastName を空のままにすると、フルネームは LDAP の cn
の値として john123 を保存します。firstName および lastName に "John Doe" を入力すると、fullName マッパーは LDAP cn
を "John Doe" の値に更新し、ユーザー名へのフォールバックが必要ありません。
- ハードコードされた属性マッパー
-
このマッパーは LDAP と一緒にリンクされた各 Red Hat Single Sign-On ユーザーにハードコードされた属性値を追加します。また、このマッパーは
enabled
またはemailVerified ユーザー
プロパティーの値を強制的に実行することもできます。 - ロールマッパー
-
このマッパーは、LDAP から Red Hat Single Sign-On ロールマッピングへのロールマッピングを設定します。単一のロールマッパーは LDAP ロール (通常は LDAP ツリーの特定ブランチからのグループ) を、指定されたクライアントのレルムロールまたはクライアントロールに対応するロールにマップできます。同じ LDAP プロバイダーに追加のロールマッパーを設定できます。たとえば、
ou=main,dc=example,dc=org
下のグループからのロールマッピングをレルムロールマッピングにマッピングし、ou=finance,dc=example,dc=org
下のグループから、クライアントfinance
のクライアントロールマッピングへマップするように指定できます。 - ハードコードされたロールマッパー
- このマッパーは、指定された Red Hat Single Sign-On ロールを LDAP プロバイダーから各 Red Hat Single Sign-On ユーザーに付与します。
- グループマッパー
- このマッパーは、LDAP ツリーのブランチから、Red Hat Single Sign-On 内のグループに LDAP グループをマッピングします。また、Red Hat Single Sign-On の LDAP からユーザーグループマッピングに、ユーザーグループマッピングも伝播されます。
- MSAD ユーザーアカウントマッパー
-
このマッパーは、Microsoft Active Directory (MSAD) に固有のものです。MSAD ユーザーアカウントの状態を、有効なアカウントまたは期限切れのパスワードなどの Red Hat Single Sign-On アカウントの状態に統合することができます。このマッパーは
userAccountControl
およびpwdLastSet
LDAP 属性を使用します。これは MSAD に固有で、LDAP 標準ではありません。たとえば、pwdLastSet
の値が0
の場合、Red Hat Single Sign-On ユーザーはパスワードを更新する必要があります。結果として、UPDATE_PASSWORD の必要なアクションがユーザーに追加されます。userAccountControl
の値が514
(無効) の場合、Red Hat Single Sign-On ユーザーが無効になります。 - 証明書マッパー
-
このマッパーは X.509 証明書をマッピングします。Red Hat Single Sign-On は、それを X.509 認証と、
Full certificate in PEM format
を ID ソースとして使用します。このマッパーはUser Attribute Mapper
と同様に動作しますが、Red Hat Single Sign-On は PEM または DER フォーマットの証明書を保存する LDAP 属性に対してフィルタリングできます。このマッパーを使用して、Always Read Value From LDAP
を有効にします。
username、firstname、lastname、email などの基本的な Red Hat Single Sign-On ユーザー属性を対応する LDAP 属性にマップするユーザー属性マッパー。これらを拡張し、独自の追加属性マッピングを提供できます。管理コンソールは、対応するマッパーの設定に役立つツールチップを提供します。
4.3.8. パスワードのハッシュ
Red Hat Single Sign-On がパスワードを更新すると、Red Hat Single Sign-On はパスワードをプレーンテキスト形式で送信します。このアクションは、ビルトインの Red Hat Single Sign-On データベースのパスワードを更新することとは異なります。Red Hat Single Sign-On ハッシュと、データベースに送信する前にパスワードをソルトします。LDAP の場合、Red Hat Single Sign-On は LDAP サーバーに依存してパスワードをハッシュ化し、ソルトします。
デフォルトでは、MSAD、RHDS、FreeIPA ハッシュ、ソルトパスワードなどの LDAP サーバー。RFC3062 で説明されているように LDAPv3 Password Modify Extended Operation を使用しない限り、OpenLDAP や ApacheDS などのその他の LDAP サーバーは、パスワードをプレーンテキストに保存します。LDAP 設定ページで LDAPv3 Password Modify Extended Operation を有効にします。詳細は、お使いの LDAP サーバーのドキュメントを参照してください。
ldapsearch
を使用して変更したディレクトリーエントリーを検査することで、ユーザーパスワードが正しくハッシュ化され、プレーンテキストとして保存されていることと、base64 が userPassword
属性値をデコードしていることを常に確認します。
4.3.9. トラブルシューティング
カテゴリー org.keycloak.storage.ldap
では、ログレベルを TRACE に増やすと便利です。この設定により、多数のロギングメッセージは TRACE
レベルの server.log ファイルに送信されます。これには、すべてのクエリーのログが LDAP サーバーとクエリーの送信に使用されたパラメーターが含まれます。ユーザーフォーラムまたは JIRA で LDAP の質問を作成する場合は、TRACE ロギングを有効にしてサーバーログを添付することを検討してください。大きすぎる場合は、操作中にログに追加されたメッセージを含む、サーバーログのスニペットだけを含めるのが良いでしょう。これにより、問題が発生します。
LDAP プロバイダーを作成すると、以下から始まる INFO レベルのサーバーログにメッセージが表示されます。
When you create LDAP provider, message appear in the server log in the INFO level starting with:
Creating new LDAP Store for the LDAP storage provider: ...
LDAP プロバイダーの設定が表示されます。質問またはバグを報告する前に、このメッセージを LDAP 設定に含めることが推奨されます。最終的には、一部の設定変更 (含めない) をプレースホルダーの値に置き換えることもあると考えられます。1 つ目は bindDn=some-placeholder
です。connectionUrl
の場合は、自由に置き換えるようにしてください。ただし、一般的には、使用されたプロトコル (ldap
vs ldaps
) を含めると便利です。同様に、LDAP マッパーの設定の詳細を含めると役に立ちます。これは、DEBUG レベルで以下のようなメッセージと共に表示されます。
Mapper for provider: XXX, Mapper name: YYY, Provider: ZZZ ...
これらのメッセージは、有効になっている DEBUG ロギングとともに表示されることに注意してください。
-
パフォーマンスまたは接続プールの問題を追跡するには、プロパティー
Connection Pool Debug Level
の値を設定することを検討してください。
パフォーマンスまたは接続プールの問題を追跡するには、LDAP プロバイダーのプロパティー Connection Pool Debug Level
の値を all
の値に設定することを検討してください。これにより、LDAP 接続プールのロギングが含まれるサーバーログに多くの追加メッセージがサーバーログに追加されます。これは、接続プールまたはパフォーマンスに関連する問題を追跡するために使用できます。
接続プールの設定を変更した後に、Keycloak サーバーを再起動して LDAP プロバイダー接続の再初期化を適用する必要がある場合があります。
サーバーの再起動後に接続プールのメッセージがこれ以上表示されない場合は、接続プールが LDAP サーバーでは機能しないことを示すことができます。
-
LDAP の問題をご報告いただく際には、お客様の環境で問題を引き起こしているターゲットデータに LDAP ツリーの一部を添付することを検討してください。たとえば、一部のユーザーログインに多くの時間がかかる場合、さまざまなグループエントリーの
member
の数を表示する LDAP エントリーをアタッチすることができます。この場合、これらのグループエントリーが Red Hat Single Sign-On の一部のグループ LDAP マッパー (またはロール LDAP マッパー) にマップされるかどうかを追加するのに役立ちます。
LDAP の問題を報告する場合、ターゲットデータとともに LDAP ツリーの一部を添付すると、環境で問題が発生します。たとえば、一部のユーザーログインに多くの時間がかかる場合、さまざまなグループエントリーの member
の数を表示する LDAP エントリーをアタッチすることができます。この場合、これらのグループエントリーが Red Hat Single Sign-On の一部のグループ LDAP マッパー (またはロール LDAP マッパー) にマップされるかどうかを追加するのに役立ちます。