PowerFlex 4.x LDAP-konfiguration för stora miljöer
Summary: Genom att begränsa LDAP-sökfiltren för både användare och grupper med hjälp av PowerFlex Management Platform SSO-backend kan vi minska synkroniseringsproblem som har observerats orsaka flera gränssnitts- och plattformsproblem. ...
Instructions
- Förberedelse
- Borttagning och rensning av LDAP-provider
- LDAP-provideråterskapande
- Begränsa tillämpningen av LDAP-användare och -gruppomfång
Bakgrund:
Som standard importerar katalogproviders för PowerFlex Management Platform (PFMP) alla LDAP-objekt inom det konfigurerade sökomfånget, inklusive icke-användarkonton och andra objekt som inte krävs av vår RBAC.
I stora miljöer kan det här beteendet resultera i betydande resursanvändning mellan virtuella PFMP-hanteringsdatorer (MVM), den stödjande Postgres-databasen och den övergripande plattformen.
Därför kan LDAP-synkroniseringen misslyckas med att slutföras inom acceptabla tidsramar, vilket orsakar eftersläpningar i jobb, minnesläckor och samtidighetsproblem.
1. Förberedelse
Krav:
Använda den globala Active Directory-katalogen
Obs! Vi kräver användning av port 3268 för standard LDAP eller 3269 för LDAPS i AD-miljöer. Detta gör att LDAP-gruppmedlemmar från underordnade domäner eller andra betrodda domäner kan användas i PFMP.
En AD-grupp, till exempel:

Den underordnade domänen ovan na.powerflex.lab.dell.com måste vara synlig för PFMP:s LDAP-användarfederation Keycloak. De globala katalogportarna gör att de kan nås.
Det är också därför vi använder objectGUID i PFMP-katalogprovidern, det knyter konton till deras globala unika UUID.
Om båda de underordnade domänerna visas under fliken Förtroenden verkar det som om underdomänerna litar på varandra som standard.
I en Microsoft Active Directory-miljö (AD) litar en överordnad domän och dess underordnade (under)domäner på varandra i en hierarkisk struktur. Detta kallas för ett transitivt förtroende.
Som standard är dessa förtroenden dubbelriktade och transitiva, vilket innebär att en överordnad domän litar på sina underordnade domäner och vice versa. Den här transitiva karaktären utökar förtroendet till alla domäner i hierarkin överordnad-underordnad.
Hitta tillgängliga LDAP- eller AD GC-servrar från DNS-poster
Vanligtvis anger kunden en LDAP-adress som ska användas. De här inställningarna kan kopieras från PFMP-katalogproviderkonfigurationen innan de tas bort som en del av nästa steg i den här guiden.
Alternativt kan tillgängliga servrar hämtas från DNS för en specifik domän:
# 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å här hittar du distinguishedName för en organisationsenhet eller grupp.
Först behöver vi Distinguished Names (DN) för de organisationsenheter och grupper där vi vill läsa in användare i PFMP. Dessa sökvägar följer inte DNS-namngivningen strikt och innehåller organisationsenheter inuti en x.500 LDAP-sökväg som vi kan extrahera manuellt.
Vi kan hitta dessa DN:er med olika verktyg beroende på operativsystem, ett enkelt sätt är att använda curl:
Så här testar du PFMP LDAP-inställningar med curl utility på Linux.
De nyare versionerna av curl som är installerade på MVM:er kan användas för att hitta de fullständiga unika namnen du behöver, till exempel söker detta efter hela DN för 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
Hitta alla medlemmar i en LDAP-grupp med hjälp av filteregenskaper som du sedan kan placera i tangentbordets 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å här testar du PFMP LDAP-inställningar med ldapsearch eller curl utility på Linux.
Om en Linux-värd är tillgänglig i nätverket kan det vara användbart att använda verktyget ldapsearch för att testa och validera LDAP-inställningar som används i PFMP/Keycloak.
Alternativt kan curl-verktyget även användas för LDAP-frågor från en av de virtuella hanteringsdatorerna/MVM:erna.
Snabbintroduktion (vanliga alternativ):
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
Kontrollera/installera verktyget:
$ which ldapsearch
/usr/bin/ldapsearch
#RHEL/CentOS install
sudo yum install openldap-clients
# SLES install
sudo zypper install openldap2-client
Definiera bas-DN (-b) från LDAP-rotpost:
$ 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
Rotposten innehåller information om katalogservern. I AD rootDomainNamingContext ger attributet det översta bas-DN som kan användas för sökning.
-W -b "
Testa LDAP URI,bindnings-DN (användare/lösenord med läsåtkomst) och inställningar för användarsökning:
$ 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 det här exemplet frågar vi LDAP efter ett befintligt användarkonto med hjälp av attributet sAMAccountName (utdata har trunkerats för att endast visa attribut som vi behöver).
Motsvarande inställningar i PFMP-användargränssnittet:
Adress (-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" är motsvarande)
(-x krävs för enkel autentisering för att undvika standard-SASL-läge)
Bind DN-lösenord (-W): fråga efter lösenord (eller använd –w '***' för att ange det i kommandot)
The output of the command validates the following PFMP User Search Settings:
Username LDAP Attribute: sAMAccountName
ID-attribut: objectGUID
Objektklass: person
Sökväg (-b): "dc=powerflex,dc=lab,dc=dell,dc=com"
Testa gruppsökningsinställningar:
$ 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 för testgrupp:
$ 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)))"
Testa användarens 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
Starta Active Directory - användare och datorer. Klicka på View och välj Advanced Features.
DN är det namn som unikt identifierar en post i katalogen. Den första komponenten i DN kallas för det relativa unika namnet (RDN).
Ett DN består av attribut=värde-par, avgränsade med kommatecken, till exempel:
CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com
Tänk på dem som "FQDN för LDAP", den fullständiga x500-adressen "URL".
AD-användare och datorer kan användas för att fastställa DN och andra attribut:

Navigera och högerklicka på den organisationsenhet där du vill läsa användare och välj sedan Egenskaper.

I Egenskaper för organisationsenhet väljer du fliken Attributredigerare.
Klicka på distinguishedName för att markera det och klicka sedan på Visa.
Högerklicka på det markerade värdet och välj Kopiera.
Klicka på Avbryt och sedan på OK för att stänga fönstren Attributredigerare och Egenskaper för organisationsenhet.

Exempel på LDAP-användarfilter med smalt omfång:
(&(objectCategory=Person)(sAMAccountName=*)(|( memberOf=CN=FLEXLAB-APP-PROD-SDS-Admin,CN=Användare,DC=powerflex,DC=lab,DC=dell,DC=com)(memberOf=CN=LabAdmins,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com)))
Visuell förklaring:

Bind användarkrav.
Den här bindningsanvändaren måste minst ha behörighet att fråga användare och grupper som har definierats på LDAP-servern för att lagringssystemet ska kunna autentisera dessa användare.
När en användare läggs till på säkerhetsfliken i toppnivådomänen i Active Directory - användare och datorer får den som standard de skrivskyddade standardkrav som krävs för LDAP-autentisering i PFMP. t.ex.



FYI: Vi behöver inte vår LDAP-bindningsanvändare faktiskt "i" AD-grupperna som vi måste läsa i katalogen, vi behöver säkerhetsflikens behörigheter för "Läsa".

Allmänna krav för PFMP LDAP-provider
Adress: ldaps://ad.ldap.domain:3269 (SSL) ELLER ldap://ad.ldap.domain:3268 (VANLIG)
Bind DN: ADNTDOMAIN\serviceaccount eller Bind DN unikt namn.
Bind DN-lösenord: lösenord för servicekonto
Timeout 30000
Username LDAP attribute: sAMAccountName
ID-attribut: objectGUID
Object Class: Person
Sökväg: (Högsta nivå som kan fråga alla grupper, t.ex. endast domänkomponenter/domändomäner: DC = PowerFlex, DC = Lab, DC = Dell, DC = com)
Group Member Attribute: member
Group ID Attribute: cn
Group Object Class: group
Sökväg för grupp:(Samma som användarens sökväg eller mer detaljerad om det behövs. Eftersom vi kommer att använda ett smalt filter kan vårt omfång vara brett utan att prestanda påverkas.)
#The följande post tillhandahåller minst en grupp till LDAP-gruppfiltret (PFMP 4.6.x+), så att keycloak inte söker efter alla grupper från hela katalogen:
Group LDAP Filter: (CN=GROUP1)
#Given begränsningen på 64 tecken i detta fält endast för PFMP UI, måste vi använda keycloak för att komma runt den om vi vill lägga till mer än så, t.ex. 3 olika grupper:
Group LDAP Filter: (|(CN=GROUP1)(CN=GROUP2)(CN=GROUP3))
Testa anslutningen och, om det lyckas, klicka på Skicka.
T.ex.

2. Borttagning och rensning av LDAP-provider
Ta bort LDAP-användarna, grupperna och sedan katalogprovidern från PFMP-användargränssnittet som administratörsanvändare. Försök inte göra detta som LDAP-användare, bara som administratör.
Varning! Se till att registrera den aktuella konfigurationen för mappningen "Directory Provider" och "Remote Users/Groups" från PFMP (särskilt om du behöver återställa tidigare rollmappning).
Om grupp-/rollmappning inte visas på PFMP (känt problem) använder du följande 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
Om det finns inaktuella LDAP-grupper kvar i keycloak-databasen kan de tas bort manuellt på följande sätt:
Keycloak säkerhetskopiering av databas och rensningskommandon för keycloak_group databastabell.
Obs! Ibland behövs inte manuell rensning av nyckelhöljet.
Vi bör använda PFMP-gränssnittet för att ta bort leverantören (alltid från PFMP först), och sedan bekräfta att den har rensats från keycloak med hjälp av URL:en /auth/.
Så här kontrollerar du antalet LDAP-grupper i keycloak från en MVM:
# Kör detta för att ställa in variabeln 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;"
Detta sker först efter att du först har tagit bort PFMP-gränssnittet och endast om providerdata finns kvar i serverdelen. Om du använder PFxM 4.6.0.1 kan du även använda följande metod för att ta bort importerade användare i Keycloak-användargränssnittet:
- Logga in med /auth/ som keycloak-användare
- Keycloak-lösenordet är unikt för varje installation och kan hittas på alla MVM:er med:
kubectl get secret -n powerflex keycloak-admin-credentials -o jsonpath="{.data.password}" | base64 --decode; echo
3. Användarfederation –> LDAP –> Inställningar och i listrutan Åtgärder uppe till höger väljer du Ta bort importerad.

När grupperna och katalogprovidrar har rensats och tagits bort startar du om de tre MVM-noderna.
-Not: Detta krävs bara när miljön är stor och LDAP-frågor staplas upprepade gånger, vilket visas i det här fallet i loggarna nedan.
- Om miljön inte är överbelastad med synkroniseringsproblem och användargränssnittet är stabilt kan MVM-omstarterna i allmänhet hoppas över. Det är dock en bra åtgärd i allmänhet.
Starta om KB-https://www.dell.com/support/kbdoc/en-us/000225550
MVM Graceful Reboot (måste köras en nod i taget) Flytta inte till nästa nod förrän du har kontrollerat att databasen rapporterar vänteläge för synkronisering.
#As bästa praxis är att identifiera den nod som är den aktuella Postgres-ledaren och starta om den sist.
#Run följande kommando på valfri MVM för att visa en lista över databasstatus och databasnamn som är associerade.
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 det här kommandot för att identifiera vilken MVM-nod som är värd för postgres-databaspodden.
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 är Postgres Leader-poddinstansen. Kör "watch kubectl get nodes" för att övervaka statusen för dina omstarter. Denna MVM måste vara den sista noden som startas om.
#Exempel på omstartsordning om pfmp-mgmt-1 är Postgres-ledare. Justera ordningen på kommandona nedan beroende på vilken MVM som är Postgres-ledare.
Öppna en terminal som är ansluten till den tredje MVM:en och kör de två första kommandona.
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 upp efter omstart. Kör följande kommando.
kubectl uncordon pfmp-mgmt-3 ; kubectl label node pfmp-mgmt-3 cmo.maintenance.mode-
#Run följande kommando tills databasen som är associerad med MVM3 rapporterar vänteläge för synkronisering. Då kan du gå vidare till nästa 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'
Öppna en terminal som är ansluten till den andra MVM:en och kör de två första kommandona.
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 upp efter omstart. Kör följande kommando.
kubectl uncordon pfmp-mgmt-2 ; kubectl label node pfmp-mgmt-2 cmo.maintenance.mode-
#Run följande kommando tills databasen som är associerad med MVM2 rapporterar Sync Standby. Då kan du gå vidare till nästa 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öljande kommando för att använda denna MVM som MVM för övervakning av nodstatus.
'watch kubectl get nodes'
Gå till terminalen som är ansluten till den första MVM:en som kör "watch kubectl get nodes". Tryck på ctrl+c för att gå tillbaka till terminalen och köra de två första kommandona.
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 upp efter omstart. Kör följande kommando.
kubectl uncordon pfmp-mgmt-1 ; kubectl label node pfmp-mgmt-1 cmo.maintenance.mode-
#Run följande kommando tills databasen som är associerad med MVM1 rapporterar vänteläge för synkronisering. Denna MVM var ledare, men en ny ledare skulle ta över när MVM1 dränerades.
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'
SLUT PÅ PROCEDUREN FÖR LYCKAD OMSTART AV MVM
När den har startats om och användargränssnittet har återställts för PFMP loggar du in som administratör och lägger till Inställningar –> Katalogleverantör med hjälp av stegen nedan:
3. LDAP-provideråterskapande
Som nämnts i förberedelseavsnittet, om det finns underordnade AD-domäner eller AD-domänförtroendekonton i alla grupper som du ska använda i PFMP, ska den globala katalogens (GC) LDAP-portar 3268 (oformaterad) och 3269 (SSL) användas.
T.ex.
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. Begränsa tillämpningen av LDAP-användare och -gruppomfång
Logga in med /auth/ som keycloak-användare
Användarfilter:
# Användar-LDAP-filter saknas i PFMP-gränssnittet så vi måste använda följande för att ändra det.
#This filtret måste användas i Keycloak PowerFlex-sfären (PowerFlex --> Användarfederation --> Användarens LDAP-filter)
LDAP-användarfilter:
(&(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)))
Spara ändringen.
Förklaring till detta avsmalnade filter:
objectCategory är lika med Person.
Och
sAMAccountName finns
Och
memberOf är lika med CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com
Eller
memberOf är lika med CN=FLEX-STOR-MON,OU=15G,OU=FLEXLAB,DC=powerflex,DC=lab,DC=dell,DC=com
Från <https://ldap-builder.powerflex.lab.dell.com/>
Användarfederation –> LDAP –> Inställningar och i listrutan Åtgärder uppe till höger väljer du Ta bort importerad.

4.6.x+ Användargränssnittsmetod för att ta bort gruppmappning.

I LDAP-gruppmappningsinställningen för "Membership User LDAP Attribute" måste vi också säkerställa att ett korrekt värde som vi skickar som "cn" och inte kan ändras i PFMP-gränssnittet ändras i keycloak UI till DN.

I gruppen LDAP-filter kan vi lista en antingen/eller-operator | och KN-numren för varje grupp, t.ex.
(|(CN=FLEXLAB-APP-PROD-SDS-Admin)(CN=CN=PRV_US_SA_SRV_SVS))