تكامل 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://
  • حساب خدمة (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 وصول المسؤول لهؤلاء المستخدمين تلقائيًا.
bindDnDN لحساب الخدمة المستخدم للمصادقة والاتصال بالدليل. يمكن حذفه إذا كان الدليل يسمح بوصول الربط المجهول.
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.
namegroupsالاسم المعروض لمحوّل المجموعة في Keycloak.
groupNameLdapAttributecnسمة LDAP التي يستخدمها Keycloak كاسم مجموعة.
groupObjectClassesgroupOfNamesفئة أو فئات كائنات LDAP التي تُعرّف مدخلات المجموعة.
membershipLdapAttributememberالسمة في مدخل المجموعة التي تحتوي على معلومات العضوية.
membershipAttributeTypeDNتنسيق قيم العضوية. القيم المدعومة: DN (أسماء مميزة) وUID (معرّفات المستخدمين).
userRolesRetrieveStrategyLOAD_GROUPS_BY_MEMBER_ATTRIBUTEالأسلوب المستخدم لتحديد عضويات المجموعة.
memberOfLdapAttributememberOfسمة المستخدم التي تحتوي على معلومات عضوية المجموعة عند استخدام GET_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_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:

  1. سجّل الدخول بحساب مستخدم ينتمي إلى مجموعة المسؤولين المعيَّنة.
  2. تأكد من قدرة المستخدم على الوصول إلى واجهة إدارة Bob.
  3. تحقق من توافر وظائف مستوى المسؤول.

إذا كان userSync.enabled: true، يُستورد المستخدمون تلقائيًا بعد تسجيل موفر LDAP. يجب أن يظهر المستخدم التجريبي في Bob دون تسجيل دخول أولي.

إذا لم يظهر المستخدم بعد عدة دقائق، راجع سجلات bob-admin بحثًا عن أخطاء التوفير:

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

راجع أي أخطاء مرتبطة بـ SCIM وأصلحها قبل إعادة محاولة عملية المزامنة.

ما رأيك في هذا الموضوع؟