PowerFlex 4.x LDAP-konfiguration til store miljøer
Summary: Ved at indsnævre LDAP-søgefiltrene for både brugere og grupper ved hjælp af PowerFlex Management Platform SSO-backend kan vi afhjælpe synkroniseringsproblemer, som har forårsaget flere problemer med brugergrænsefladen og platformen. ...
Instructions
- Præparation
- Fjernelse og oprydning af LDAP-udbyder
- Genopbygning af LDAP-udbyder
- Smal LDAP-bruger- og gruppeomfangsapplikation
Baggrund:
Som standard importerer PowerFlex Management Platform (PFMP)-biblioteksudbydere alle LDAP-objekter inden for det konfigurerede søgeområde, herunder ikke-brugerkonti og andre objekter, der ikke kræves af vores RBAC.
I store miljøer kan denne funktionsmåde resultere i en betydelig ressourceudnyttelse på tværs af PFMP-administrations-VM'er (MVM'er), den understøttende Postgres-database og den overordnede platform.
Derfor kan LDAP-synkronisering muligvis ikke fuldføres inden for acceptable tidsrammer, hvilket forårsager jobefterslæb, hukommelseslækager og samtidighedsproblemer.
1. Præparation
Krav:
- Globalt katalog
- Sådan finder du DN for AD-grupperne for PFMP
- Bind-brugerkrav
- PFMP LDAP Generelle krav
Brug af Active Directory Global Catalog
Bemærk: Vi kræver brug af port 3268 til standard LDAP eller 3269 til LDAPS i AD-miljøer. Dette gør det muligt for LDAP-gruppemedlemmer fra underordnede domæner eller andre godkendte domæner at kunne bruges i PFMP.
En AD-gruppe for eksempel:

Det underordnede domæne over na.powerflex.lab.dell.com skal være synligt af PFMP's LDAP User Federation Keycloak, der gør det muligt at nå dem ved hjælp af de globale katalogporte.
Det er også derfor, vi bruger objectGUID i PFMP-katalogudbyderen, som knytter konti til deres globale unikke UUID.
Hvis begge underordnede domæner er angivet under fanen Trusts, ser det ud til, at underdomæner stoler på hinanden som standard.
I et Microsoft Active Directory-miljø (AD) har et overordnet domæne og dets underordnede (under)domæner i sagens natur tillid til hinanden i en hierarkisk struktur. Dette er kendt som en transitiv tillid.
Disse tillid er som standard tovejs og transitive, hvilket betyder, at et overordnet domæne har tillid til sine underordnede domæner og omvendt. Denne transitive karakter udvider tilliden til alle domæner inden for forældre-barn-hierarkiet.
Finde tilgængelige LDAP- eller AD GC-servere fra DNS-poster
Normalt angiver kunden LDAP-adresse, der skal bruges. Disse indstillinger kan kopieres fra konfigurationen af PFMP-biblioteksudbyderen, før de fjernes, som en del af de næste trin i denne vejledning.
Alternativt kan tilgængelige servere hentes fra DNS for et bestemt domæne:
# 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.
Sådan finder du det skelnenavn på en OU eller gruppe.
Først skal vi bruge Distinguished Names (DN) på OU'erne og grupperne, hvor vi vil læse brugere ind i PFMP. Disse stier følger ikke strengt DNS-navngivning og indeholder OU'er inde i en x.500 LDAP-sti, som vi kan udtrække manuelt.
Vi kan finde disse DN'er ved hjælp af forskellige værktøjer afhængigt af OS, en nem måde er at bruge curl:
Sådan testes PFMP LDAP-indstillinger ved hjælp af curl-værktøjet på Linux.
De nyere versioner af curl, der er installeret på MVM'er, kan bruges til at finde de fulde fremtrædende navne, du har brug for, for eksempel søger dette efter den fulde DN for LabAdmins Group 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
Find alle medlemmer af en LDAP-gruppe ved hjælp af filteregenskaber, som du derefter kan placere i keycloak-backend:
#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
Sådan testes PFMP LDAP-indstillinger ved hjælp af ldapsearch eller curl-værktøjet på Linux.
Hvis en Linux-vært er tilgængelig på netværket, kan det være nyttigt at bruge ldapsearch-værktøjet til at teste og validere LDAP-indstillinger, der bruges i PFMP/Keycloak.
Alternativt kan curl-værktøjet også bruges til LDAP-forespørgsler fra en af Management VM'erne/MVM'erne.
Hurtig introduktion (ofte anvendte indstillinger):
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
Kontrol/installation af værktøjet:
$ which ldapsearch
/usr/bin/ldapsearch
#RHEL/CentOS install
sudo yum install openldap-clients
# SLES install
sudo zypper install openldap2-client
Definition af basis-DN (-b) ud fra LDAP-rodpost:
$ 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
Rodposten indeholder oplysninger om biblioteksserver. På AD giver attributten rootDomainNamingContext den øverste base DN, som kan bruges til søgning.
-W -b "
Test af LDAP URI,Bind DN (bruger/adgangskode med læseadgang) og indstillinger for brugersøgning:
$ 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)"
I dette eksempel forespørger vi LDAP for en eksisterende brugerkonto ved hjælp af attributten sAMAccountName (outputtet er blevet afkortet til kun at vise attributter, vi har brug for).
Tilsvarende indstillinger i PFMP-brugergrænsefladen:
Adresse (-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" eller "ck3-user@powerflex.lab.dell.com" er ækvivalenter)
(-x kræves til enkel godkendelse for at undgå standard SASL-tilstand)
Bind DN-adgangskode (-W): Bed om adgangskode (eller brug –w '***' til at angive den i kommandoen)
The output of the command validates the following PFMP User Search Settings:
Username LDAP Attribute: sAMAccountName
ID-attribut: objectGUID
Objektklasse: person
Søgesti (-b): "DC=PowerFlex,DC=Lab,DC=Dell,DC=com"
Indstillinger for testgruppesøgning:
$ 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-testgruppefilter:
$ 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)))"
Test af brugerens LDAP-filter:
$ 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-brugere og -computere. Klik på Vis, og vælg Avancerede funktioner.
DN er det navn, der entydigt identificerer en post i mappen. Den første komponent i DN kaldes Relative Distinguished Name (RDN).
En DN består af attribut=værdipar, adskilt af kommaer, for eksempel:
CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com
Tænk på dem som "FQDN'er til LDAP", den komplette x500-adresse 'URL'.
AD-brugere og computere kan bruges til at bestemme DN'er og andre attributter:

Naviger og højreklik på den OU, hvor du vil læse brugere, og vælg derefter Egenskaber.

I OU-egenskaber skal du vælge fanen Attributeditor.
Klik på distinguishedName for at fremhæve det, og klik derefter på Oversigt.
Højreklik på den fremhævede værdi, og vælg Kopiér.
Klik på Annuller og derefter OK for at lukke vinduerne Attributeditor og OU-egenskaber.

Eksempel på LDAP-brugerfilter med smal rækkevidde:
(&(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)))
Visuel forklaring:

Bind brugerkrav.
Denne bindebruger skal som minimum have tilladelse til at forespørge på brugere og grupper, der er defineret på LDAP-serveren, for at gøre det muligt for lagringssystemet at godkende disse brugere.
Når en bruger føjes til sikkerhedsfanen for domænet på øverste niveau i Active Directory-brugere og -computere, får brugeren som standard de skrivebeskyttede standardkrav, der kræves til LDAP-godkendelse i PFMP. fx.



FYI: Vi har ikke brug for, at vores LDAP-bindbruger faktisk er 'i' de AD-grupper, vi skal læse i biblioteket, vi har brug for tilladelserne til fanen Sikkerhed for "Læs".

Generelle krav til PFMP LDAP-udbyder
Adresse: ldaps://ad.ldap.domain:3269 (SSL) ELLER ldap://ad.ldap.domain:3268 (PLAIN)
Bind DN: ADNTDOMAIN\serviceaccount eller Bind DN Distinguished name.
Bind DN-adgangskode: adgangskode til tjenestekonto
Timeout 30000
Username LDAP attribute: sAMAccountName
ID-attribut: objectGUID
Object Class: Person
Søgesti: (Højeste niveau, der kan forespørge på alle grupper, f.eks. kun domænekomponenterne/DC'erne: DC=powerflex,DC=lab,DC=dell,DC=com)
Group Member Attribute: member
Group ID Attribute: cn
Group Object Class: group
Gruppesøgesti:(Samme som brugersøgesti eller mere detaljeret, hvis det er nødvendigt. Da vi bruger et smalt filter, kan vores anvendelsesområde være bredt uden at påvirke ydeevnen.)
#The følgende post angiver mindst én gruppe til LDAP-gruppefilteret (PFMP 4.6.x+), så Keycloak ikke søger efter alle grupper fra hele biblioteket:
Group LDAP Filter: (CN=GROUP1)
#Given begrænsningen på 64 char kun i dette felt for PFMP-brugergrænsefladen, skal vi bruge tastaturkappen til at omgå det, hvis vi vil tilføje mere end det, f.eks. 3 forskellige grupper:
Group LDAP Filter: (|(CN=GROUP1)(CN=GROUP2)(CN=GROUP3))
Test forbindelsen, og klik på Send, hvis det lykkes.
Fx.

2. Fjernelse og oprydning af LDAP-udbyder
Fjern LDAP-brugere, -grupper og derefter biblioteksudbyderen fra PFMP-brugergrænsefladen som administratorbruger. Forsøg ikke at gøre dette som LDAP-bruger, kun som administrator.
ADVARSEL: Sørg for at registrere den aktuelle konfiguration for tilknytningen af "Katalogudbyder" og "Fjernbrugere/-grupper" fra PFMP (især hvis du har brug for at gendanne tidligere rolletilknytning).
Hvis gruppe-/rolletilknytning ikke vises på PFMP (kendt problem), skal du bruge følgende instruktioner:
# 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
Hvis der forbliver forældede LDAP-grupper i keycloak-databasen, kan de slettes manuelt ved hjælp af følgende proces:
Keycloak-databasesikkerhedskopiering og keycloak_group databasetabeloprydningskommandoer.
Bemærk: Manuel oprydning keycloak er undertiden ikke nødvendig.
Vi skal bruge PFMP-brugergrænsefladen til at fjerne udbyderen (altid fra PFMP først) og derefter bekræfte, at den er blevet ryddet fra keycloak ved hjælp af /auth/ URL.
Sådan kontrolleres LDAP-gruppetællingen i keycloak fra en hvilken som helst MVM:
# Kør dette for at indstille variablen først.
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;"
Dette er kun efter første fjernelse i PFMP UI, og kun hvis udbyderdataene forbliver i backend. Hvis du bruger PFxM 4.6.0.1, kan du også udføre følgende metode til at fjerne importerede brugere i Keycloak-brugergrænsefladen:
- Log på med /auth/ som keycloak-bruger
- Keycloak-adgangskoden er unik for hver installation og kan findes på enhver MVM ved hjælp af:
kubectl get secret -n powerflex keycloak-admin-credentials -o jsonpath="{.data.password}" | base64 --decode; echo
3. Brugersammenslutning -> LDAP -> Indstillinger og vælg Fjern importeret i rullemenuen Handlinger øverst til højre.

Når grupperne og katalogudbyderne er ryddet op og fjernet, skal du genstarte de tre MVM-noder.
-Seddel: Dette kræves kun, når miljøet er stort, og LDAP-forespørgsler hober sig op gentagne gange, som det ses i dette tilfælde i logfilerne nedenfor.
- Hvis miljøet ikke er overbelastet med synkroniseringsproblemer, og brugergrænsefladen er stabil, kan MVM-genstarter generelt springes over. Det er dog generelt en god foranstaltning.
Genstart KB-https://www.dell.com/support/kbdoc/en-us/000225550
MVM kontrolleret genstart (skal køres én node ad gangen) Flyt ikke til den næste node, før du har kontrolleret, at databasen rapporterer synkroniseringsstandby.
#As bedste praksis skal du identificere den node, der er den aktuelle Postgres-leder, og genstarte denne sidste.
#Run følgende kommando på en MVM for at få vist databasestatus og tilknyttede databasenavne.
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 denne kommando for at identificere, hvilken MVM-node der er vært for postgres-databasepod'en.
for x in `kubectl get pods -n powerflex | grep "postgres-ha-cmo" |awk '{print $1}'` ; do echo $x; kubectl get pods -n powerflex $x -o json | grep '"nodeName"' | cut -d ':' -f2 ; echo " "; done
#On MVM, som er Postgres Leader-podforekomsten. Kør 'watch kubectl get nodes' for at overvåge status for dine genstarter. Denne MVM skal være den sidste node, der genstartes.
#Eksempel på genstartsrækkefølge, hvis pfmp-mgmt-1 er Postgres-leder. Juster rækkefølgen af kommandoerne nedenfor, afhængigt af hvilken MVM der er Postgres-leder.
Åbn en terminal, der er tilsluttet den tredje MVM, og kør de to første kommandoer.
kubectl label
node pfmp-mgmt-3 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-3 --ignore-daemonsets --delete-emptydir-data && sudo reboot
#When noden kommer op fra genstart. Kør følgende kommando.
kubectl uncordon pfmp-mgmt-3 ; kubectl label node pfmp-mgmt-3 cmo.maintenance.mode-
#Run følgende kommando, indtil databasen, der er knyttet til MVM3, rapporterer synkroniseringsstandby. På det tidspunkt kan du flytte til den næste MVM.
kubectl exec -n powerflex -c database $(kubectl get pods -n powerflex -l='postgres-operator.crunchydata.com/role=master, postgres-operator.crunchydata.com/instance-set' | grep Running | cut -d' ' -f1) -- sh -c 'patronictl list'
Åbn en terminal, der er tilsluttet den anden MVM, og kør de to første kommandoer.
kubectl label node pfmp-mgmt-2 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-2 --ignore-daemonsets --delete-emptydir-data && sudo reboot
#When noden kommer op fra genstart. Kør følgende kommando.
kubectl uncordon pfmp-mgmt-2 ; kubectl label node pfmp-mgmt-2 cmo.maintenance.mode-
#Run følgende kommando, indtil databasen, der er knyttet til MVM2, rapporterer synkroniseringsstandby. På det tidspunkt kan du flytte til den næste MVM.
kubectl exec -n powerflex -c database $(kubectl get pods -n powerflex -l='postgres-operator.crunchydata.com/role=master, postgres-operator.crunchydata.com/instance-set' | grep Running | cut -d' ' -f1) -- sh -c 'patronictl list'
#Run følgende kommando for at bruge denne MVM som MVM til overvågning af nodestatus.
'watch kubectl get nodes'
Gå til terminalen, der er tilsluttet den første MVM, der kører 'se kubectl få noder'. Tryk på ctrl+c for at gå tilbage til terminalen og køre de to første kommandoer.
kubectl label
node pfmp-mgmt-1 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-1 --ignore-daemonsets --delete-emptydir-data && sudo reboot
#When noden kommer op fra genstart. Kør følgende kommando.
kubectl uncordon pfmp-mgmt-1 ; kubectl label node pfmp-mgmt-1 cmo.maintenance.mode-
#Run følgende kommando, indtil databasen, der er knyttet til MVM1, rapporterer synkroniseringsstandby. Denne MVM var lederen, men en ny leder ville tage over, når MVM1 blev drænet.
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'
AFSLUTNING AF MVM KONTROLLERET GENSTARTSPROCEDURE
Når den er genstartet, og brugergrænsefladen er gendannet til PFMP, skal du logge ind som administrator og tilføje Indstillinger -> Katalogudbyder ved hjælp af nedenstående trin:
3. Genopbygning af LDAP-udbyder
Som nævnt i forberedelsesafsnittet, hvis der er underordnede AD-domæner eller AD-domænetillidskonti i grupper, som du skal bruge i PFMP, skal LDAP-portene 3268 (almindelig) og 3269 (SSL) bruges i det globale katalog (GC).
Fx.
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. Smal LDAP-bruger- og gruppeomfangsapplikation
Log på med /auth/ som keycloak-bruger
Brugerfilter:
# Bruger LDAP-filter mangler i PFMP-brugergrænsefladen, så vi skal bruge følgende for at ændre det.
#This filter skal anvendes i Keycloak PowerFlex-verdenen (PowerFlex --> Brugersammenslutning --> LDAP-brugerfilter)
LDAP-brugerfilter:
(&(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)))
Gem ændringen.
Forklaring af dette indsnævrede filter:
objectCategory er lig med Person.
Og
sAMAccountName findes
Og
memberOf er lig med CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com
Eller
memberOf er lig med CN=FLEX-STOR-MON,OU=15G,OU=FLEXLAB,DC=powerflex,DC=lab,DC=dell,DC=com
Fra <https://ldap-builder.powerflex.lab.dell.com/>
Brugersammenslutning -> LDAP -> Indstillinger og i rullemenuen Handlinger øverst til højre skal du vælge Fjern importeret.

4.6.x+ Brugergrænseflademetode til sletning af gruppetilknytning.

I LDAP-gruppetilknytningsindstillingen for 'LDAP-attribut for medlemsbruger-LDAP' skal vi også sikre, at en korrekt værdi, vi sender som 'cn' og ikke kan ændre i PFMP-brugergrænsefladen, ændres i keycloak-brugergrænsefladen til DN.

I gruppen LDAP-filter kan vi angive en enten/eller-operator | og KN for hver gruppe, f.eks.
(|(CN=FLEXLAB-APP-PROD-SDS-Admin)(CN=CN=PRV_US_SA_SRV_SVS))