LDAP 統合

BobLDAP カスタムリソースと bobctl add-ldap コマンドを使用して、IBM Bob オンプレミスの LDAP または Active Directory フェデレーションを設定します。

Bob オンプレミスは、bobctl ユーティリティを通じて LDAP または Active Directory 環境を Keycloak と統合します。このユーティリティはディレクトリを Keycloak ユーザーフェデレーションプロバイダーとして設定します。この統合は通常インストール時に設定されますが、継続的なユーザー管理活動の一部として、デプロイメント後にも設定、更新、または維持できます。

始める前に

LDAP フェデレーションを設定する前に、以下の要件が満たされていることを確認してください。

  • OpenShift Container Platform (OCP) クラスターが適切なポートで LDAP サーバーへのネットワーク接続を持っていること:
    • ldap:// には 389
    • ldaps:// には 636
  • ディレクトリへの読み取りアクセスを持つサービスアカウント (バインド DN) が利用可能であること、またはLDAP サーバーが匿名バインドを許可するよう設定されていること。
  • プライベートまたは内部署名の証明書局 (CA) を使用した ldaps:// を使用する場合は、PEM 形式の LDAP サーバーの CA 証明書を取得してください。
  • bobctl コマンドラインユーティリティがインストールされており、oc がターゲットクラスターに対して設定され認証されていること。

設定ファイルリファレンス

LDAP プロバイダーを登録する前に、提供されたテンプレートから LDAP 設定ファイルを作成してください。

cp config-ldap-template.yaml my-ldap.yaml

設定ファイルには、Bob が LDAP ディレクトリとの接続、認証、ユーザー同期を行う方法を定義する必須およびオプションのパラメーターが含まれています。

必須フィールド

フィールド説明
nameLDAP プロバイダーの一意の説明的な識別子。設定された各プロバイダーは個別の名前を持つ必要があります。
vendor統合する LDAP ディレクトリのタイプを指定します。サポート値: other (OpenLDAP および LDAPv3 準拠)、ad (Microsoft Active Directory)、rhds (Red Hat Directory Server)、tivoli (IBM Security Directory Server)、edirectory (NetIQ eDirectory)。
connectionUrlプロトコル (ldap:// または ldaps://)、ホスト名、ポート番号を含む LDAP サーバーの完全な URL。
usersDnユーザーアカウントが保存され、ユーザーエントリが検索およびインポートされるディレクトリの場所。
usernameLDAPAttribute認証時にユーザーがユーザー名として提供するディレクトリ属性。
rdnLDAPAttributeディレクトリ構造内でエントリを識別するために使用されるディレクトリ属性。ほとんどの設定では usernameLDAPAttribute と同じです。
uuidLDAPAttribute各ユーザーアカウントを永続的に識別するために使用される一意の安定した変更不可のディレクトリ属性。
userObjectClassesどのディレクトリエントリがユーザーアカウントとして認識および処理されるかを定義する LDAP オブジェクトクラスのカンマ区切りリスト。
domainsディレクトリに関連付けられた 1 つ以上のメールドメイン。認証時に、設定されたドメインのいずれかと一致するメールアドレスを持つユーザーは、クレデンシャル検証のために自動的にこの LDAP プロバイダーにルーティングされます。
重要:

domains パラメーターは、オンプレミスデプロイメントでドメインベースのルーティングを設定するためにサポートされている唯一の方法です。Bob 管理ユーザーインターフェースからドメインを設定しないでください。サポートされておらず、認証エラーの原因となる可能性があります。

オプションフィールド

フィールド説明
adminEmails管理者権限を付与するユーザーのメールアドレス。Bob はこれらのユーザーに管理アクセスを自動的に割り当てます。
bindDnディレクトリへの認証と接続に使用されるサービスアカウントの DN。ディレクトリが匿名バインドアクセスを許可する場合は省略できます。
bindPasswordSecretバインドアカウントパスワードを保存する Secret を参照します。この Secret は bobctl コマンドで --bind-password オプションを指定したときに自動的に作成されます。
useTruststoreSpiLDAP CA 証明書をサーバー検証に使用するタイミングを指定します。値: always (デフォルト、プライベートまたは内部発行の CA 証明書の場合)、ldapsOnly (公開信頼の CA 証明書の場合)、never (セキュアでない ldap:// で接続する場合)。
ldapsCACertSecretPEM 形式の LDAP サーバーの CA 証明書を含む Secret を参照します。この Secret は --ca-cert-file が指定されたときに自動的に作成されます。
searchScopeディレクトリ検索の深さを決定します。2 はすべての子コンテナとサブツリーを検索します (デフォルト)。1 は直接の子エントリのみに検索を制限します。
customUserSearchFilterすべてのユーザー検索操作に適用される追加フィルター。例えばサービスアカウントを除外したり、検索を特定のユーザータイプに制限したりするために使用します。
userSync.enabledtrue に設定すると、プロバイダーが最初に設定されたときにすべてのユーザーがインポートされ、その後のディレクトリの変更は 5 分ごとに同期されます。ほとんどのデプロイメントに推奨されます。
userAttributeMappingsディレクトリ属性を email、firstName、lastName などの Bob ユーザープロフィールフィールドにマッピングする方法を定義します。
priority複数のプロバイダーが設定されている場合にプロバイダーが評価される順序を決定します。値が小さいプロバイダーが最初に確認されます。デフォルトは 0 です。
groupMapperLDAP グループを Keycloak に同期します。LDAP グループ同期の設定を参照してください。

ユーザー同期の動作

userSync.enabled が true に設定されると、Bob は LDAP プロバイダーが登録されたときにすべてのユーザーを 1 回限りインポートします。初期インポートが完了した後、継続的なユーザーライフサイクル同期は SCIM を通じて自動的に処理されます。

ヒント:

大規模な LDAP ディレクトリの場合は、userSync.enabled を false のままにして、ユーザーが初回サインイン時にプロビジョニングされるようにすることを検討してください。このアプローチにより、LDAP プロバイダーの登録に必要な時間を短縮できます。

LDAP グループ同期の設定

オプションの groupMapper 設定を使用して、LDAP グループを Keycloak と同期します。グループ同期により、LDAP ディレクトリで定義されたユーザーとグループメンバーシップを Keycloak 経由でインポートおよび管理できます。

groupsDn パラメーターは必須です。その他のすべてのパラメーターはオプションであり、LDAP ディレクトリスキーマとグループ構造に合わせてカスタマイズできます。

制限:

bob-admins と bob-users グループはプラットフォームが管理するグループであり、LDAP グループ同期から自動的に除外されます。

パラメーターデフォルト値説明
groupsDn必須LDAP グループエントリを含むベース識別名 (DN)。
namegroupsKeycloak でのグループマッパーの表示名。
groupNameLdapAttributecnKeycloak がグループ名として使用する LDAP 属性。
groupObjectClassesgroupOfNamesグループエントリを識別する LDAP オブジェクトクラスまたはクラス群。
membershipLdapAttributememberメンバー情報を含むグループエントリの属性。
membershipAttributeTypeDNメンバー値の形式。サポート値: DN (識別名) と UID (ユーザー ID)。
userRolesRetrieveStrategyLOAD_GROUPS_BY_MEMBER_ATTRIBUTEグループメンバーシップを決定するために使用される方法。
memberOfLdapAttributememberOfGET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE を使用する場合のグループメンバーシップ情報を含むユーザー属性。
customGroupSearchFilterなしグループを検索するときに使用される追加の LDAP フィルター。フィルターは括弧で囲む必要があります。例: (cn=dept-*)。
modeLDAP_ONLY同期モード。サポート値: LDAP_ONLY と READ_ONLY。
groupsPath/同期されたグループが作成される Keycloak グループ階層内の場所。

グループメンバーシップ取得ストラテジー

userRolesRetrieveStrategy パラメーターは、Keycloak がユーザーのグループメンバーシップを識別する方法を制御します。

ストラテジー説明
LOAD_GROUPS_BY_MEMBER_ATTRIBUTEユーザーへの参照を含むグループエントリを検索してグループメンバーシップを取得します。
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTEユーザーの memberOf 属性からグループメンバーシップを取得します。
LOAD_GROUPS_BY_MEMBER_ATTRIBUTE_RECURSIVELYLDAP ディレクトリでサポートされている場合、ネストされたグループを含めて再帰的にグループメンバーシップを取得します。
ヒント:

LDAP ディレクトリが memberOf 属性を通じてユーザーエントリにグループメンバーシップ情報を保存する場合や、再帰的な検索が必要なネストされたグループ構造を使用する場合を除き、LOAD_GROUPS_BY_MEMBER_ATTRIBUTE を使用してください。

設定例

name: corp-ldap

vendor: other
connectionUrl: ldaps://ldap.corp.example.com:636
usersDn: ou=People,dc=corp,dc=example,dc=com
usernameLDAPAttribute: uid
rdnLDAPAttribute: uid
uuidLDAPAttribute: entryUUID
userObjectClasses: inetOrgPerson,organizationalPerson,person

domains:
  - corp.example.com

bindDn: cn=bob-svc,ou=ServiceAccounts,dc=corp,dc=example,dc=com

useTruststoreSpi: always

userSync:
  enabled: true

userAttributeMappings:
  - ldapAttribute: mail
    userModelAttribute: email
  - ldapAttribute: givenName
    userModelAttribute: firstName
  - ldapAttribute: sn
    userModelAttribute: lastName

# オプション: LDAP グループを Keycloak に同期
groupMapper:
  groupsDn: ou=Groups,dc=corp,dc=example,dc=com
  groupObjectClasses: groupOfNames
  membershipLdapAttribute: member
./bobctl add-ldap --config corp-ldap.yaml \
  --bind-password '<bind-password>' \
  --ca-cert-file /path/to/ca.crt

適用前の LDAP 設定の検証

クラスターに LDAP 設定を適用する前に、--dry-run オプションを使用して設定を検証し、作成されるリソースのプレビューを表示します。ドライランを実行することで、クラスターに変更が加えられる前によくある設定の問題を特定するのに役立ちます。

./bobctl add-ldap --config my-ldap.yaml \
  --bind-password '<bind-password>' \
  --ca-cert-file /path/to/ca.crt \
  --dry-run

ドライランは以下のチェックを実行します。

  • すべての必須設定パラメーターが設定ファイルに存在することを検証します。
  • --ca-cert-file を使用する場合、指定された CA 証明書ファイルがローカルで利用可能であることを確認します。
  • 作成または更新される BobLDAP カスタムリソースのプレビューを表示します。
  • 設定の一部として生成される Kubernetes Secret を表示します。
  • クラスター内のリソースを作成、変更、または削除せずに終了します。
注意:

ドライラン操作は LDAP サーバーへのネットワーク接続を検証したり、ディレクトリに対して提供されたクレデンシャルを認証したり、クラスター内の参照された Secret の存在を確認したりしません。これらの検証は設定が適用された後にのみ実行され、LDAPReachable および LDAPAuthenticated ステータス条件に反映されます。

設定の適用

LDAP 設定ファイルを作成して検証したら、add-ldap コマンドを実行してクラスターに設定を適用します。

./bobctl add-ldap --config my-ldap.yaml \
  --bind-password '<bind-password>' \
  --ca-cert-file /path/to/ca.crt
フラグ必須説明
--config <file>はいLDAP 設定ファイルへのパスを指定します。
--bind-password <password>いいえクラスターに bindPasswordSecret を作成します。ディレクトリが匿名バインドアクセスを許可する場合は不要です。
--ca-cert-file <path>いいえローカル PEM ファイルから ldapsCACertSecret を作成します。公開信頼の CA を使用する場合やセキュアでない ldap:// 接続の場合は省略できます。
--dry-runいいえ設定を検証して作成または更新されるリソースのプレビューを表示します。クラスターに変更を適用しません。

コマンドが実行されると、bobctl はオペレーターが設定を調整するのを待ち、BobLDAP カスタムリソースから報告されたステータス条件を確認して LDAP プロバイダーを検証します。

チェック確認内容
Readyプロバイダーが正常に作成され登録されました。
LDAPReachableクラスターから LDAP サーバーにアクセス可能です。
LDAPAuthenticated設定されたバインドクレデンシャルが有効です。
UserSyncSucceeded初期ユーザーインポートが正常に完了しました。この条件は userSync.enabled が true に設定されている場合にのみ評価されます。

デフォルトの検証タイムアウトは 600 秒 (10 分) です。大規模なディレクトリを持つ環境では、初期ユーザー同期の完了に数分かかる場合があります。タイムアウトを延長するには、BOB_LDAP_WAIT_TIMEOUT 環境変数を設定します。

BOB_LDAP_WAIT_TIMEOUT=900 ./bobctl add-ldap --config my-ldap.yaml

複数の LDAP プロバイダーの設定

複数の LDAP または Active Directory ソースからユーザーを統合するには、各ディレクトリ用に別々の設定ファイルを作成し、各設定の name フィールドに一意の値を割り当てます。

./bobctl add-ldap --config ldap-corp.yaml
./bobctl add-ldap --config ldap-subsidiary.yaml

LDAP リソースステータスの確認

設定された LDAP プロバイダーのステータスを表示するには:

oc get bobldap -n <instance-namespace>

特定のプロバイダーの詳細な設定とステータス情報を表示するには:

oc get bobldap <name> -n <instance-namespace> -o yaml

統合の確認

bobctl add-ldap が正常に完了したら、LDAP 統合が正しく機能していることを確認します。

BobLDAP カスタムリソースのステータスを確認します。

oc get bobldap <name> -n <instance-namespace> -o yaml

以下のステータス条件が True に設定されていることを確認します。

条件目的
ReadyLDAP プロバイダーが正常に登録されたことを確認します。
LDAPReachableクラスターが LDAP サーバーと通信できることを確認します。
LDAPAuthenticated設定されたバインドクレデンシャルが有効であることを確認します。
UserSyncSucceededすべてのユーザーが正常にインポートされたことを確認します。userSync.enabled: true の場合のみ存在します。

いずれかの条件が False の場合は、対応する message フィールドで診断の詳細を確認してください。

フェデレーション LDAP ディレクトリのクレデンシャルを使用してサインインし、ユーザー認証が機能していることを確認します。

Bob URL を開きます。

https://bob.<namespace>.<ingress-domain>

サインインに成功すると、接続性、認証、ドメインルーティング、SCIM プロビジョニング、ロールマッピングが正常に機能していることが確認されます。

ユーザーが初めてサインインした後、ユーザーレコードが Bob で利用可能であることを確認します。

Bob 管理 UI を開きます。

https://bob.<namespace>.<ingress-domain>/admin

Bob 管理者としてサインインし、テストユーザーがユーザーリストに表示されることを確認します。

groupMapper が LDAP グループを Bob 管理者にマッピングするよう設定されている場合:

  1. マッピングされた管理者グループに属するユーザーアカウントでサインインします。
  2. ユーザーが Bob 管理 UI にアクセスできることを確認します。
  3. 管理者レベルの機能が利用可能であることを確認します。

userSync.enabled: true の場合、LDAP プロバイダーが登録された後にユーザーが自動的にインポートされます。テストユーザーは初回サインインなしに Bob に表示されるはずです。

数分後にユーザーが表示されない場合は、プロビジョニングエラーの bob-admin ログを確認してください。

oc logs -n <instance-namespace> -l app=bob-admin --tail=100

報告された SCIM 関連のエラーを確認し、同期プロセスを再試行する前に解決してください。

このトピックはいかがですか?