PowerFlex 4.x LDAP-configuratie voor grote omgevingen

Summary: Door zowel de LDAP-zoekfilters voor gebruikers als groepen te verfijnen met behulp van de PowerFlex Management Platform SSO-backend, kunnen we synchronisatieproblemen beperken die meerdere UI- en platformproblemen veroorzaken. ...

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. Voorbereiding
  2. LDAP-provider verwijderen en opschonen
  3. LDAP-provider opnieuw opbouwen
  4. Toepassing voor beperkt LDAP-gebruikers- en groepsbereik

 

 

Achtergrond: 

 

Standaard importeren PowerFlex Management Platform (PFMP)-directoryproviders alle LDAP-objecten binnen het geconfigureerde zoekbereik, inclusief niet-gebruikersaccounts en andere objecten die niet vereist zijn door onze RBAC.

In grote omgevingen kan dit gedrag leiden tot een aanzienlijk resourcegebruik in PFMP-beheer-VM's (MVM's), de ondersteunende Postgres-database en het algehele platform.

Daarom kan LDAP-synchronisatie mogelijk niet binnen acceptabele tijdsbestekken worden voltooid, wat leidt tot taakachterstanden, geheugenlekken en gelijktijdigheidsproblemen.

 

1. Voorbereiding

 

Eisen:

 

 

De algemene catalogus van Active Directory gebruiken

Opmerking:  We vereisen het gebruik van poort 3268 voor standaard LDAP of 3269 voor LDAPS in AD-omgevingen. Hierdoor kunnen LDAP-groepsleden uit onderliggende domeinen of andere vertrouwde domeinen worden gebruikt in PFMP.

Een AD-groep, bijvoorbeeld:

 

Het onderliggende domein boven na.powerflex.lab.dell.com moet zichtbaar zijn voor de LDAP User Federation Keycloak van PFMP. Met de globale cataloguspoorten kunnen ze worden bereikt. 

Dit is ook de reden waarom we objectGUID gebruiken in de PFMP Directory Provider, het koppelt accounts aan hun wereldwijde unieke UUID.

 

Als beide onderliggende domeinen worden vermeld onder het tabblad Vertrouwensrelaties, lijkt het erop dat subdomeinen elkaar standaard vertrouwen.

In een Microsoft Active Directory (AD)-omgeving vertrouwen een bovenliggend domein en de onderliggende (sub)domeinen elkaar inherent in een hiërarchische structuur. Dit staat bekend als een transitief vertrouwen.

Standaard zijn deze vertrouwensrelaties tweerichtingsverkeer en transitief, wat betekent dat een bovenliggend domein de onderliggende domeinen vertrouwt en vice versa. Deze transitieve aard breidt het vertrouwen uit naar alle domeinen binnen de bovenliggende en onderliggende hiërarchie.

 

Beschikbare LDAP- of AD GC-servers vinden op basis van DNS-vermeldingen

 

Meestal geeft de klant een LDAP-adres op om te gebruiken.  Deze instellingen kunnen worden gekopieerd van de configuratie van de PFMP-directoryprovider voordat u ze verwijdert als onderdeel van de volgende stappen in deze handleiding.

Als alternatief kunnen beschikbare servers worden opgehaald uit DNS voor een specifiek domein:

 

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

 

 

Hoe vind je de onderscheidende naam van een organisatieorganisatie of groep?

Ten eerste hebben we de Distinguished Names (DN) nodig van de organisatie-eenheden en groepen waar we gebruikers in PFMP willen lezen.  Deze paden volgen niet strikt de DNS-naamgeving en bevatten organisatie-eenheden binnen een x.500 LDAP-pad dat we handmatig kunnen extraheren.

We kunnen deze DN's vinden met behulp van verschillende hulpprogramma's, afhankelijk van het besturingssysteem, een gemakkelijke manier is het gebruik van curl:

PFMP LDAP-instellingen testen met curl op Linux.

 

De nieuwere versies van curl die op MVM's zijn geïnstalleerd, kunnen worden gebruikt om de volledige namen te vinden die u nodig hebt, bijvoorbeeld door te zoeken naar de volledige DN van de LabAdmins-groep 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

Zoek alle leden van een LDAP-groep met behulp van filtereigenschappen die u vervolgens in de keycloak-backend kunt plaatsen:

#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-instellingen testen met behulp van ldapsearch of curl utility op Linux.

 

Als er een Linux-host beschikbaar is op het netwerk, kan het gebruik van het hulpprogramma ldapsearch nuttig zijn om de LDAP-instellingen in PFMP/Keycloak te testen en te valideren.

Als alternatief kan curl utility ook worden gebruikt voor LDAP-query's van een van de Management VM's/MVM's.

 

Korte introductie (veelgebruikte opties):

 

 

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

 

 

 

Gereedschap controleren/installeren:

$ which ldapsearch
/usr/bin/ldapsearch

#RHEL/CentOS install
sudo yum install openldap-clients

# SLES install
sudo zypper install openldap2-client

 

 

Basis-DN (-b) definiëren vanuit LDAP-basisinvoer:

 

$ 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

 

 

De hoofdvermelding bevat informatie over de directoryserver. Bij AD geeft het kenmerk rootDomainNamingContext de bovenste basis-DN die kan worden gebruikt voor zoekopdrachten.

 -W -b "

 

LDAP-URI,Bind DN (gebruiker/wachtwoord met leestoegang) en zoekinstellingen voor gebruikers testen:

 

$ 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 dit voorbeeld vragen we LDAP op voor een bestaand gebruikersaccount met behulp van het kenmerk sAMAccountName (de uitvoer is afgekapt om alleen de kenmerken weer te geven die we nodig hebben).

 

Bijbehorende instellingen in de PFMP-gebruikersinterface:

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

Bind DN (-D): "CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com" # ("FLEXLAB\ck3-user" of "ck3-user@powerflex.lab.dell.com" zijn equivalenten)

(-x is vereist voor eenvoudige verificatie om de standaard SASL-modus te vermijden)

Bind DN Password (-W): vraag om wachtwoord (of gebruik –w '***' om het in opdracht te geven)

 

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

Username LDAP Attribute: sAMAccountName

ID-kenmerk: objectGUID

Objectklasse: persoon

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

 

 

Zoekinstellingen voor groepen testen:

 

$ 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 testgroep:

 $ 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-filter van gebruiker testen:

$ 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

Start Active Directory-gebruikers en -computers. Klik op Weergeven en selecteer Geavanceerde functies.

De DN is de naam die een vermelding in de directory uniek identificeert. De eerste component van de DN wordt de Relative Distinguished Name (RDN) genoemd.

Een DN bestaat uit attribute=value paren, gescheiden door komma's, bijvoorbeeld:

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

Zie ze als 'FQDN's voor LDAP', de volledige 'URL' van het x500-adres.

AD-gebruikers en -computers kunnen worden gebruikt om DN's en andere kenmerken te bepalen:

 

 

Navigeer en klik met de rechtermuisknop op de organisatie-eenheid waar u gebruikers wilt lezen en selecteer vervolgens Eigenschappen.

Selecteer in de OE-eigenschappen het tabblad Attribuuteditor.

Klik op distinctedName om deze te markeren en klik vervolgens op Weergeven.

Klik met de rechtermuisknop op de gemarkeerde waarde en selecteer Kopiëren. 

Klik op Annuleren en vervolgens op OK om de vensters Kenmerkeditor en OU-eigenschappen te sluiten.

 

 

 

 

Voorbeeld van LDAP-gebruikersfilter met smal bereik:

 

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

 

 

Visuele uitleg:

 

Bind gebruikersvereisten.

 

Deze bindingsgebruiker moet ten minste toestemming hebben om query's uit te voeren op gebruikers en groepen die zijn gedefinieerd in de LDAP-server om toe te staan dat het opslagsysteem deze gebruikers kan verifiëren.

 

Wanneer een gebruiker wordt toegevoegd aan het tabblad Beveiliging van het topleveldomein in Active Directory Gebruikers en computers, krijgt deze standaard de standaardvereisten voor alleen-lezen die nodig zijn voor LDAP-verificatie in PFMP. bijvoorbeeld.

 

 

 

 

FYI: We hebben onze LDAP-bindingsgebruiker niet nodig die daadwerkelijk 'in' de AD-groepen zit die we in de directory moeten lezen, we hebben de machtigingen van het tabblad Beveiliging van "Lezen" nodig.

 

image

Algemene vereisten voor PFMP LDAP-provider

 

Adres: ldaps://ad.ldap.domain:3269 (SSL) OF ldap://ad.ldap.domain:3268 (GEWOON)

Bind DN: ADNTDOMAIN\serviceaccount of DN Distinguished name name.

DN-wachtwoord binden: wachtwoord voor serviceaccount

Timeout 30000

Username LDAP attribute: sAMAccountName

ID-kenmerk: objectGUID

Object Class: Person

Zoekpad: (Hoogste niveau dat query's kan uitvoeren op alle groepen, bijvoorbeeld alleen de domeincomponenten/DC's: DC=powerflex,DC=lab,DC=dell,DC=com)

Group Member Attribute: member

Group ID Attribute: cn

Group Object Class: group

Groepszoekpad:(Zelfde als het zoekpad van de gebruiker of gedetailleerder indien nodig.  Aangezien we een smal filter zullen gebruiken, kan ons bereik breed zijn zonder dat dit invloed heeft op de prestaties.)

 

#The volgende vermelding biedt ten minste één groep aan het LDAP-groepsfilter (PFMP 4.6.x+), zodat keycloak niet naar alle groepen in de hele map zoekt:

Group LDAP Filter: (CN=GROUP1)

#Given de beperking van 64 tekens in dit veld alleen voor PFMP UI, moeten we de keycloak gebruiken om er omheen te werken als we meer dan dat willen toevoegen, bijvoorbeeld 3 verschillende groepen:
 

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

Test de verbinding en klik op Verzenden als dit is gelukt.

Bijvoorbeeld.

 

 

2. LDAP-provider verwijderen en opschonen

 

Verwijder de LDAP-gebruikers, groepen en vervolgens de Directory Provider uit de PFMP-gebruikersinterface als de beheerder.  Probeer dit niet als LDAP-gebruiker te doen, alleen als beheerder.

 

WAARSCHUWING: Zorg ervoor dat u de huidige configuratie voor de toewijzing van "Directory Provider" en "Remote Users/Groups" vanuit PFMP vastlegt (met name als u de vorige roltoewijzing moet herstellen).

Als de toewijzing van groepen/rollen niet wordt weergegeven op PFMP (bekend probleem), volgt u de volgende instructies:

# 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

 

 

Als er verouderde LDAP-groepen in de keycloak-database achterblijven, kunnen deze handmatig worden verwijderd via het volgende proces:

 

Keycloak-databaseback-up en keycloak_group opdrachten voor het opschonen van databasetabellen.

 

Opmerking: Het handmatig opschonen van de sleutelmantel is soms niet nodig. 

We moeten de gebruikersinterface van PFMP gebruiken om de provider te verwijderen (altijd eerst van PFMP) en vervolgens bevestigen dat deze is gewist uit keycloak met behulp van de URL /auth".

 

 

Het aantal LDAP-groepen controleren in keycloak van een MVM:

 

# Voer dit uit om eerst de variabele in te stellen.

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

 

Dit is alleen na de eerste verwijdering in de PFMP-gebruikersinterface en alleen als de providergegevens in de backend blijven.  Als u PFxM 4.6.0.1 gebruikt, kunt u ook de volgende methode uitvoeren om geïmporteerde gebruikers in de Keycloak-gebruikersinterface te verwijderen:

  1. Log in met /auth/ als keycloak-gebruiker
  2. Het Keycloak-wachtwoord is uniek voor elke installatie en kan worden gevonden op elke MVM met behulp van:

 

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

 

3. Gebruikersfederatie -> LDAP -> Instellingen en selecteer in de vervolgkeuzelijst Acties rechtsboven Importeren verwijderen.

 

 

 

 

 

 

Nu de groepen en directoryproviders zijn opgeschoond en verwijderd, start u de drie MVM-knooppunten opnieuw op. 

 

 -Notitie: Dit is alleen nodig wanneer de omgeving groot is en LDAP-query's zich herhaaldelijk opstapelen, zoals in dit geval in de onderstaande logboeken.

 - Als de omgeving niet overbelast is met synchronisatieproblemen en de gebruikersinterface stabiel is, kunnen de MVM-herstarts over het algemeen worden overgeslagen. Het is echter over het algemeen een goede maatregel.

 

KB-https://www.dell.com/support/kbdoc/en-us/000225550 opnieuw opstarten  

MVM correct opnieuw opstarten (moet één knooppunt tegelijk worden uitgevoerd) Ga pas naar het volgende knooppunt nadat u hebt gecontroleerd of de database Stand-by synchroniseert.

 

#As een best practice het knooppunt identificeren dat de huidige Postgres-leader is en start deze als laatste opnieuw op.

#Run de volgende opdracht uit op een MVM om de databasestatus en databasenamen gekoppeld weer te geven.

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 deze opdracht om te bepalen welk MVM-knooppunt als host fungeert voor de postgres-databasepod.

 

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 de MVM die het Postgres Leader-pod-exemplaar is.   Voer 'watch kubectl get nodes' uit om de status van uw reboots te controleren. Deze MVM moet het laatste knooppunt zijn dat opnieuw wordt opgestart.

#Voorbeeld van herstartvolgorde als pfmp-mgmt-1 de Postgres-leader is. Pas de volgorde van de onderstaande opdrachten aan, afhankelijk van welke MVM de Postgres-leider is.

 

Open een terminal die is aangesloten op de derde MVM en voer de eerste twee opdrachten uit.

 

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

#When wordt het knooppunt geactiveerd bij opnieuw opstarten. Voer de volgende opdracht uit.

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

#Run de volgende opdracht uit totdat de database die is gekoppeld aan MVM3 Stand-by synchroniseert. Op dat moment kun je naar de volgende MVM gaan.

 

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'

 

Open een terminal die is aangesloten op de tweede MVM en voer de eerste twee opdrachten uit.

 

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

#When wordt het knooppunt geactiveerd bij opnieuw opstarten.  Voer de volgende opdracht uit.

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

#Run de volgende opdracht uit totdat de database die is gekoppeld aan MVM2 Sync Standby meldt. Op dat moment kun je naar de volgende MVM gaan.

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 de volgende opdracht uit om deze MVM te gebruiken als de MVM voor bewaking van knooppuntstatus.

'watch kubectl get nodes'

 

Ga naar de terminal die is verbonden met de eerste MVM die 'watch kubectl get nodes' uitvoert.  Druk op ctrl+c om terug te gaan naar de terminal en voer de eerste twee opdrachten uit.

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

#When wordt het knooppunt geactiveerd bij opnieuw opstarten.  Voer de volgende opdracht uit.

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

#Run de volgende opdracht uit totdat de database die is gekoppeld aan MVM1 Sync Standby meldt.  Deze MVM was de leider, maar een nieuwe leider zou het overnemen als MVM1 leeg was.  

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'

EINDE VAN DE MVM-PROCEDURE VOOR PROBLEEMLOOS OPNIEUW OPSTARTEN

Nadat het systeem opnieuw is opgestart en de gebruikersinterface is hersteld voor PFMP, meldt u zich aan als admin en voegt u Settings -> Directory Provider toe met behulp van de onderstaande stappen:

3. LDAP-provider opnieuw opbouwen

 

Zoals vermeld in het gedeelte Voorbereiding, als er onderliggende AD-domeinen of AD-domeinvertrouwensaccounts zijn in groepen die u wilt gebruiken in PFMP, moeten de LDAP-poorten 3268 (gewoon) en 3269 (SSL) uit de globale catalogus (GC) worden gebruikt.

 

Bijvoorbeeld.

 

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. Toepassing voor beperkt LDAP-gebruikers- en groepsbereik

 

 

 

Log in met /auth/ als keycloak-gebruiker


Gebruikersfilter:

 

 

 

# LDAP-filter voor gebruikers ontbreekt in de PFMP-gebruikersinterface, dus we moeten het volgende gebruiken om dat te wijzigen.

#This filter moet worden toegepast in de Keycloak PowerFlex-realm (PowerFlex --> Gebruikersfederatie --> LDAP-filter voor gebruikers)

 

 

 

LDAP-filter voor gebruiker:

 

 

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

 

 

 

Sla het wisselgeld op.

 

 

 

Uitleg van dit vernauwde filter:

 

 

 

objectCategory is gelijk aan Persoon.

En

sAMAccountName bestaat

En

memberOf is gelijk aan CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com

Of

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

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

Gebruikersfederatie -> LDAP -> Instellingen en selecteer in de vervolgkeuzelijst Acties rechtsboven verwijderen geïmporteerd.

 

4.6.x+ UI Methode om groepstoewijzing te verwijderen.

 

In de instelling LDAP-groepstoewijzing voor 'LDAP-attribuut lidmaatschapsgebruiker' moeten we er ook voor zorgen dat de juiste waarde die we leveren als 'cn' en die niet kan worden gewijzigd in de gebruikersinterface van PFMP, wordt gewijzigd in de keycloak-gebruikersinterface naar DN.

 

 

 

In het LDAP-filter van de groep kunnen we een of/of-operator |   en de GN's van elke groep, bv.

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