Konfiguracja LDAP PowerFlex 4.x dla dużych środowisk

Summary: Zawężając filtry wyszukiwania LDAP użytkownika i grupy przy użyciu zaplecza SSO platformy zarządzania PowerFlex, możemy złagodzić problemy z synchronizacją, które powodują wiele problemów z interfejsem użytkownika i 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. Czynności przygotowawcze
  2. Usuwanie i czyszczenie dostawcy LDAP
  3. Odbudowa dostawcy LDAP
  4. Wąska aplikacja zakresu użytkowników i grup LDAP

 

 

Opis: 

 

Domyślnie dostawcy katalogów platformy zarządzania PowerFlex (PFMP) importują wszystkie obiekty LDAP w skonfigurowanym zakresie wyszukiwania, w tym konta użytkowników i inne obiekty, które nie są wymagane przez naszą kontrolę dostępu opartą na rolach.

W dużych środowiskach to zachowanie może spowodować znaczne wykorzystanie zasobów na maszynach wirtualnych zarządzania PFMP (MVM), pomocniczej bazie danych Postgres i całej platformie.

W związku z tym synchronizacja LDAP może zakończyć się niepowodzeniem w akceptowalnych ramach czasowych, powodując zaległości zadań, wycieki pamięci i problemy ze współbieżnością.

 

1. Czynności przygotowawcze

 

Wymagania sprzętowe:

 

 

Korzystanie z wykazu globalnego usługi Active Directory

Uwaga:  Wymagane jest użycie portu 3268 dla standardowego protokołu LDAP lub portu 3269 dla LDAPS w środowiskach AD. Dzięki temu członkowie grupy LDAP z domen podrzędnych lub innych zaufanych domen mogą być używani w planie PFMP.

Grupa AD, na przykład:

 

Domena podrzędna powyżej na.powerflex.lab.dell.com musi być widoczna dla programu LDAP User Federation Keycloak programu PFMP, korzystając z portów wykazu globalnego, które umożliwiają dostęp do tych portów. 

Z tego też powodu w dostawcy katalogów PFMP używamy objectGUID, który wiąże konta z ich globalnym unikatowym identyfikatorem UUID.

 

Jeśli obie domeny podrzędne są wymienione na karcie Trusts, wygląda na to, że poddomeny ufają sobie nawzajem domyślnie.

W środowisku Microsoft Active Directory (AD) domena nadrzędna i jej domeny podrzędne (podrzędne) z natury ufają sobie nawzajem w strukturze hierarchicznej. Jest to znane jako zaufanie przechodnie.

Domyślnie te relacje zaufania są dwukierunkowe i przechodnie, co oznacza, że domena nadrzędna ufa swoim domenom podrzędnym i na odwrót. Ten przechodni charakter rozszerza zaufanie na wszystkie domeny w hierarchii nadrzędny-podrzędny.

 

Znajdowanie dostępnych serwerów LDAP lub AD GC na podstawie wpisów DNS

 

Zazwyczaj klient podaje adres LDAP, który ma być używany.  Ustawienia te można skopiować z konfiguracji dostawcy katalogów PFMP przed jej usunięciem w ramach kolejnych kroków tego przewodnika.

Alternatywnie można pobrać dostępne serwery z DNS dla określonej domeny:

 

# 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.

 

 

Znajdowanie wyróżnionej nazwy jednostki organizacyjnej lub grupy.

Po pierwsze, będziemy potrzebować nazw wyróżniających (DN) jednostek organizacyjnych i grup, w których chcemy wczytywać użytkowników do PFMP.  Te ścieżki nie są ściśle zgodne z nazewnictwem DNS i zawierają jednostki organizacyjne wewnątrz ścieżki LDAP x.500, którą można wyodrębnić ręcznie.

Możemy znaleźć te nazwy wyróżniające za pomocą różnych narzędzi w zależności od systemu operacyjnego, jednym z łatwych sposobów jest użycie curl:

Testowanie ustawień PFMP LDAP za pomocą narzędzia curl w systemie Linux.

 

Nowsze wersje curl , który jest zainstalowany na MVM, mogą służyć do znajdowania pełnych nazw wyróżniających, których potrzebujesz, na przykład wyszukuje pełną nazwę wyróżniającą grupy LabAdmins CN:

#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

Znajdź wszystkich członków grupy LDAP przy użyciu właściwości filtru, które następnie możesz umieścić w zapleczu 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

 

 

Testowanie ustawień PFMP LDAP za pomocą narzędzia ldapsearch lub curl w systemie Linux.

 

Jeśli host z systemem Linux jest dostępny w sieci, użycie narzędzia ldapsearch może być przydatne do testowania i sprawdzania poprawności ustawień LDAP używanych w PFMP/Keycloak.

Alternatywnie narzędzie curl może być również używane do zapytań LDAP z jednej z maszyn wirtualnych/MVM zarządzania.

 

Szybkie wprowadzenie (najczęściej używane opcje):

 

 

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

 

 

 

Sprawdzanie/instalowanie narzędzia:

$ which ldapsearch
/usr/bin/ldapsearch

#RHEL/CentOS install
sudo yum install openldap-clients

# SLES install
sudo zypper install openldap2-client

 

 

Definiowanie podstawowej nazwy wyróżniającej (-b) z głównego wpisu 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

 

 

Wpis główny zawiera informacje o serwerze katalogów. W usłudze AD atrybut rootDomainNamingContext podaje najwyższą podstawową nazwę wyróżniającą, która może być używana do wyszukiwania.

 -W -b "

 

Testowanie identyfikatora URI LDAP, nazwy wyróżniającej powiązania (użytkownika/hasła z dostępem do odczytu) i ustawień wyszukiwania użytkownika:

 

$ 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)"

W tym przykładzie wysyłamy zapytanie do LDAP dla istniejącego konta użytkownika przy użyciu atrybutu sAMAccountName (dane wyjściowe zostały obcięte, aby pokazać tylko potrzebne nam atrybuty).

 

Odpowiednie ustawienia w interfejsie użytkownika PFMP:

Adres (-H):  ldap://active.directory.domain.address.com:3268

Nazwa wyróżniająca powiązania (-D): "CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com" # ("FLEXLAB\ck3-user" lub "ck3-user@powerflex.lab.dell.com" są odpowiednikami)

(-x jest wymagane do prostego uwierzytelniania, aby uniknąć domyślnego trybu SASL)

Bind DN Password (-W): o hasło (lub użyj –w '***' , aby podać je w poleceniu)

 

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

Username LDAP Attribute: sAMAccountName

Atrybut identyfikatora: objectGUID

Klasa podmiotu: osoba

Ścieżka wyszukiwania (-b): "dc = powerflex, dc = lab , dc = dell (dc) = com

 

 

Ustawienia wyszukiwania w grupie testowej:

 

$ 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"

 

Filtr LDAP grupy testowej:

 $ 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)))"

 

Testowanie filtra LDAP użytkownika:

$ 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)))"

 

Windows

Uruchom aplet Użytkownicy i komputery usługi Active Directory. Kliknij przycisk Wyświetl i wybierz opcję Funkcje zaawansowane.

Nazwa wyróżniająca to nazwa jednoznacznie identyfikująca wpis w katalogu. Pierwszy składnik nazwy wyróżniającej jest określany jako względna nazwa wyróżniająca (RDN).

Nazwa wyróżniająca składa się z par atrybut=wartość oddzielonych przecinkami, na przykład:

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

Pomyśl o nich jako o "nazwach FQDN dla LDAP", pełnym adresie x500 "URL".

Użytkownicy i komputery usługi AD mogą służyć do określania nazw wyróżniających i innych atrybutów:

 

 

Przejdź i kliknij prawym przyciskiem myszy jednostkę organizacyjną, w której chcesz odczytać użytkowników, a następnie wybierz pozycję Właściwości.

We właściwościach jednostki organizacyjnej wybierz kartę Edytor atrybutów.

Kliknij wyróżnioną nazwę, aby ją podświetlić, a następnie kliknij przycisk Widok.

Kliknij prawym przyciskiem myszy wyróżnioną wartość i wybierz polecenie Kopiuj. 

Kliknij przycisk Anuluj, a następnie OK, aby zamknąć okna Edytor atrybutów i Właściwości jednostki organizacyjnej.

 

 

 

 

Przykład filtra użytkownika LDAP o wąskim zakresie:

 

(&(objectCategory=Osoba)(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)))

 

 

Wyjaśnienie wizualne:

 

Powiąż wymagania użytkownika.

 

Ten użytkownik powiązania musi mieć co najmniej uprawnienia do wysyłania zapytań do użytkowników i grup zdefiniowanych na serwerze LDAP, aby umożliwić systemowi pamięci masowej uwierzytelnianie tych użytkowników.

 

Domyślnie, gdy użytkownik jest dodawany do karty Zabezpieczenia domeny najwyższego poziomu w aplecie Użytkownicy i komputery usługi Active Directory, otrzymuje domyślne wymagania tylko do odczytu wymagane do uwierzytelniania LDAP w PFMP. Np.

 

 

 

 

FYI: Nie potrzebujemy, aby nasz użytkownik powiązania LDAP faktycznie "w" grupach AD, które musimy odczytać w katalogu, potrzebujemy uprawnień karty Zabezpieczenia "Odczyt".

 

obraz

Ogólne wymagania dostawcy LDAP PFMP

 

Adres: ldaps://ad.ldap.domain:3269 (SSL) LUB ldap://ad.ldap.domain:3268 (ZWYKŁY)

Nazwa wyróżniająca powiązania: ADNTDOMAIN\serviceaccount lub Nazwa wyróżniająca powiąż nazwę wyróżniającą.

Bind DN Password: hasło konta usługi

Timeout 30000

Username LDAP attribute: sAMAccountName

Atrybut identyfikatora: objectGUID

Object Class: Person

Ścieżka wyszukiwania: (Najwyższy poziom, który może wysyłać zapytania do wszystkich grup, np. tylko składników/kontrolerów domeny: DC=powerflex,DC=lab,DC=dell,DC=com)

Group Member Attribute: member

Group ID Attribute: cn

Group Object Class: group

Ścieżka wyszukiwania w grupie:( taka sama jak ścieżka wyszukiwania użytkownika lub bardziej szczegółowa w razie potrzeby.  Ponieważ będziemy używać wąskiego filtra, nasz zakres może być szeroki bez wpływu na wydajność).

 

#The poniższy wpis udostępnia co najmniej jedną grupę filtrowi LDAP Group (PFMP 4.6.x+), dzięki czemu Keycloak nie wyszukuje wszystkich grup w całym katalogu:

Group LDAP Filter: (CN=GROUP1)

#Given ograniczenie 64 znaków w tym polu tylko dla interfejsu użytkownika PFMP, musimy użyć keycloaka, aby obejść ten problem, jeśli chcemy dodać więcej, np. 3 różne grupy:
 

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

Przetestuj połączenie i, jeśli się powiedzie, kliknij przycisk Prześlij.

Np.

 

 

2. Usuwanie i czyszczenie dostawcy LDAP

 

Usuń użytkowników, grupy i dostawców katalogów LDAP z interfejsu użytkownika PFMP jako administratora.  Nie próbuj tego robić jako użytkownik LDAP, tylko jako administrator.

 

OSTRZEŻENIE: Należy zapisać bieżącą konfigurację mapowania "Directory Provider" i "Remote Users/Groups" z programu PFMP (w szczególności, jeśli konieczne jest przywrócenie poprzedniego mapowania ról).

Jeśli mapowanie grup/ról nie jest wyświetlane w planie PFMP (znany problem), postępuj zgodnie z poniższymi instrukcjami:

# 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

 

 

Jeśli w bazie danych maski kluczy pozostaną jakiekolwiek nieaktualne grupy LDAP, można je usunąć ręcznie, wykonując następujące czynności:

 

Polecenia tworzenia kopii zapasowej bazy danych Keycloak i czyszczenia tabeli bazy danych keycloak_group.

 

Uwaga: Czasami ręczne czyszczenie Keycloak nie jest potrzebne. 

Powinniśmy użyć interfejsu użytkownika PFMP, aby usunąć dostawcę (zawsze najpierw z PFMP), a następnie potwierdzić, że został on wyczyszczony z Keycloak za pomocą /auth/ URL.

 

 

Jak sprawdzić liczbę grup LDAP w Keycloak z dowolnego MVM:

 

# Uruchom to, aby najpierw ustawić zmienną.

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;"

 

Dzieje się tak tylko po uprzednim usunięciu w interfejsie użytkownika PFMP i tylko wtedy, gdy dane dostawcy pozostają w zapleczu.  Jeśli korzystasz z oprogramowania PFxM 4.6.0.1, możesz również wykonać następującą metodę, aby usunąć zaimportowanych użytkowników w interfejsie Keycloak:

  1. Zaloguj się za pomocą /auth/ jako użytkownik Keycloak
  2. Hasło KeyCloak jest unikatowe dla każdej instalacji i można je znaleźć w dowolnym MVM przy użyciu:

 

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

 

3. Federacja użytkowników —> LDAP —> ustawienia, a następnie w prawym górnym rogu listy rozwijanej Actions wybierz opcję Remove Imported.

 

 

 

 

 

 

Po wyczyszczeniu i usunięciu grup i dostawców katalogów uruchom ponownie trzy węzły MVM. 

 

 -Nuta: Jest to wymagane tylko wtedy, gdy środowisko jest duże, a zapytania LDAP kumulują się wielokrotnie, co widać w tym przypadku w poniższych dziennikach.

 - Jeśli środowisko nie jest przeciążone problemami z synchronizacją, a interfejs użytkownika jest stabilny, ponowne uruchomienie MVM można ogólnie pominąć. Ogólnie rzecz biorąc, jest to jednak dobry środek.

 

Uruchom ponownie KB https://www.dell.com/support/kbdoc/en-us/000225550 

Bezpieczne ponowne uruchomienie MVM (należy uruchamiać jeden węzeł naraz) Nie przechodź do następnego węzła, dopóki nie sprawdzisz, czy baza danych zgłasza stan gotowości synchronizacji.

 

#As najlepszym rozwiązaniem jest zidentyfikowanie węzła, który jest bieżącym liderem Postgres, i ponowne uruchomienie go na końcu.

#Run następujące polecenie na dowolnym MVM, aby wyświetlić skojarzony stan bazy danych i nazwy baz danych.

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 tego polecenia, aby określić, który węzeł MVM hostuje zasobnik bazy danych 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, który jest wystąpieniem zasobnika lidera Postgres.   Uruchom polecenie "watch kubectl get nodes", aby monitorować stan ponownych uruchomień. Ten MVM musi być ostatnim węzłem, który zostanie ponownie uruchomiony.

#Przykładowa kolejność ponownego uruchamiania, jeśli pfmp-mgmt-1 jest liderem Postgres. Dostosuj kolejność poniższych poleceń w zależności od tego, który MVM jest liderem Postgres.

 

Otwórz terminal podłączony do trzeciego MVM i uruchom pierwsze dwa polecenia.

 

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

#When węzeł wychodzi z ponownego uruchomienia. Uruchom następujące polecenie.

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

#Run następujące polecenie, dopóki baza danych powiązana z MVM3 nie zgłosi stanu gotowości synchronizacji. W tym momencie możesz przejść do następnego 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'

 

Otwórz terminal podłączony do drugiego MVM i uruchom pierwsze dwa polecenia.

 

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

#When węzeł wychodzi z ponownego uruchomienia.  Uruchom następujące polecenie.

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

#Run następujące polecenie, dopóki baza danych powiązana z MVM2 nie zgłosi stanu gotowości synchronizacji. W tym momencie możesz przejść do następnego 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 następujące polecenie, aby użyć tego MVM jako MVM monitorowania stanu węzła.

'watch kubectl get nodes'

 

Przejdź do terminala podłączonego do pierwszego MVM, który uruchamia polecenie "watch kubectl get nodes".  Naciśnij ctrl+c, aby wrócić do terminala i uruchomić dwa pierwsze polecenia.

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

#When węzeł wychodzi z ponownego uruchomienia.  Uruchom następujące polecenie.

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

#Run następujące polecenie, dopóki baza danych skojarzona z MVM1 nie zgłosi stanu gotowości synchronizacji.  Ten MVM był liderem, ale nowy lider przejął stery, gdy MVM1 został opróżniony.  

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'

ZAKOŃCZENIE PROCEDURY BEZPIECZNEGO PONOWNEGO URUCHAMIANIA MVM

Po ponownym uruchomieniu i przywróceniu interfejsu użytkownika dla PFMP zaloguj się jako administrator i dodaj ustawienia -> Dostawca katalogów , wykonując poniższe czynności:

3. Odbudowa dostawcy LDAP

 

Jak wspomniano w sekcji Przygotowanie, jeśli w grupach, które mają być używane w planie PFMP, znajdują się podrzędne domeny usługi AD lub konta zaufania domeny usługi AD, należy użyć portów LDAP wykazu globalnego (GC) 3268 (zwykły) i 3269 (SSL).

 

Np.

 

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. Wąska aplikacja zakresu użytkowników i grup LDAP

 

 

 

Zaloguj się za pomocą /auth/ jako użytkownik Keycloak


Filtr użytkownika:

 

 

 

# Brak filtra LDAP użytkownika w interfejsie użytkownika PFMP, więc musimy użyć następującego elementu, aby to zmienić.

Filtr #This musi zostać zastosowany w obszarze PowerFlex KeyCloak (PowerFlex --> Federacja użytkowników --> Filtr LDAP użytkownika)

 

 

 

Filtr LDAP użytkownika:

 

 

(&(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)))

 

 

 

Zapisz zmianę.

 

 

 

Wyjaśnienie tego zawężonego filtra:

 

 

 

objectCategory równa się Person.

i

sAMAccountName istnieje

i

memberOf równa się CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com

Lub

memberOf równa się CN=FLEX-STOR-MON,OU=15G,OU=FLEXLAB,DC=powerflex,DC=lab,DC=dell,DC=com

Od <https://ldap-builder.powerflex.lab.dell.com/>

Federacja użytkowników —> LDAP —> Ustawienia, a następnie w prawym górnym rogu listy rozwijanej Actions wybierz opcję remove imported.

 

4.6.x+ Metoda interfejsu użytkownika do usuwania mapowania grup.

 

W ustawieniach mapowania grup LDAP dla atrybutu "Membership User LDAP Attribute" musimy również upewnić się, że prawidłowa wartość, którą wysyłamy jako "cn" i nie możemy zmienić w interfejsie użytkownika PFMP, została zmieniona w interfejsie użytkownika keycloak na DN.

 

 

 

W filtrze LDAP grupy możemy podać operator albo-albo |   oraz CN każdej grupy, np.

(|(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.