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

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. Förberedelse
  2. Borttagning och rensning av LDAP-provider
  3. LDAP-provideråterskapande
  4. 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 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

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=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

 

 

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" \
"(&(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

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

 

image

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

 

 

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:

  1. Logga in med /auth/ som keycloak-användare
  2. 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: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. 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))

 

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.