تكامل LDAP
هيّئ اتحاد LDAP أو Active Directory لـ IBM Bob المحلي باستخدام المورد المخصص BobLDAP والأمر bobctl add-ldap.
يدمج Bob المحلي بيئة LDAP أو Active Directory الخاصة بك مع Keycloak من خلال أداة bobctl، التي تُكوّن الدليل كموفر اتحاد مستخدمين في Keycloak. على الرغم من أن هذا التكامل يُعدّ عادةً أثناء التثبيت، يمكن أيضًا تكوينه وتحديثه وصيانته بعد النشر كجزء من أنشطة إدارة المستخدمين الجارية.
قبل البدء
قبل تكوين اتحاد LDAP، تأكد من استيفاء المتطلبات التالية:
- مجموعة OpenShift Container Platform (OCP) لها اتصال شبكي بخادم LDAP على المنفذ المناسب:
- 389 لـ
ldap:// - 636 لـ
ldaps://
- 389 لـ
- حساب خدمة (bind DN) يملك وصول القراءة للدليل متاح، أو خادم LDAP مُكوَّن للسماح بالربط المجهول.
- إذا كنت تستخدم
ldaps://مع مرجع مصادقة (CA) خاص أو موقَّع داخليًا، احصل على شهادة CA لخادم LDAP بتنسيق PEM. - أداة سطر الأوامر
bobctlمثبَّتة، وocمُكوَّنة ومصادَق عليها مقابل المجموعة المستهدفة.
مرجع ملف التكوين
أنشئ ملف تكوين LDAP من القالب المقدَّم قبل تسجيل موفر LDAP.
cp config-ldap-template.yaml my-ldap.yamlيحتوي ملف التكوين على معاملات مطلوبة واختيارية تُعرّف كيفية اتصال Bob وبيانات اعتماده ومزامنة المستخدمين من دليل LDAP الخاص بك.
الحقول المطلوبة
| الحقل | الوصف |
|---|---|
name | معرّف فريد ووصفي لموفر LDAP. يجب أن يكون لكل موفر مُكوَّن اسم مميز. |
vendor | يُحدد نوع دليل LDAP للتكامل معه. القيم المدعومة: other (OpenLDAP والمتوافق مع LDAPv3)، ad (Microsoft Active Directory)، rhds (Red Hat Directory Server)، tivoli (IBM Security Directory Server)، edirectory (NetIQ eDirectory). |
connectionUrl | عنوان URL الكامل لخادم LDAP، بما فيه البروتوكول (ldap:// أو ldaps://) واسم المضيف ورقم المنفذ. |
usersDn | موقع الدليل الذي تُخزَّن فيه حسابات المستخدمين ومنه تُبحث مدخلات المستخدمين وتُستورد. |
usernameLDAPAttribute | سمة الدليل التي يوفرها المستخدمون كاسم مستخدم عند المصادقة. |
rdnLDAPAttribute | سمة الدليل المستخدمة لتعريف المدخلات ضمن هيكل الدليل. في معظم التكوينات، تكون مماثلة لـ usernameLDAPAttribute. |
uuidLDAPAttribute | سمة دليل فريدة ومستقرة وغير متغيرة تُستخدم لتعريف كل حساب مستخدم بشكل دائم. |
userObjectClasses | قائمة مفصولة بفواصل من فئات كائنات LDAP التي تُعرّف مدخلات الدليل التي تُعرَّف وتُعالَج كحسابات مستخدمين. |
domains | نطاق بريد إلكتروني واحد أو أكثر مرتبط بالدليل. أثناء المصادقة، يُوجَّه تلقائيًا المستخدمون الذين تتطابق عناوين بريدهم الإلكتروني مع أي من النطاقات المُكوَّنة إلى موفر LDAP هذا للتحقق من بيانات الاعتماد. |
معامل domains هو الطريقة الوحيدة المدعومة لتكوين التوجيه المستند إلى النطاق في عمليات النشر المحلية. لا تُكوّن النطاقات من خلال واجهة مستخدم إدارة Bob لأن ذلك غير مدعوم ويمكن أن يُسبب أخطاء مصادقة.
الحقول الاختيارية
| الحقل | الوصف |
|---|---|
adminEmails | عناوين البريد الإلكتروني للمستخدمين لمنحهم امتيازات المسؤول. يُعيّن Bob وصول المسؤول لهؤلاء المستخدمين تلقائيًا. |
bindDn | DN لحساب الخدمة المستخدم للمصادقة والاتصال بالدليل. يمكن حذفه إذا كان الدليل يسمح بوصول الربط المجهول. |
bindPasswordSecret | يشير إلى Secret الذي يُخزّن كلمة مرور حساب الربط. يُنشأ هذا Secret تلقائيًا عند توفير خيار --bind-password مع أمر bobctl. |
useTruststoreSpi | يُحدد متى تُستخدم شهادة CA لـ LDAP للتحقق من الخادم. القيم: always (افتراضي، لشهادات CA الخاصة أو المُصدَرة داخليًا)، ldapsOnly (لشهادات CA الموثوقة عمومًا)، never (عند الاتصال عبر ldap:// غير المؤمَّن). |
ldapsCACertSecret | يشير إلى Secret الذي يحتوي على شهادة CA لخادم LDAP بتنسيق PEM. يُنشأ هذا Secret تلقائيًا عند توفير --ca-cert-file. |
searchScope | يُحدد عمق عمليات بحث الدليل. 2 يبحث في جميع الحاويات والأشجار الفرعية (افتراضي)؛ 1 يقصر البحث على المدخلات الفرعية المباشرة فقط. |
customUserSearchFilter | مرشح إضافي يُطبَّق على جميع عمليات بحث المستخدمين، مثلًا لاستبعاد حسابات الخدمة أو تقييد البحث على أنواع مستخدمين محددة. |
userSync.enabled | عند التعيين إلى true، يُستورد جميع المستخدمين عند التكوين الأولي للموفر، وتُزامَن تغييرات الدليل اللاحقة كل خمس دقائق. موصى به لمعظم عمليات النشر. |
userAttributeMappings | يُعرّف كيفية تعيين سمات الدليل لحقول ملف مستخدم Bob، مثل email وfirstName وlastName. |
priority | يُحدد الترتيب الذي تُقيَّم فيه الموفرون عند تكوين موفرين متعددين. تُفحص الموفرون ذوو القيم المنخفضة أولًا. الافتراضي هو 0. |
groupMapper | يُزامن مجموعات LDAP في Keycloak. راجع تكوين مزامنة مجموعات LDAP. |
سلوك مزامنة المستخدمين
عند تعيين userSync.enabled إلى true، يُجري Bob استيرادًا لمرة واحدة لجميع المستخدمين عند تسجيل موفر LDAP. بعد اكتمال الاستيراد الأولي، تُعالَج مزامنة دورة حياة المستخدمين المستمرة تلقائيًا عبر SCIM.
لأدلة LDAP الكبيرة، فكّر في ترك userSync.enabled معيَّنًا إلى false والسماح بتوفير المستخدمين عند تسجيل دخولهم الأول. يمكن أن يُقلل هذا النهج من الوقت اللازم لتسجيل موفر LDAP.
تكوين مزامنة مجموعات LDAP
استخدم تكوين groupMapper الاختياري لمزامنة مجموعات LDAP مع Keycloak. تُتيح مزامنة المجموعات استيراد المستخدمين وعضوياتهم في المجموعات المُعرَّفة في دليل LDAP الخاص بك وإدارتها من خلال Keycloak.
المعامل groupsDn مطلوب. جميع المعاملات الأخرى اختيارية ويمكن تخصيصها لتتناسب مع مخطط دليل LDAP وهيكل مجموعته.
مجموعتا bob-admins وbob-users هما مجموعتان تُديرهما المنصة وتستبعدان من مزامنة مجموعات LDAP تلقائيًا.
| المعامل | القيمة الافتراضية | الوصف |
|---|---|---|
groupsDn | مطلوب | اسم DN الأساسي المميز الذي يحتوي على مدخلات مجموعة LDAP. |
name | groups | الاسم المعروض لمحوّل المجموعة في Keycloak. |
groupNameLdapAttribute | cn | سمة LDAP التي يستخدمها Keycloak كاسم مجموعة. |
groupObjectClasses | groupOfNames | فئة أو فئات كائنات LDAP التي تُعرّف مدخلات المجموعة. |
membershipLdapAttribute | member | السمة في مدخل المجموعة التي تحتوي على معلومات العضوية. |
membershipAttributeType | DN | تنسيق قيم العضوية. القيم المدعومة: DN (أسماء مميزة) وUID (معرّفات المستخدمين). |
userRolesRetrieveStrategy | LOAD_GROUPS_BY_MEMBER_ATTRIBUTE | الأسلوب المستخدم لتحديد عضويات المجموعة. |
memberOfLdapAttribute | memberOf | سمة المستخدم التي تحتوي على معلومات عضوية المجموعة عند استخدام GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE. |
customGroupSearchFilter | لا شيء | مرشح LDAP إضافي يُستخدم عند البحث عن مجموعات. يجب أن يُحاط المرشح بأقواس، مثلًا (cn=dept-*). |
mode | LDAP_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_RECURSIVELY | تسترد عضويات المجموعة بشكل تكراري، بما فيها المجموعات المتداخلة عند دعم دليل LDAP لذلك. |
استخدم LOAD_GROUPS_BY_MEMBER_ATTRIBUTE ما لم يُخزّن دليل LDAP معلومات عضوية المجموعة في مدخلات المستخدمين من خلال سمة memberOf أو يستخدم هياكل مجموعة متداخلة تتطلب عمليات بحث تكرارية.
مثال على التكوين
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
# Optional: synchronize LDAP groups into 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 للتحقق من التكوين ومعاينة الموارد التي ستُنشأ. يمكن أن يساعد تشغيل dry run في تحديد مشكلات التكوين الشائعة قبل إجراء أي تغييرات على المجموعة.
./bobctl add-ldap --config my-ldap.yaml \
--bind-password '<bind-password>' \
--ca-cert-file /path/to/ca.crt \
--dry-runيُجري dry run الفحوصات التالية:
- يتحقق من وجود جميع معاملات التكوين المطلوبة في ملف التكوين.
- يتحقق من توافر ملف شهادة CA المُحدد محليًا عند استخدام
--ca-cert-file. - يعرض معاينة للمورد المخصص
BobLDAPالذي سيُنشأ أو يُحدَّث. - يُظهر Kubernetes Secrets التي ستُولَّد كجزء من التكوين.
- ينتهي دون إنشاء أي موارد أو تعديلها أو حذفها في المجموعة.
لا تتحقق عملية dry-run من الاتصال الشبكي بخادم LDAP، ولا تُصادق بيانات الاعتماد المُقدَّمة مقابل الدليل، ولا تؤكد وجود Secrets المُشار إليها في المجموعة. تُجرى هذه التحقيقات فقط بعد تطبيق التكوين وتنعكس في شروط الحالة 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> | لا | يُنشئ ldapsCACertSecret من ملف PEM محلي. يمكن حذفه عند استخدام CA موثوق عمومًا أو اتصال ldap:// غير مؤمَّن. |
--dry-run | لا | يتحقق من التكوين ويعرض معاينة للموارد التي ستُنشأ أو تُحدَّث، دون تطبيق أي تغييرات على المجموعة. |
عند تشغيل الأمر، ينتظر bobctl حتى يُسوّي المُشغِّل التكوين ويتحقق من موفر LDAP بفحص شروط الحالة التي يُبلّغ عنها المورد المخصص BobLDAP.
| الفحص | ما يؤكده |
|---|---|
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:
| الشرط | الغرض |
|---|---|
Ready | يؤكد تسجيل موفر LDAP بنجاح. |
LDAPReachable | يؤكد قدرة المجموعة على التواصل مع خادم LDAP. |
LDAPAuthenticated | يؤكد صحة بيانات اعتماد الربط المُكوَّنة. |
UserSyncSucceeded | يؤكد استيراد جميع المستخدمين بنجاح. موجود فقط عند userSync.enabled: true. |
إذا كان أي شرط False، راجع حقل message المقابل للحصول على تفاصيل التشخيص.
سجّل الدخول باستخدام بيانات اعتماد من دليل LDAP الموحَّد للتحقق من عمل مصادقة المستخدم.
افتح عنوان URL الخاص بـ Bob:
https://bob.<namespace>.<ingress-domain>يؤكد تسجيل الدخول الناجح عمل الاتصال والمصادقة وتوجيه النطاق وتوفير SCIM وتعيين الأدوار بشكل صحيح.
بعد تسجيل دخول المستخدم للمرة الأولى، تأكد من توافر سجل المستخدم في Bob.
افتح واجهة إدارة Bob:
https://bob.<namespace>.<ingress-domain>/adminسجّل الدخول كمسؤول Bob وتحقق من ظهور المستخدم التجريبي في قائمة المستخدمين.
إذا كان groupMapper مُكوَّنًا لتعيين مجموعة LDAP لمسؤولي Bob:
- سجّل الدخول بحساب مستخدم ينتمي إلى مجموعة المسؤولين المعيَّنة.
- تأكد من قدرة المستخدم على الوصول إلى واجهة إدارة Bob.
- تحقق من توافر وظائف مستوى المسؤول.
إذا كان userSync.enabled: true، يُستورد المستخدمون تلقائيًا بعد تسجيل موفر LDAP. يجب أن يظهر المستخدم التجريبي في Bob دون تسجيل دخول أولي.
إذا لم يظهر المستخدم بعد عدة دقائق، راجع سجلات bob-admin بحثًا عن أخطاء التوفير:
oc logs -n <instance-namespace> -l app=bob-admin --tail=100راجع أي أخطاء مرتبطة بـ SCIM وأصلحها قبل إعادة محاولة عملية المزامنة.