PowerFlex 4.x – LDAP-Konfiguration für große Umgebungen

Summary: Durch das Eingrenzen der LDAP-Suchfilter für Nutzer und Gruppen mithilfe des SSO-Back-ends der PowerFlex Management Platform können wir Synchronisierungsprobleme reduzieren, die mehrere UI- und Plattformprobleme verursachen. ...

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. Vorbereitung
  2. Entfernen und Bereinigen von LDAP-Anbietern
  3. Neuerstellung des LDAP-Anbieters
  4. Anwendung für engen LDAP-Nutzer- und -Gruppenbereich

 

 

Hintergrund: 

 

Standardmäßig importieren PFMP-Verzeichnisanbieter (PowerFlex Management Platform) alle LDAP-Objekte innerhalb des konfigurierten Suchbereichs, einschließlich Nicht-Nutzerkonten und anderer Objekte, die für unsere RBAC nicht erforderlich sind.

In großen Umgebungen kann dieses Verhalten zu einer erheblichen Ressourcenauslastung über PFMP-Management-VMs (MVMs), die unterstützende Postgres-Datenbank und die gesamte Plattform führen.

Aus diesem Grund kann die LDAP-Synchronisation möglicherweise nicht innerhalb eines akzeptablen Zeitrahmens abgeschlossen werden, was zu Auftragsrückständen, Speicherlecks und Gleichzeitigkeitsproblemen führt.

 

1. Vorbereitung

 

Anforderungen:

 

 

Verwenden des globalen Active Directory-Katalogs

Hinweis:  In AD-Umgebungen muss Port 3268 für Standard-LDAP oder Port 3269 für LDAPS verwendet werden. Auf diese Weise können LDAP-Gruppenmitglieder aus untergeordneten Domains oder anderen vertrauenswürdigen Domains in PFMP verwendet werden.

Eine AD-Gruppe, z. B.:

 

Die untergeordnete Domain über na.powerflex.lab.dell.com muss für den LDAP-Nutzerverbund-Keycloak von PFMP sichtbar sein, da sie über die globalen Katalogports erreichbar sind. 

Aus diesem Grund verwenden wir auch objectGUID im PFMP-Verzeichnisanbieter. Es verknüpft Konten mit ihrer globalen eindeutigen UUID.

 

Wenn beide untergeordneten Domänen auf der Registerkarte Vertrauensstellungen aufgeführt sind, scheinen sich die Unterdomänen standardmäßig gegenseitig zu vertrauen.

In einer Microsoft Active Directory (AD)-Umgebung vertrauen eine übergeordnete Domäne und ihre untergeordneten (untergeordneten) Domänen einander grundsätzlich in einer hierarchischen Struktur. Dies wird als transitive Vertrauensstellung bezeichnet.

Standardmäßig sind diese Vertrauensstellungen bidirektional und transitiv, d. h., eine übergeordnete Domäne vertraut ihren untergeordneten Domänen und umgekehrt. Diese transitive Natur erweitert die Vertrauensstellung auf alle Domänen innerhalb der Hierarchie zwischen über- und untergeordneten Elementen.

 

Suchen nach verfügbaren LDAP- oder AD GC-Servern anhand von DNS-Einträgen

 

In der Regel stellt der Kunde die zu verwendende LDAP-Adresse bereit.  Diese Einstellungen können aus der Konfiguration des PFMP-Verzeichnisanbieters kopiert werden, bevor Sie sie im Rahmen der nächsten Schritte dieses Handbuchs entfernen.

Alternativ können verfügbare Server für eine bestimmte Domain vom DNS abgerufen werden:

 

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

 

 

So finden Sie den distinguishedName einer Organisationseinheit oder Gruppe.

Zunächst benötigen wir die Distinguished Names (DN) der Organisationseinheiten und Gruppen, in denen wir Nutzer in PFMP einlesen möchten.  Diese Pfade folgen nicht strikt der DNS-Benennung und enthalten OUs innerhalb eines x.500-LDAP-Pfads, den wir manuell extrahieren können.

Wir können diese DNs finden, indem wir je nach Betriebssystem unterschiedliche Dienstprogramme verwenden. Eine einfache Möglichkeit ist die Verwendung von curl:

So testen Sie PFMP-LDAP-Einstellungen mit dem Dienstprogramm curl unter Linux.

 

Die neueren Versionen von curl, die auf MVMs installiert sind, können verwendet werden, um die vollständigen Distinguished Names zu finden, die Sie benötigen, z. B. sucht diese nach dem vollständigen DN des LabAdmins-Gruppen-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

Suchen Sie alle Mitglieder einer LDAP-Gruppe mithilfe von Filtereigenschaften, die Sie dann in das Keycloak-Back-end einfügen können:

#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

 

 

So testen Sie PFMP-LDAP-Einstellungen mit dem Dienstprogramm ldapsearch oder curl unter Linux.

 

Wenn ein Linux-Host im Netzwerk verfügbar ist, kann das ldapsearch-Dienstprogramm nützlich sein, um die in PFMP/Keycloak verwendeten LDAP-Einstellungen zu testen und zu validieren.

Alternativ kann das curl-Dienstprogramm auch für LDAP-Abfragen von einer der Management-VMs/MVMs verwendet werden.

 

Kurze Einführung (häufig verwendete Optionen):

 

 

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

 

 

 

Überprüfen/Installieren des Tools:

$ which ldapsearch
/usr/bin/ldapsearch

#RHEL/CentOS install
sudo yum install openldap-clients

# SLES install
sudo zypper install openldap2-client

 

 

Definieren des Basis-DN (-b) aus dem LDAP-Stammeintrag:

 

$ 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

 

 

Der Root-Eintrag enthält Informationen zum Verzeichnisserver. In AD gibt das Attribut rootDomainNamingContext den obersten Basis-DN an, der für die Suche verwendet werden kann.

 -W -b "

 

Testen von LDAP-URI,Bindungs-DN (Nutzer/Kennwort mit Lesezugriff) und Nutzersucheinstellungen:

 

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

In diesem Beispiel fragen wir LDAP nach einem vorhandenen Nutzerkonto mit dem Attribut sAMAccountName ab (die Ausgabe wurde gekürzt, um nur die Attribute anzuzeigen, die wir benötigen).

 

Entsprechende Einstellungen in der PFMP-Benutzeroberfläche:

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

Bindungs-DN (-D): "CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com" # ("FLEXLAB\ck3-user" oder "ck3-user@powerflex.lab.dell.com" sind Entsprechungen)

(-x ist für die einfache Authentifizierung erforderlich, um den Standard-SASL-Modus zu vermeiden)

Bindungs-DN-Kennwort (-W): Aufforderung zur Eingabe des Kennworts (oder verwenden Sie -w '***' , um es im Befehl einzugeben)

 

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

Username LDAP Attribute: sAMAccountName

ID-Attribut: objectGUID

Objektklasse: Person

Suchpfad (-b): "dc=powerflex,dc=lab,dc=dell,dc=com"

 

 

Testen der Einstellungen für die Gruppensuche:

 

$ 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-Filter der Testgruppe:

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

 

Testen des Nutzer-LDAP-Filters:

$ 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

Starten Sie Active Directory-Nutzer und -Computer. Klicken Sie auf View und wählen Sie Advanced Features aus.

Der DN ist der Name, der einen Eintrag im Verzeichnis eindeutig identifiziert. Die erste Komponente des DN wird als Relative Distinguished Name (RDN) bezeichnet.

Ein DN besteht aus Attribut=Wert-Paaren, die durch Kommas getrennt sind, z. B.:

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

Stellen Sie sie sich als "FQDNs für LDAP" vor, die vollständige URL der x500-Adresse.

AD-Nutzer und -Computer können verwendet werden, um DNs und andere Attribute zu bestimmen:

 

 

Navigieren Sie zu der Organisationseinheit, in der Sie Nutzer lesen möchten, klicken Sie mit der rechten Maustaste darauf, und wählen Sie dann Eigenschaften aus.

Wählen Sie in den OU-Eigenschaften die Registerkarte Attribut-Editor aus.

Klicken Sie auf distinguishedName, um ihn zu markieren, und klicken Sie dann auf Anzeigen.

Klicken Sie mit der rechten Maustaste auf den hervorgehobenen Wert und wählen Sie Copy aus. 

Klicken Sie auf Abbrechen und dann auf OK, um die Fenster Attribut-Editor und OU-Eigenschaften zu schließen.

 

 

 

 

Beispiel für einen LDAP-Nutzerfilter mit schmalem Bereich:

 

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

 

 

Visuelle Erklärung:

 

Anforderungen für Bind-Nutzer.

 

Dieser Bindungsnutzer muss mindestens über die Berechtigung zum Abfragen von Nutzern und Gruppen verfügen, die im LDAP-Server definiert sind, damit das Storage-System diese Nutzer authentifizieren kann.

 

Wenn ein Nutzer der Registerkarte "Sicherheit" der Domain der obersten Ebene in Active Directory-Nutzer und -Computer hinzugefügt wird, erhält er standardmäßig die standardmäßigen schreibgeschützten Anforderungen, die für die LDAP-Authentifizierung in PFMP erforderlich sind. zum Beispiel.

 

 

 

 

FYI: Unser LDAP-Bindungsnutzer muss sich nicht in den AD-Gruppen befinden, die wir im Verzeichnis lesen müssen. Wir benötigen die Berechtigungen "Lesen" auf der Registerkarte "Sicherheit".

 

Bild

Allgemeine Anforderungen für PFMP-LDAP-Anbieter

 

Adresse: ldaps://ad.ldap.domain:3269 (SSL) ODER ldap://ad.ldap.domain:3268 (PLAIN)

Bindungs-DN: ADNTDOMAIN\serviceaccount oder Bindungs-DN Eindeutiger Name.

Bindungs-DN-Kennwort: Servicekontokennwort

Timeout 30000

Username LDAP attribute: sAMAccountName

ID-Attribut: objectGUID

Object Class: Person

Suchpfad: (Höchste Ebene, die alle Gruppen abfragen kann, z.B. nur die Domänenkomponenten/DCs: DC = PowerFlex, DC = Lab, DC = Dell , DC = com

Group Member Attribute: member

Group ID Attribute: cn

Group Object Class: group

Gruppensuchpfad:(Identisch mit dem Nutzersuchpfad oder bei Bedarf detaillierter.  Da wir einen schmalen Filter verwenden, kann unser Bereich breit sein, ohne die Leistung zu beeinträchtigen.)

 

#The folgende Eintrag stellt mindestens eine Gruppe für den LDAP-Gruppenfilter (PFMP 4.6.x+) bereit, sodass Keycloak nicht nach allen Gruppen im gesamten Verzeichnis sucht:

Group LDAP Filter: (CN=GROUP1)

#Given der 64-Zeichen-Beschränkung in diesem Feld nur für die PFMP-Benutzeroberfläche müssen wir den Keycloak verwenden, um sie zu umgehen, wenn wir mehr als das hinzufügen möchten, z. B. 3 verschiedene Gruppen:
 

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

Testverbindung und wenn erfolgreich, klicken Sie auf Senden.

Zum Beispiel.

 

 

2. Entfernen und Bereinigen von LDAP-Anbietern

 

Entfernen Sie die LDAP-Nutzer, -Gruppen und dann den Verzeichnisanbieter als Admin-Nutzer aus der PFMP-Benutzeroberfläche.  Versuchen Sie dies nicht als LDAP-Nutzer, sondern nur als Administrator.

 

Warnung: Notieren Sie sich die aktuelle Konfiguration für die Zuordnung von "Verzeichnisanbieter" und "Remotenutzer/-gruppen" aus PFMP (insbesondere, wenn Sie die vorherige Rollenzuordnung wiederherstellen müssen).

Wenn die Gruppen-/Rollenzuordnung in PFMP nicht angezeigt wird (bekanntes Problem), befolgen Sie die folgenden Anweisungen:

# 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

 

 

Wenn veraltete LDAP-Gruppen in der Keycloak-Datenbank verbleiben, können sie mithilfe des folgenden Prozesses manuell gelöscht werden:

 

Befehle zur Bereinigung von Keycloak-Datenbankbackups und keycloak_group Datenbanktabellenbereinigung.

 

Hinweis: Eine manuelle Bereinigung von Keycloak ist manchmal nicht erforderlich. 

Wir sollten die PFMP-Benutzeroberfläche verwenden, um den Anbieter zu entfernen (immer zuerst aus PFMP), und dann mit der /auth/-URL bestätigen, dass er aus dem Keycloak gelöscht wurde.

 

 

So überprüfen Sie die LDAP-Gruppenanzahl in Keycloak von einem beliebigen MVM:

 

# Führen Sie dies aus, um die Variable zuerst zu setzen.

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

 

Dies geschieht erst nach dem ersten Entfernen in der PFMP-Benutzeroberfläche und nur, wenn die Anbieterdaten im Back-End verbleiben.  Wenn Sie PFxM 4.6.0.1 verwenden, können Sie auch die folgende Methode anwenden, um importierte Nutzer in der Keycloak-Benutzeroberfläche zu entfernen:

  1. Melden Sie sich mit /auth/ als Keycloak-Nutzer an
  2. Das Keycloak-Kennwort ist für jede Installation eindeutig und kann auf jedem MVM gefunden werden:

 

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

 

3. User federation -> LDAP -> Settings und wählen Sie in der Drop-down-Liste "Actions" oben rechts die Option Remove Imported aus.

 

 

 

 

 

 

Nachdem die Gruppen und Verzeichnisanbieter bereinigt und entfernt wurden, starten Sie die drei MVM-Nodes neu. 

 

 -Anmerkung: Dies ist nur erforderlich, wenn die Umgebung groß ist und sich LDAP-Abfragen wiederholt stapeln, wie in diesem Fall in den folgenden Protokollen zu sehen.

 - Wenn die Umgebung nicht mit Synchronisierungsproblemen überlastet ist und die Benutzeroberfläche stabil ist, können die MVM-Neustarts in der Regel übersprungen werden. Im Allgemeinen ist es jedoch eine gute Maßnahme.

 

KB-https://www.dell.com/support/kbdoc/en-us/000225550 neu starten  

MVM Graceful Reboot (muss jeweils nur für einen Node ausgeführt werden) Wechseln Sie erst zum nächsten Node, wenn Sie überprüft haben, dass die Datenbank Sync Standby meldet.

 

#As Best Practice sollten Sie den Node identifizieren, der der aktuelle Postgres-Marktführer ist, und diesen zuletzt neu starten.

#Run den folgenden Befehl auf einem beliebigen MVM, um den Datenbankstatus und die zugehörigen Datenbanknamen aufzulisten.

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 diesen Befehl aus, um zu ermitteln, welcher MVM-Node den Postgres-Datenbank-Pod hostet.

 

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 das MVM, das die Postgres-Leader-Pod-Instanz ist.   Führen Sie "watch kubectl get nodes" aus, um den Status Ihrer Neustarts zu überwachen. Dieser MVM muss der letzte Node sein, der neu gestartet wird.

#Beispiel-Neustartreihenfolge, wenn pfmp-mgmt-1 der Postgres-Leader ist. Passen Sie die Reihenfolge der folgenden Befehle an, je nachdem, welcher MVM der Postgres-Leader ist.

 

Öffnen Sie ein Terminal, das mit dem dritten MVM verbunden ist, und führen Sie die ersten beiden Befehle aus.

 

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

#When der Node nach dem Neustart wieder hochgefahren wird. Führen Sie den folgenden Befehl aus.

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

#Run den folgenden Befehl aus, bis die mit MVM3 verknüpfte Datenbank den Sync-Stand-by-Modus meldet. An diesem Punkt können Sie zum nächsten MVM wechseln.

 

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'

 

Öffnen Sie ein Terminal, das mit dem zweiten MVM verbunden ist, und führen Sie die ersten beiden Befehle aus.

 

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

#When der Node nach dem Neustart wieder hochgefahren wird.  Führen Sie den folgenden Befehl aus.

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

#Run den folgenden Befehl aus, bis die mit MVM2 verknüpfte Datenbank den Sync-Stand-by-Modus meldet. An diesem Punkt können Sie zum nächsten MVM wechseln.

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 Sie den folgenden Befehl, um diesen MVM als Node-Status-Monitoring-MVM zu verwenden.

'watch kubectl get nodes'

 

Navigieren Sie zu dem Terminal, das mit dem ersten MVM verbunden ist, auf dem "watch kubectl get nodes" ausgeführt wird.  Drücken Sie Strg+C, um zum Terminal zurückzukehren und die ersten beiden Befehle auszuführen.

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

#When der Node nach dem Neustart wieder hochgefahren wird.  Führen Sie den folgenden Befehl aus.

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

#Run den folgenden Befehl, bis die mit MVM1 verknüpfte Datenbank Sync Standby meldet.  Dieser MVM war der Leader, aber ein neuer Leader würde übernehmen, sobald MVM1 entladen wurde.  

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'

ENDE DES MVM-VERFAHRENS FÜR EINEN ORDNUNGSGEMÄSSEN NEUSTART

Melden Sie sich nach dem Neustart und der Wiederherstellung der Benutzeroberfläche für PFMP als Administrator an und fügen Sie Einstellungen –> Verzeichnisanbieter mithilfe der folgenden Schritte hinzu:

3. Neuerstellung des LDAP-Anbieters

 

Wie im Abschnitt Vorbereitung erwähnt, sollten die LDAP-Ports 3268 (plain) und 3269 (SSL) des globalen Katalogs (GC) verwendet werden, wenn untergeordnete AD-Domains oder AD-Domain-Vertrauenskonten in den Gruppen vorhanden sind, die Sie in PFMP verwenden möchten.

 

Zum Beispiel.

 

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. Anwendung für engen LDAP-Nutzer- und -Gruppenbereich

 

 

 

Melden Sie sich mit /auth/ als Keycloak-Nutzer an


Nutzerfilter:

 

 

 

# Der Nutzer-LDAP-Filter fehlt in der PFMP-Benutzeroberfläche, daher müssen wir Folgendes verwenden, um dies zu ändern.

#This Filter muss im Keycloak-PowerFlex-Bereich (PowerFlex –> User Federation –> User LDAP filter) angewendet werden.

 

 

 

Nutzer-LDAP-Filter:

 

 

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

 

 

 

Speichern Sie die Änderung.

 

 

 

Erläuterung dieses eingegrenzten Filters:

 

 

 

objectCategory entspricht Person.

und

sAMAccountName existiert

und

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

Oder

memberOf equals CN=FLEX-STOR-MON,OU=15G,OU=FLEXLAB,DC=powerflex,DC=lab,DC=dell,DC=com

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

User federation -> LDAP -> Settings und wählen Sie in der oberen rechten Drop-down-Liste Actions die Option remove import aus.

 

4.6.x+ UI-Methode zum Löschen einer Gruppenzuordnung.

 

In der Einstellung für die LDAP-Gruppenzuordnung für das LDAP-Attribut des Mitgliedschaftsnutzers müssen wir außerdem sicherstellen, dass ein korrekter Wert, den wir als "cn" liefern und in der PFMP-Benutzeroberfläche nicht ändern können, in der Keycloak-Benutzeroberfläche in DN geändert wird.

 

 

 

Im Gruppen-LDAP-Filter können wir einen Entweder-Oder-Operator |   und die KNs jeder Gruppe, z.

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