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. ...
Instructions
- Voorbereiding
- LDAP-provider verwijderen en opschonen
- LDAP-provider opnieuw opbouwen
- 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:
- Wereldwijde catalogus
- De DN van de AD-groepen voor PFMP vinden
- Vereisten voor bindende gebruikers
- PFMP LDAP Algemene vereisten
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 3269LDAPSERVER='ldap://ldap.powerflex.lab.dell.com:3268'# Use the same search base as you intend for the group path, generally just the DC componentsSEARCHBASE=DC=powerflex,DC=lab,DC=dell,DC=com# Call curl which will request the password of the bind user and return resultscurl -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=comdistinguishedName: CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=comDN: CN=LabAdmins,CN=Users,DC=na,DC=powerflex,DC=lab,DC=dell,DC=comdistinguishedName: CN=LabAdmins,CN=Users,DC=na,DC=powerflex,DC=lab,DC=dell,DC=comDN: CN=LabUsers,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=comdistinguishedName: 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=commember: CN=matrixadmin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=commember: CN=matrixadmin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=commember: CN=svc_adfsck3,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=commember: CN=svc_mcp_rw,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=commember: CN=adcertsvc,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=commember: CN=bobthebuilder,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=commember: CN=Ashish Rahangdale,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=commember: CN=Packer Admin,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=commember: CN=FDLabAdmins,OU=Foundations,DC=powerflex,DC=lab,DC=dell,DC=commember: 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" \dn: CN=Administrator,CN=Users,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)))" sAMAccountNamesAMAccountName:Administratordn: 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.

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 | SuperUserLabAdmins | LifecycleAdminLabUsers | 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 | valueEMEALabAdmins | remote_type | LdapEMEALabAdmins | SuperUser | GLB:GLBEMEALabAdmins | is_remote | trueLabAdmins | remote_type | LdapLabAdmins | LifecycleAdmin | GLB:GLBLabAdmins | is_remote | trueLabUsers | remote_type | LdapLabUsers | Monitor | GLB:GLBLabUsers | 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:
- Log in met /auth/ als keycloak-gebruiker
- 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:3269Users DN: DC=powerflex,DC=lab,DC=dell,DC=com Bind DN:DOMAIN\svc_ldapbindaccountUsername 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))