Конфігурація PowerFlex 4.x LDAP для великих середовищ

Summary: Звузивши фільтри пошуку LDAP користувача та групи за допомогою модуля єдиного входу PowerFlex Management Platform, ми можемо пом'якшити проблеми із синхронізацією, які, як було помічено, спричиняють численні проблеми з інтерфейсом користувача та платформою. ...

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Instructions

  1. Підготовка
  2. Видалення та очищення постачальника LDAP
  3. Перебудова постачальника LDAP
  4. Вузьке застосування області видимості користувача та групи LDAP

 

 

Тло: 

 

За замовчуванням постачальники каталогів PowerFlex Management Platform (PFMP) імпортують усі об'єкти LDAP у межах налаштованої області пошуку, включно з обліковими записами, які не належать користувачам, та іншими об'єктами, які не вимагаються нашим RBAC.

У великих середовищах така поведінка може призвести до значного використання ресурсів між віртуальними машинами керування PFMP (MVM), підтримуючою базою даних Postgres і загальною платформою.

Таким чином, синхронізація LDAP може не завершитися в прийнятні терміни, що призведе до затримок завдань, витоку пам'яті та проблем з паралелізмом.

 

1. Підготовка

 

Вимоги:

 

 

Використання глобального каталогу Active Directory

Примітка:  Нам потрібно використовувати порт 3268 для стандартного LDAP або 3269 для LDAPS у середовищах AD. Це дозволяє учасникам групи LDAP з дочірніх доменів або інших довірених доменів використовувати в PFMP.

Наприклад, група AD:

 

Дочірній домен вище na.powerflex.lab.dell.com має бути видимим за допомогою Keycloak Федерації користувачів LDAP PFMP, використовуючи порти глобального каталогу, які дозволяють їх доступ. 

Ось чому ми використовуємо objectGUID у постачальнику каталогів PFMP, він прив'язує облікові записи до їхнього глобального унікального UUID.

 

Якщо обидва дочірні домени вказано на вкладці «Довіра», здається, що субдомени за замовчуванням довіряють один одному.

У середовищі Microsoft Active Directory (AD) батьківський домен і його дочірні (під) домени за своєю суттю довіряють один одному в ієрархічній структурі. Це відомо як транзитивний траст.

За замовчуванням ці трасти є двосторонніми та транзитивними, тобто батьківський домен довіряє своїм дочірнім доменам і навпаки. Ця транзитивна природа поширює довіру на всі домени в ієрархії «батько-дочірній».

 

Пошук доступних серверів LDAP або AD GC за записами DNS

 

Зазвичай клієнт надає адресу LDAP для використання.  Ці параметри можна скопіювати з конфігурації постачальника каталогів PFMP, перш ніж видаляти їх у рамках наступних кроків цього посібника.

Крім того, доступні сервери можна отримати з DNS для певного домену:

 

# listing LDAP server
$ host -t srv _ldap._tcp.powerflex.lab.dell.com
Server:  nameserver.dell.com
Address:  10.8.8.8

Non-authoritative answer:
_ldap._tcp.powerflex.lab.dell.com       service = 0 100 636 hcihopad1.powerflex.lab.dell.com. _ldap._tcp.powerflex.lab.dell.com       service = 0 100 389 hcihopad1.powerflex.lab.dell.com. _ldap._tcp.powerflex.lab.dell.com       service = 0 100 389 hcick3ad2.powerflex.lab.dell.com. _ldap._tcp.powerflex.lab.dell.com       service = 0 100 636 hcick3ad1.powerflex.lab.dell.com. _ldap._tcp.powerflex.lab.dell.com       service = 0 100 389 hcihopad3.powerflex.lab.dell.com.
# listing AD GC servers (Active Directory Global Catalog) 
host -t srv _gc._tcp.powerflex.lab.dell.com
Server:  nameserver.dell.com
Address:  10.8.8.8

Non-authoritative answer:
_gc._tcp.powerflex.lab.dell.com service = 0 100 3268 hcihopad3.powerflex.lab.dell.com.
_gc._tcp.powerflex.lab.dell.com service = 0 100 3268 hcick3ad3.powerflex.lab.dell.com.
_gc._tcp.powerflex.lab.dell.com service = 0 100 3268 hcick3ad2.powerflex.lab.dell.com.

 

 

Як знайти відокремленеНайменування ОУ або Групи.

По-перше, нам знадобляться Розрізнені Імена (DN) OU та Груп, де ми хочемо читати користувачів у PFMP.  Ці шляхи не строго дотримуються імен DNS і містять OU всередині шляху x.500 LDAP, який ми можемо витягнути вручну.

Ми можемо знайти ці DN за допомогою різних утиліт залежно від ОС, одним із простих способів є використання curl:

Як перевірити налаштування PFMP LDAP за допомогою утиліти curl у Linux.

 

Новіші версії curl, які встановлені на MVM, можуть бути використані для пошуку потрібних вам повних видатних імен, наприклад, це шукає повний DN CN групи LabAdmins:

#Get the DN of your groups for use in the LDAP User filter while also validating your LDAP Group Filter syntax
# Set this to the group filter you intend to use in keycloak
GROUPFILTER='(CN=LabAdmins)'
# Use the LDAP svc bind creds to confirm the user can in fact call LDAP and see the group(s)
BINDUSER="user@powerflex.lab.dell.com"
# LDAP server URL.  For TLS use ldaps:// and port 3269
LDAPSERVER='ldap://ldap.powerflex.lab.dell.com:3268'
# Use the same search base as you intend for the group path, generally just the DC components
SEARCHBASE=DC=powerflex,DC=lab,DC=dell,DC=com
# Call curl which will request the password of the bind user and return results curl -s sub --user "$BINDUSER" "$LDAPSERVER/$SEARCHBASE?distinguishedName?sub?$GROUPFILTER" 

Enter host password for user 'jacqup@powerflex.lab.dell.com':

 

DN:CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
      distinguishedName:CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com

DN: CN=LabAdmins,CN=Users,DC=na,DC=powerflex,DC=lab,DC=dell,DC=com  distinguishedName: CN=LabAdmins,CN=Users,DC=na,DC=powerflex,DC=lab,DC=dell,DC=com

 

 

Manual examples:

 

curl -s sub --user "FLEXLAB\jacqup"
"ldap://ldap.powerflex.lab.dell.com:3268/DC=powerflex,DC=lab,DC=dell,DC=com?distinguishedName,objectGUID?sub?(|(CN=FLEXLAB-APP-PROD-SDS-Admin)(CN=LabAdmins)(CN=LabUsers)(CN=EMEALabAdmins))"

Enter host password for user 'FLEXLAB\jacqup':

DN: CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
       distinguishedName: CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com

DN: CN=LabAdmins,CN=Users,DC=na,DC=powerflex,DC=lab,DC=dell,DC=com
       distinguishedName: CN=LabAdmins,CN=Users,DC=na,DC=powerflex,DC=lab,DC=dell,DC=com

DN: CN=LabUsers,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
       distinguishedName: CN=LabUsers,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com

Знайдіть усіх учасників групи LDAP за допомогою властивостей фільтра, які ви потім можете помістити до модуля keycloak:

#check for all members of the group with CN=LabAdmins

curl -s sub
--user "jacqup@powerflex.lab.dell.com"
"ldap://ldap.powerflex.lab.dell.com:3268/DC=powerflex,DC=lab,DC=dell,DC=com?member?sub?(&(objectClass=group)(cn=LabAdmins))"

DN:CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
        member: CN=matrixadmin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
        member: CN=matrixadmin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
        member: CN=svc_adfsck3,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
        member: CN=svc_mcp_rw,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com         member: CN=adcertsvc,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com         member: CN=bobthebuilder,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com         member: CN=Ashish Rahangdale,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
        member: CN=Packer Admin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
        member: CN=FDLabAdmins,OU=Foundations,DC=powerflex,DC=lab,DC=dell,DC=com
        member: CN=Tejas Wadekar,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com

 

 

Як перевірити параметри PFMP LDAP за допомогою утиліти ldapsearch або curl у Linux.

 

Якщо у мережі доступний вузол linux, використання утиліти ldapsearch може бути корисним для перевірки та перевірки параметрів LDAP, які використовуються у PFMP/Keycloak.

Крім того, утиліта curl також може використовуватися для запитів LDAP з однієї з віртуальних машин керування/MVM.

 

Швидке ознайомлення (часто використовувані варіанти):

 

 

ldapsearch - LDAP search tool
ldapsearch opens a connection to an LDAP server, binds, and performs a search using specified parameters.

usage: ldapsearch [options] [filter
[attributes...]]

where:

filter       RFC 4515 compliant LDAP search filter
attributes   whitespace-separated list of attribute descriptions

Search options:
  -b basedn base dn for search
 -LLL      print responses in LDIF format without comments and version Common options:  -D binddn bind DN  -H URI    LDAP Uniform Resource Identifier(s)  -N        do not use reverse DNS to canonicalize SASL host name  -w passwd bind password (for simple authentication)  -W        prompt for bind password  -x        Simple authentication

 

 

 

Перевірка/встановлення інструменту:

$ which ldapsearch
/usr/bin/ldapsearch

#RHEL/CentOS install
sudo yum install openldap-clients

# SLES install
sudo zypper install openldap2-client

 

 

Визначення базового DN (-b) з кореневого запису LDAP:

 

$ curl "ldap://ldap.powerflex.lab.dell.com:3268/?rootDomainNamingContext"
DN:
        rootDomainNamingContext: DC=powerflex,DC=lab,DC=dell,DC=com

# ldapsearch (with simple auth)
$ ldapsearch -LLL -H ldap://ldap.powerflex.lab.dell.com -x -D "FLEXLAB\ck3-user" -W -b "" -s base "dn=" rootDomainNamingContext

dn: rootDomainNamingContext: DC=powerflex,DC=lab,DC=dell,DC=com

 

 

Кореневий запис надає інформацію про сервер каталогів. На AD атрибут rootDomainNamingContext дає верхній базовий DN, який можна використовувати для пошуку.

 -W -b "

 

Тестування LDAP URI,Bind DN (користувач/пароль з доступом на читання) та налаштувань пошуку користувачів:

 

$ ldapsearch -LLL -H ldap://powerflex.lab.dell.com:3268 -x -D "CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com" -W \ -b "dc=powerflex,dc=lab,dc=dell,dc=com" "(sAMAccountName=damonl)"
Enter LDAP Password: ********

dn: CN=Luc Damon,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
objectClass: person
cn: Luc Damon memberOf: CN=EMEALabAdmins,OU=LabAdmins,DC=powerflex,DC=lab,DC=dell,DC=com memberOf: CN=LabUsers,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com memberOf: CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com objectGUID:: 6Z359eP5vky4P0Ye8iFp8g== sAMAccountName: damonl

# equivalent curl command:

$ curl -u 'CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com' \ 
"ldap://ldap.powerflex.lab.dell.com:3268/DC=powerflex,DC=lab,DC=dell,DC=com??sub?(sAMAccountName=damonl)"
# OR (with attributes selection)
$ curl -u 'FLEXLAB\ck3-user' \
"ldap://ldap.powerflex.lab.dell.com:3268/DC=powerflex,DC=lab,DC=dell,DC=com?cn,objectClass,memberOf,objectGUID,sAMAccountName?sub?(sAMAccountName=damonl)"

У цьому прикладі ми запитуємо LDAP для існуючого облікового запису користувача за допомогою атрибута sAMAccountName (вихідні дані були обрізані, щоб показати лише потрібні нам атрибути).

 

Відповідні налаштування в інтерфейсі PFMP:

Адреса (-H):  ldap://active.directory.domain.address.com:3268

Прив'язка DN (-D): "CN=ck3-користувач,CN=Користувачі,DC=powerflex,DC=lab,DC=dell,DC=com" # ("FLEXLAB\ck3-користувач" або "ck3-user@powerflex.lab.dell.com" еквівалентні)

(-x потрібен для простої автентифікації, щоб уникнути режиму SASL за замовчуванням)

Bind DN Password (-W): запитайте пароль (або використовуйте –w '***', щоб надати його в команді)

 

The output of the command validates the following PFMP User Search Settings:

Username LDAP Attribute: sAMAccountName

Атрибут ID: objectGUID

Клас об'єкта: людина

Шлях пошуку (-b): "dc=powerflex,dc=lab,dc=dell,dc=com"

 

 

Налаштування пошуку груп тестування

 

$ ldapsearch -LLL -H ldap://powerflex.lab.dell.com:3268 -x -D "FLEXLAB\ck3-user" -W \ -b "dc=powerflex,dc=lab,dc=dell,dc=com" "(&(objectClass=group)(|(cn=FLEXLAB-APP-PROD-SDS-Admin)(cn=EMEALabAdmins)))" cn 

dn: CN=EMEALabAdmins,OU=LabAdmins,DC=powerflex,DC=lab,DC=dell,DC=com
sAMAccountName: Administrator

member: CN=ck3-builder,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
sAMAccountName: jacqup member: CN=Luc Damon,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com sAMAccountName: damonl member: CN=Patrick Jacques,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com sAMAccountName: bobthebuilder
$ curl -u 'FLEXLAB\ck3-user' "ldap://ldap.powerflex.lab.dell.com:3268/DC=powerflex,DC=lab,DC=dell,DC=com?member?sub?(&(objectClass=group)(cn=EMEALabAdmins))"

 

 

In this example, we are querying LDAP for an existing group (objectClass) using its cn attribute and requesting member value(s).

 

It permits to validate following PFMP settings:

Group Member Attribute: member

Group ID Attribute: cn

Group Object Class: group

Group Search Path: "dc=powerflex,dc=lab,dc=dell,dc=com"

 

Група тестування фільтра LDAP:

 $ ldapsearch -LLL -H ldap://powerflex.lab.dell.com:3268 -x -D "FLEXLAB\ck3-user" -W \ -b "dc=powerflex,dc=lab,dc=dell,dc=com" "(&(objectClass=group)(|(cn=FLEXLAB-APP-PROD-SDS-Admin)(cn=EMEALabAdmins)))" cn dn:
CN=EMEALabAdmins,OU=LabAdmins,DC=powerflex,DC=lab,DC=dell,DC=com 
cn:EMEALabAdmins

dn:CN=FLEXLAB-APP-PROD-SDS-Admin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
cn:FLEXLAB-APP-PROD-SDS-Admin

$ curl -u 'FLEXLAB\ck3-user' "ldap://ldap.powerflex.lab.dell.com:3268/DC=powerflex,DC=lab,DC=dell,DC=com?cn?sub?(&(objectClass=group)(|(cn=FLEXLAB-APP-PROD-SDS-Admin)(cn=EMEALabAdmins)))"

 

Тестування фільтра LDAP користувача:

$ ldapsearch -LLL -H ldap://powerflex.lab.dell.com:3268 -x -D "FLEXLAB\ck3-user" -W -b "dc=powerflex,dc=lab,dc=dell,dc=com" \
"(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=CN=FLEXLAB-APP-PROD-SDS-Admin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)\(memberOf=CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)))" sAMAccountName

dn: CN=Administrator,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
sAMAccountName:Administrator

dn: CN=Patrick Jacques,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
sAMAccountName:jacqup

dn: CN=Luc Damon,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
sAMAccountName: damonl

dn: CN=bobthebuilder,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com
sAMAccountName: bobthebuilder

 

 

curl -u 'FLEXLAB\ck3-user' "ldap://ldap.powerflex.lab.dell.com:3268/DC=powerflex,DC=lab,DC=dell,DC=com?sAMAccountName?sub?(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=CN=FLEXLAB-APP-PROD-SDS-Admin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)(memberOf=CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)))"

 

Вікна

Запустіть програму Active Directory для користувачів і комп'ютерів. Натисніть «Перегляд» і виберіть «Додаткові функції».

DN – це ім'я, яке однозначно ідентифікує запис у каталозі. Перший компонент DN називається відносною відмінною назвою (RDN).

DN складається з пар attribute=value, розділених комами, наприклад:

CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com

Думайте про них як про "FQDN для LDAP", повна 'URL' адреси x500.

Користувачі та комп'ютери AD можуть використовуватися для визначення DN та інших атрибутів:

 

 

Перейдіть і клацніть правою кнопкою миші OU там, де ви хочете читати користувачів, а потім виберіть «Властивості».

У властивостях OU виберіть вкладку Редактор атрибутів.

Клацніть «DistinctedName», щоб виділити його, а потім клацніть «Перегляд».

Клацніть правою кнопкою миші виділене значення та виберіть Копіювати. 

Натисніть «Скасувати», а потім «OK», щоб закрити вікна «Редактор атрибутів» і «Властивості OU».

 

 

 

 

Приклад фільтра користувача LDAP з вузькою областю:

 

(&(objectCategory=Person)(sAMAccountName=*)(|( memberOf=CN=FLEXLAB-APP-PROD-SDS-Admin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)(memberOf=CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)))

 

 

Візуальне пояснення:

 

Прив'язка вимог користувача.

 

Цей користувач bind повинен принаймні мати дозвіл на запити до користувачів і груп, які визначені на сервері LDAP, щоб дозволити системі зберігання даних розпізнавати цих користувачів.

 

За замовчуванням, коли користувач додається на вкладку безпеки домену верхнього рівня в розділі «Користувачі та комп'ютери Active Directory», йому надаються вимоги до читання за замовчуванням, необхідні для автентифікації LDAP у PFMP. наприклад

 

 

 

 

Довідка: Нам не потрібен наш користувач прив'язки LDAP фактично «в» групах AD, які ми повинні прочитати в каталозі, нам потрібні дозволи на вкладці «Безпека» на вкладці «Читання».

 

образ

Загальні вимоги до провайдера PFMP LDAP

 

Адреса: ldaps://ad.ldap.domain:3269 (SSL) АБО ldap://ad.ldap.domain:3268 (ЗВИЧАЙНА)

Прив'язка DN: ADNTDOMAIN\serviceaccount або Bind DN Distinct name.

Bind DN Password: пароль від службового облікового запису

Timeout 30000

Username LDAP attribute: sAMAccountName

Атрибут ID: objectGUID

Object Class: Person

Шлях пошуку: (Найвищий рівень, який може запитувати всі групи, наприклад, лише компоненти домену/DCs: DC=powerflex,DC=lab,DC=dell,DC=com)

Group Member Attribute: member

Group ID Attribute: cn

Group Object Class: group

Шлях групового пошуку:(Такий самий, як Шлях пошуку користувача, або більш детальний, якщо потрібно.  Оскільки ми будемо використовувати вузький фільтр, наша область може бути широкою без впливу на продуктивність.)

 

#The наступний запис надає принаймні одну групу до фільтра груп LDAP (PFMP 4.6.x+), отже keycloak не шукатиме всі групи з усієї директорії:

Group LDAP Filter: (CN=GROUP1)

#Given обмеження в 64 символи в цьому полі лише для PFMP UI, ми повинні використовувати клавіатуру, щоб обійти це, якщо ми хочемо додати більше, наприклад, 3 різні групи:
 

Group LDAP Filter: (|(CN=GROUP1)(CN=GROUP2)(CN=GROUP3))

Перевірте з'єднання та в разі успіху натисніть Надіслати.

Наприклад

 

 

2. Видалення та очищення постачальника LDAP

 

Видаліть користувачів, групи, а потім постачальника каталогів з інтерфейсу PFMP як користувача адміністратора.  Не намагайтеся робити це як користувач LDAP, а лише як адміністратор.

 

ПОПЕРЕДЖЕННЯ: Переконайтеся, що ви записали поточну конфігурацію для зіставлення «Постачальник каталогів» і «Віддалені користувачі/групи» з PFMP (зокрема, якщо вам потрібно відновити попереднє зіставлення ролей).

Якщо зіставлення груп/ролей не відображається в PFMP (відома проблема), скористайтеся наступними інструкціями:

# from any mvm
cmo_pri=$(kubectl get pods -n powerflex -l='postgres-operator.crunchydata.com/role=master,postgres-operator.crunchydata.com/instance-set' -o name)
# Group role
kubectl exec -it -n powerflex $cmo_pri -- psql -U postgres -d keycloak -c "SELECT keycloak_group.name AS group_name,keycloak_role.name AS role_name FROM group_role_mapping JOIN keycloak_group ON (group_role_mapping.group_id = keycloak_group.id) JOIN keycloak_role ON (group_role_mapping.role_id = keycloak_role.id);"
# Group attributes
kubectl exec -it -n powerflex $cmo_pri -- psql -U postgres -d keycloak -c "SELECT keycloak_group.name AS group_name,group_attribute.name AS attribute_name, value FROM group_attribute JOIN keycloak_group ON (group_attribute.group_id = keycloak_group.id);"
Example:
mvm01:~
# kubectl exec -it -n powerflex $cmo_pri -- psql -U postgres -d keycloak
keycloak=# SELECT keycloak_group.name AS group_name,keycloak_role.name AS role_name FROM group_role_mapping JOIN keycloak_group ON (group_role_mapping.group_id = keycloak_group.id) JOIN keycloak_role ON (group_role_mapping.role_id = keycloak_role.id);
 
 group_name  |   role_name
---------------+----------------
EMEALabAdmins | SuperUser
LabAdmins     | LifecycleAdmin
LabUsers      | Monitor (3 rows) keycloak=# SELECT keycloak_group.name AS group_name,group_attribute.name AS attribute_name, value FROM group_attribute JOIN keycloak_group ON (group_attribute.group_id = keycloak_group.id);  group_name  | attribute_name |  value ---------------+----------------+---------
EMEALabAdmins | remote_type    | Ldap EMEALabAdmins | SuperUser      | GLB:GLB EMEALabAdmins | is_remote      | true LabAdmins     | remote_type    | Ldap LabAdmins     | LifecycleAdmin | GLB:GLB LabAdmins     | is_remote      | true LabUsers      | remote_type    | Ldap LabUsers      | Monitor        | GLB:GLB LabUsers      | is_remote      | true (9 rows)
keycloak=# \q

 

 

Якщо в базі даних keycloak залишаються застарілі групи LDAP, їх можна видалити вручну за допомогою наступного процесу:

 

Команди резервного копіювання бази даних Keycloak та keycloak_group команди очищення таблиці бази даних.

 

Примітка: Ручне очищення клавіатури іноді не потрібне. 

Ми повинні використовувати інтерфейс PFMP для видалення провайдера (завжди спочатку з PFMP), а потім підтвердити, що його було очищено з keycloak за допомогою /auth/ URL.

 

 

Як перевірити кількість груп LDAP у keycloak з будь-якого одного MVM:

 

# Запустіть this, щоб спочатку встановити змінну.

cmo_pri=$(kubectl get pods -n powerflex -l='postgres-operator.crunchydata.com/role=master,postgres-operator.crunchydata.com/instance-set' -o name)

#check count of groups in keycloak
kubectl exec -it -n powerflex $cmo_pri -- psql -U postgres -d keycloak -c "SELECT COUNT (*) FROM keycloak_group;"
# We usually want 0 groups after removing the LDAP provider.
#Backup the current keycloak DB before any edits.
kubectl exec -it -n powerflex $cmo_pri -- bash -c 'pg_dump -U postgres -d keycloak' >/home/delladmin/keycloak.sql
#delete all entries inside of keycloak_group (and related roles and attributes) while preserving its structure
kubectl exec -it -n powerflex $cmo_pri -- psql -U postgres -d keycloak -c "DELETE FROM group_attribute;"
kubectl exec -it -n powerflex $cmo_pri -- psql -U postgres -d keycloak -c "DELETE FROM group_role_mapping;"
kubectl exec -it -n powerflex $cmo_pri -- psql -U postgres -d keycloak -c "DELETE FROM keycloak_group;"
#check that the group count has reduced:
kubectl exec -it -n powerflex $cmo_pri -- psql -U postgres -d keycloak -c "SELECT COUNT (*) FROM keycloak_group;"

 

Це відбувається лише після першого видалення в інтерфейсі PFMP, і лише якщо дані провайдера залишаються у серверній частині.  Якщо ви використовуєте PFxM 4.6.0.1, ви також можете виконати наступний метод для видалення імпортованих користувачів в інтерфейсі Keycloak:

  1. Увійдіть за допомогою /auth/ як користувач keycloak
  2. Пароль Keycloak унікальний для кожної інсталяції і його можна знайти на будь-якому MVM за допомогою:

 

kubectl get secret -n powerflex keycloak-admin-credentials -o jsonpath="{.data.password}" | base64 --decode; echo

 

3. Федерація користувачів -> LDAP -> Налаштування і в правому верхньому спадному меню Дії виберіть Видалити імпортовані.

 

 

 

 

 

 

Очистивши та видаливши групи та постачальники каталогів, перезавантажте три вузли MVM. 

 

 -Примітка: Це потрібно лише тоді, коли середовище велике, а запити LDAP накопичуються багаторазово, як це видно в журналах нижче.

 - Якщо середовище не перевантажене проблемами синхронізації, а інтерфейс користувача стабільний, перезавантаження MVM взагалі можна пропустити. Хоча в цілому це хороший захід.

 

Перезавантаження КБ https://www.dell.com/support/kbdoc/en-us/000225550 

MVM Graceful Reboot (має виконуватися по одному вузлу за раз) Не переходьте до наступного вузла, доки не переконаєтеся, що база даних повідомляє про режим синхронізації в режимі очікування.

 

#As найкраща практика визначити вузол, який є поточним лідером Postgres, і перезавантажити цей в останню чергу.

#Run наступну команду в будь-якому MVM, щоб вивести список пов'язаних станів бази даних та імен баз даних.

kubectl exec -n powerflex -c database $(kubectl get pods -n powerflex -l='postgres-operator.crunchydata.com/role=master, postgres-operator.crunchydata.com/instance-set' | grep Running | cut -d' ' -f1) -- sh -c 'patronictl list'

#Run цю команду, щоб визначити, на якому вузлі MVM розміщується блок бази даних postgres.

 

for x in `kubectl get pods -n powerflex | grep "postgres-ha-cmo" |awk '{print $1}'` ; do echo $x; kubectl get pods -n powerflex $x -o json | grep '"nodeName"' | cut -d ':' -f2 ; echo " "; done

 

#On MVM, який є екземпляром pod Postgres Leader.   Запустіть 'watch kubectl get nodes', щоб відстежувати статус ваших перезавантажень. Цей MVM повинен бути останнім вузлом, який буде перезавантажений.

#Приклад порядку перезавантаження, якщо pfmp-mgmt-1 є лідером Postgres. Налаштуйте порядок команд нижче залежно від того, який MVM є лідером Postgres.

 

Відкрийте термінал, підключений до третього MVM, і виконайте перші дві команди.

 

kubectl label
node pfmp-mgmt-3 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-3 --ignore-daemonsets --delete-emptydir-data && sudo reboot

#When вузол спливає з перезавантаження. Виконайте наступну команду.

kubectl uncordon pfmp-mgmt-3 ; kubectl label node pfmp-mgmt-3 cmo.maintenance.mode-

#Run наведену нижче команду, доки база даних, пов'язана з MVM3, не повідомить про синхронізацію в режимі очікування. На цьому етапі ви можете перейти до наступного MVM.

 

kubectl exec -n powerflex -c database $(kubectl get pods -n powerflex -l='postgres-operator.crunchydata.com/role=master, postgres-operator.crunchydata.com/instance-set' | grep Running | cut -d' ' -f1) -- sh -c 'patronictl list'

 

Відкрийте термінал, підключений до другого MVM, і виконайте перші дві команди.

 

kubectl label node pfmp-mgmt-2 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-2 --ignore-daemonsets --delete-emptydir-data && sudo reboot

#When вузол спливає з перезавантаження.  Виконайте наступну команду.

kubectl uncordon pfmp-mgmt-2 ; kubectl label node pfmp-mgmt-2 cmo.maintenance.mode-

#Run наведену нижче команду, доки база даних, пов'язана з MVM2, не повідомить про режим синхронізації в режимі очікування. На цьому етапі ви можете перейти до наступного MVM.

kubectl exec -n powerflex -c database $(kubectl get pods -n powerflex -l='postgres-operator.crunchydata.com/role=master, postgres-operator.crunchydata.com/instance-set' | grep Running | cut -d' ' -f1) -- sh -c 'patronictl list' 

#Run наступну команду, щоб використовувати цей MVM як MVM для моніторингу стану вузла.

'watch kubectl get nodes'

 

Перейдіть до терміналу, підключеного до першого MVM, на якому виконується функція «дивитися, kubectl отримує вузли».  Натисніть ctrl+c, щоб повернутися до терміналу та виконати перші дві команди.

kubectl label
node pfmp-mgmt-1 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-1 --ignore-daemonsets --delete-emptydir-data && sudo reboot

#When вузол спливає з перезавантаження.  Виконайте наступну команду.

kubectl uncordon pfmp-mgmt-1 ; kubectl label node pfmp-mgmt-1 cmo.maintenance.mode-

#Run наступну команду, доки база даних, пов'язана з MVM1, не повідомить про синхронізацію в режимі очікування.  Цей MVM був лідером, але новий лідер взяв на себе відповідальність, коли MVM1 був вичерпаний.  

kubectl exec -n powerflex -c database $(kubectl get pods -n powerflex -l='postgres-operator.crunchydata.com/role=master, postgres-operator.crunchydata.com/instance-set' | grep Running | cut -d' ' -f1) -- sh -c 'patronictl list'

ЗАВЕРШЕННЯ ПРОЦЕДУРИ ВИТОНЧЕНОГО ПЕРЕЗАВАНТАЖЕННЯ MVM

Після перезавантаження та відновлення інтерфейсу користувача для PFMP увійдіть як адміністратор і додайте Налаштування -> Постачальник каталогів , виконавши наведені нижче дії:

3. Перебудова постачальника LDAP

 

Як згадувалося в розділі підготовки, якщо є дочірні домени AD або довірчі облікові записи доменів AD у будь-яких групах, які ви використовуєте в PFMP, то слід використовувати порти LDAP глобального каталогу (GC) 3268 (звичайний) і 3269 (SSL).

 

Наприклад

 

ldaps://ad.ldap.corporate.domain.com:3269
Users DN: DC=powerflex,DC=lab,DC=dell,DC=com
Bind DN:DOMAIN\svc_ldapbindaccount 
Username LDAP attribute: sAMAccountName
UUID LDAP attribute: objectGUID
User Object Classes: Person
This field has a 64 character limit in PFMP UI only.   You can put one group in to prevent 'full' directory sync, then use the keycloak UI to refine and add on to the group filter.
Group LDAP Filter: (|(CN=FLEXLAB-APP-PROD-SDS-Admin)(CN=LabAdmins))
Timeout 22222

4. Вузьке застосування області видимості користувача та групи LDAP

 

 

 

Увійдіть за допомогою /auth/ як користувач keycloak


Фільтр користувачів:

 

 

 

# Фільтр LDAP користувача відсутній в інтерфейсі PFMP, тому нам потрібно використовувати наступне, щоб змінити це.

#This фільтр має застосовуватися в області Keycloak PowerFlex (PowerFlex --> Федерація користувачів --> Фільтр LDAP користувача)

 

 

 

Фільтр LDAP користувача:

 

 

(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=CN=FLEXLAB-APP-PROD-SDS-Admin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)(memberOf=CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)(memberOf=CN=LabUsers,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)))

 

 

 

Збережіть зміни.

 

 

 

Пояснення цього звуженого фільтра:

 

 

 

objectCategory дорівнює Person.

І

sAMAccountName існує

І

членOf дорівнює CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com

Або

членOf дорівнює CN=FLEX-STOR-MON,OU=15G,OU=FLEXLAB,DC=powerflex,DC=lab,DC=dell,DC=com

Від <https://ldap-builder.powerflex.lab.dell.com/>

Федерація користувачів -> LDAP -> Налаштування і в правому верхньому випадаючому меню Дії виберіть видалити імпортоване.

 

4.6.x+ Метод інтерфейсу користувача для видалення зіставлення груп.

 

У налаштуваннях групового зіставлення LDAP для «Атрибут LDAP користувача-члена» нам також потрібно переконатися, що правильне значення, яке ми надсилаємо як 'cn' і не можемо змінити в інтерфейсі PFMP UI, змінено в інтерфейсі keycloak на DN.

 

 

 

У груповому фільтрі LDAP ми можемо вказати оператор або/або |   і КН кожної групи, наприклад

(|(CN=FLEXLAB-APP-PROD-SDS-Admin)(CN=CN=PRV_US_SA_SRV_SVS))

 

Products

PowerFlex rack, VxFlex Ready Nodes, PowerFlex custom node, PowerFlex appliance R650, PowerFlex appliance R6525, PowerFlex appliance R660, PowerFlex appliance R6625, Powerflex appliance R750, PowerFlex appliance R760, PowerFlex appliance R7625 , PowerFlex custom node, PowerFlex custom node R650, PowerFlex custom node R6525, PowerFlex custom node R660, PowerFlex custom node R6625, PowerFlex custom node R750, PowerFlex custom node R760, PowerFlex custom node R7625, PowerFlex custom node R860, PowerFlex rack connectivity, PowerFlex rack HW, PowerFlex rack RCM Software, PowerFlex Software, VxFlex Ready Node, VxFlex Ready Node R640, VxFlex Ready Node R740xd, PowerFlex appliance R640, PowerFlex appliance R740XD, PowerFlex appliance R7525, PowerFlex appliance R840, VxFlex Ready Node R840 ...
Article Properties
Article Number: 000243118
Article Type: How To
Last Modified: 20 Mar 2025
Version:  7
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.