تكامل LDAP
هيّئ اتحاد LDAP أو Active Directory لـ IBM Bob ذاتي الاستضافة باستخدام المورد المخصص BobIDP والأمر bobctl configure-idp.
استخدم bobctl configure-idp لربط بيئة LDAP أو Active Directory بـ Keycloak كموفر اتحاد مستخدمين. يمكنك إتمام هذا الإعداد أثناء التثبيت أو في أي وقت بعد النشر.
قبل البدء
قبل تكوين اتحاد LDAP، تأكد من استيفاء المتطلبات التالية:
- مجموعة OpenShift Container Platform (OCP) لها اتصال شبكي بخادم LDAP على المنفذ المناسب:
- 389 لـ
ldap:// - 636 لـ
ldaps://
- 389 لـ
- حساب خدمة (bind DN) يملك وصول القراءة للدليل متاح، أو خادم LDAP مُكوَّن للسماح بالربط المجهول.
- إذا كنت تستخدم
ldaps://مع مرجع مصادقة (CA) خاص أو موقَّع داخليًا، احصل على شهادة CA لخادم LDAP بتنسيق PEM. - أداة سطر الأوامر
bobctlمثبَّتة، وocمُكوَّنة ومصادَق عليها مقابل المجموعة المستهدفة.
مرجع ملف التكوين
أنشئ ملف تكوين IDP من القالب المقدَّم قبل تسجيل موفر LDAP.
cp config-idp-template.yaml my-idp.yamlيتضمن ملف التكوين قسمين: حقول المستوى الأعلى التي تنطبق على النشر بأكمله، وقائمة ldaps الاختيارية التي يصف كل مدخل فيها موفر اتحاد LDAP واحدًا.
حقول المستوى الأعلى
| الحقل | مطلوب | الوصف |
|---|---|---|
domains | نعم | قائمة نطاقات البريد الإلكتروني التي يقبلها Bob عند تسجيل الدخول. يؤدي إزالة نطاق إلى إلغاء تسجيله؛ لن يتمكن المستخدمون الذين يملكون هذا النطاق من تسجيل الدخول. |
adminEmails | لا | قائمة عناوين بريد المستخدمين الذين سيُمنحون وصول مسؤول Bob. يُحدّث المُشغِّل مجموعة bob-admins في Keycloak وقاعدة بيانات مسؤولي Bob بصورة ذرية. |
ldaps | لا | قائمة تكوينات موفري اتحاد LDAP. احذفها بالكامل للنشرات التي تستخدم مستخدمي Keycloak المباشرين فقط. |
الحقول المطلوبة (لكل مدخل موفر 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 هو الطريقة الوحيدة لتكوين التوجيه المستند إلى النطاق في عمليات النشر المحلية. لا تُكوّن النطاقات من خلال واجهة مستخدم إدارة Bob لأن ذلك ليس الطريقة الصحيحة ويمكن أن يُسبب أخطاء مصادقة.
الحقول الاختيارية (لكل مدخل موفر LDAP)
| الحقل | الوصف |
|---|---|
bindDn | DN لحساب الخدمة المستخدم للمصادقة والاتصال بالدليل. يمكن حذفه إذا كان الدليل يسمح بوصول الربط المجهول. |
bindPasswordSecret | اسم Secret موجود مسبقًا يحتوي على كلمة مرور حساب الربط. يجب إنشاؤه في فضاء اسم المنشأة قبل تشغيل bobctl configure-idp. |
useTruststoreSpi | يُحدد متى تُستخدم شهادة CA لـ LDAP للتحقق من الخادم. القيم: always (افتراضي، لشهادات CA الخاصة أو المُصدَرة داخليًا)، ldapsOnly (لشهادات CA الموثوقة عمومًا)، never (عند الاتصال عبر ldap:// غير المؤمَّن). |
ldapsCACertSecret | اسم Secret موجود مسبقًا يحتوي على شهادة CA لخادم LDAP بتنسيق PEM. يجب إنشاؤه في فضاء اسم المنشأة قبل تشغيل bobctl configure-idp. |
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 أو يستخدم هياكل مجموعة متداخلة تتطلب عمليات بحث تكرارية.
مثال على التكوين
# نطاقات البريد الإلكتروني التي يقبلها Bob عند تسجيل الدخول
domains:
- corp.example.com
# المستخدمون الذين سيُمنحون وصول مسؤول Bob
adminEmails:
- alice@corp.example.com
# موفرو اتحاد LDAP
ldaps:
- 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
bindDn: cn=bob-svc,ou=ServiceAccounts,dc=corp,dc=example,dc=com
bindPasswordSecret: corp-ldap-bind
useTruststoreSpi: always
ldapsCACertSecret: corp-ldap-ca
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 configure-idp --config my-idp.yamlالتحقق من تكوين LDAP قبل تطبيقه
قبل تطبيق تكوين LDAP على المجموعة، استخدم خيار --dry-run للتحقق من التكوين ومعاينة الموارد التي ستُنشأ. يمكن أن يساعد تشغيل dry run في تحديد مشكلات التكوين الشائعة قبل إجراء أي تغييرات على المجموعة.
./bobctl configure-idp --config my-idp.yaml \
--bind-password '<bind-password>' \
--ca-cert-file /path/to/ca.crt \
--dry-runيُجري dry run الفحوصات التالية:
- يتحقق من وجود جميع معاملات التكوين المطلوبة في ملف التكوين.
- يعرض معاينة للمورد المخصص
BobIDPالذي سيُنشأ أو يُحدَّث. - ينتهي دون إنشاء أي موارد أو تعديلها أو حذفها في المجموعة.
لا تتحقق عملية dry-run من الاتصال الشبكي بخادم LDAP، ولا تُصادق بيانات الاعتماد المُقدَّمة مقابل الدليل، ولا تؤكد وجود Secrets المُشار إليها في المجموعة. تُجرى هذه التحقيقات فقط بعد تطبيق التكوين وتنعكس في شروط الحالة LDAPReachable وLDAPAuthenticated.
تطبيق التكوين
بعد إنشاء ملف تكوين LDAP والتحقق منه، شغّل أمر configure-idp لتطبيق التكوين على المجموعة.
./bobctl configure-idp --config my-idp.yaml \
--bind-password '<bind-password>' \
--ca-cert-file /path/to/ca.crt| الراية | مطلوب | الوصف |
|---|---|---|
--config <file> | نعم | يُحدد مسار ملف تكوين IDP. |
--dry-run | لا | يتحقق من التكوين ويعرض معاينة للموارد التي ستُنشأ أو تُحدَّث، دون تطبيق أي تغييرات على المجموعة. |
عند تشغيل الأمر، ينتظر bobctl حتى يُسوّي المُشغِّل التكوين ويتحقق من IDP بفحص شروط الحالة التي يُبلّغ عنها المورد المخصص BobIDP.
| الفحص | ما يؤكده |
|---|---|
Ready | تم تطبيق التكوين بنجاح. |
LDAPRegistered | تم تسجيل موفر LDAP في Keycloak. |
LDAPReachable | خادم LDAP قابل للوصول من المجموعة. |
LDAPAuthenticated | بيانات اعتماد الربط المُكوَّنة صالحة. |
LDAPUserSyncSucceeded | اكتمل الاستيراد الأولي للمستخدمين بنجاح. يُقيَّم هذا الشرط فقط عند تعيين userSync.enabled إلى true. |
المهلة الافتراضية للتحقق هي 600 ثانية (10 دقائق). في البيئات ذات الأدلة الكبيرة، يمكن أن تستغرق المزامنة الأولية للمستخدمين عدة دقائق للاكتمال. لزيادة المهلة، عيّن متغير البيئة BOB_IDP_WAIT_TIMEOUT:
BOB_IDP_WAIT_TIMEOUT=900 ./bobctl configure-idp --config my-idp.yamlتكوين موفرين متعددين لـ LDAP
لدمج مستخدمين من مصادر LDAP أو Active Directory متعددة، أضف كل دليل كمدخل منفصل في قائمة ldaps في ملف تكوين IDP وأعد تشغيل configure-idp.
./bobctl configure-idp --config my-idp.yamlفحص حالة مورد IDP
لعرض حالة تكوين IDP:
oc get bobidp -n <instance-namespace>لعرض معلومات التكوين والحالة التفصيلية:
oc get bobidp bob-idp -n <instance-namespace> -o yamlالتحقق من التكامل
بعد اكتمال bobctl configure-idp بنجاح، تحقق من أن تكامل LDAP يعمل بشكل صحيح.
افحص حالة المورد المخصص BobIDP:
oc get bobidp bob-idp -n <instance-namespace> -o yamlتحقق من أن شروط الحالة التالية معيَّنة إلى True:
| الشرط | الغرض |
|---|---|
Ready | يؤكد تطبيق التكوين بنجاح. |
LDAPRegistered | يؤكد تسجيل موفر LDAP في Keycloak. |
LDAPReachable | يؤكد قدرة المجموعة على التواصل مع خادم LDAP. |
LDAPAuthenticated | يؤكد صحة بيانات اعتماد الربط المُكوَّنة. |
LDAPUserSyncSucceeded | يؤكد استيراد جميع المستخدمين بنجاح. موجود فقط عند 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 وأصلحها قبل إعادة محاولة عملية المزامنة.