Configurazione LDAP di PowerFlex 4.x per ambienti di grandi dimensioni

Summary: Restringendo i filtri di ricerca LDAP di utenti e gruppi utilizzando il back-end SSO della piattaforma di gestione PowerFlex, è possibile mitigare i problemi di sincronizzazione che sono stati osservati come causa di diversi problemi dell'interfaccia utente e della piattaforma. ...

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. Preparazione
  2. Rimozione e pulizia del provider LDAP
  3. Ricostruzione del provider LDAP
  4. Applicazione restringente dell'ambito di utenti e gruppi LDAP

 

 

Informazioni preliminari: 

 

Per impostazione predefinita, i provider di directory della PowerFlex Management Platform (PFMP) importano tutti gli oggetti LDAP all'interno dell'ambito di ricerca configurato, inclusi gli account non utente e altri oggetti non richiesti dal nostro RBAC.

In ambienti di grandi dimensioni, questo comportamento può comportare un utilizzo significativo delle risorse tra le VM di gestione PFMP (MVM), il database Postgres di supporto e la piattaforma complessiva.

Pertanto, la sincronizzazione LDAP potrebbe non essere completata entro intervalli di tempo accettabili, causando backlog dei processi, perdite di memoria e problemi di simultaneità.

 

1. Preparazione

 

Requisiti:

 

 

Utilizzo del catalogo globale di Active Directory

Nota:  È richiesto l'utilizzo della porta 3268 per LDAP standard o 3269 per LDAPS in ambienti AD. Ciò consente ai membri del gruppo LDAP di domini figlio o di altri domini trusted di essere utilizzabili in PFMP.

Un gruppo AD, ad esempio:

 

Il dominio figlio di cui sopra na.powerflex.lab.dell.com deve essere visibile da PFMP LDAP User Federation Keycloak utilizzando le porte del catalogo globale che consentono di raggiungerli. 

Questo è anche il motivo per cui usiamo objectGUID nel provider di directory PFMP, collega gli account al relativo UUID univoco globale.

 

Se entrambi i domini figlio sono elencati nella scheda Trust, sembra che i sottodomini si considerino reciprocamente affidabili per impostazione predefinita.

In un'ambiente Microsoft Active Directory (AD), un dominio padre e i relativi domini figli (sotto)domini si fidano intrinsecamente l'uno dell'altro in una struttura gerarchica. Questo è noto come trust transitivo.

Per impostazione predefinita, questi trust sono bidirezionali e transitivi, il che significa che un dominio padre considera attendibili i relativi domini figlio e viceversa. Questa natura transitiva estende l'attendibilità a tutti i domini all'interno della gerarchia padre-figlio.

 

Ricerca dei server LDAP o AD GC disponibili dalle voci DNS

 

In genere è il cliente a fornire l'indirizzo LDAP da utilizzare.  Queste impostazioni possono essere copiate dalla configurazione del provider di directory PFMP prima di rimuoverla nei passaggi successivi di questa guida.

In alternativa, è possibile recuperare i server disponibili dal DNS per un dominio specifico:

 

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

 

 

Come trovare il distinguishedName di un'unità organizzativa o di un gruppo.

Innanzitutto, sono necessari i nomi distinti (DN) delle unità organizzative e dei gruppi in cui si desidera leggere gli utenti in PFMP.  Questi percorsi non seguono rigorosamente la denominazione DNS e contengono unità organizzative all'interno di un percorso LDAP x.500 che è possibile estrarre manualmente.

Possiamo trovare questi DN utilizzando utilità diverse a seconda del sistema operativo, un modo semplice è usare curl:

Come testare le impostazioni LDAP PFMP utilizzando l'utilità curl su Linux.

 

Le versioni più recenti di curl installate sugli MVM possono essere utilizzate per trovare i nomi distinti completi necessari, ad esempio questa ricerca il DN completo del CN del gruppo LabAdmins:

#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

Individuare tutti i membri di un gruppo LDAP utilizzando le proprietà del filtro che è possibile inserire nel backend Keycloak:

#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

 

 

Come testare le impostazioni LDAP PFMP utilizzando l'utilità ldapsearch o curl su Linux.

 

Se sulla rete è disponibile un host Linux, l'utilità ldapsearch potrebbe essere utile per testare e convalidare le impostazioni LDAP utilizzate in PFMP/Keycloak.

In alternativa, è possibile utilizzare l'utilità curl anche per le query LDAP da una delle VM/MVM di gestione.

 

Introduzione rapida (opzioni comunemente utilizzate):

 

 

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

 

 

 

Controllo/installazione dell'utensile:

$ which ldapsearch
/usr/bin/ldapsearch

#RHEL/CentOS install
sudo yum install openldap-clients

# SLES install
sudo zypper install openldap2-client

 

 

Definizione del DN di base (-b) dalla voce radice LDAP:

 

$ 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

 

 

La voce radice fornisce informazioni sul server di directory. In AD, l'attributo rootDomainNamingContext fornisce il DN di base superiore che può essere utilizzato per la ricerca.

 -W -b "

 

Test dell'URI LDAP, del Bind DN (utente/password con accesso in lettura) e delle impostazioni di ricerca utente:

 

$ 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 questo esempio, viene eseguita una query LDAP per un account utente esistente utilizzando l'attributo sAMAccountName (l'output è stato troncato per mostrare solo gli attributi necessari).

 

Impostazioni corrispondenti nell'interfaccia utente PFMP:

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

DN di binding (-D): "CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com" # ("FLEXLAB\ck3-user" o "ck3-user@powerflex.lab.dell.com" sono equivalenti)

(-x è necessario per l'autenticazione semplice per evitare la modalità SASL predefinita)

Bind DN Password (-W): richiede la password (o usa –w '***' per fornirla nel comando)

 

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

Username LDAP Attribute: sAMAccountName

Attributo ID: objectGUID

Classe dell'Oggetto: person

Percorso di ricerca (-b): "dc=powerflex,dc=lab,dc=dell,dc=com"

 

 

Impostazioni di ricerca gruppo di test:

 

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

 

Filtro LDAP gruppo di test:

 $ 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 del filtro LDAP utente:

$ 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

Avviare Utenti e computer Active Directory. Cliccare su View e selezionare Advanced Features.

Il DN è il nome che identifica in modo univoco una voce nella directory. Il primo componente del DN viene definito RDN (Relative Distinguished Name).

Un DN è costituito da coppie attributo=valore, separate da virgole, ad esempio:

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

Immaginali come "FQDN per LDAP", l'URL completo dell'indirizzo x500.

Gli utenti e i computer AD possono essere utilizzati per determinare i DN e altri attributi:

 

 

Spostarsi e cliccare con il pulsante destro del mouse sull'unità organizzativa in cui si desidera leggere gli utenti, quindi scegliere Proprietà.

In Proprietà unità organizzativa, selezionare la scheda Editor attributi.

Cliccare su distinguishedName per evidenziarlo, quindi cliccare su View.

Cliccare con il pulsante destro del mouse sul valore evidenziato e selezionare Copy. 

Cliccare su Annulla e quindi su OK per chiudere le finestre Editor attributi e Proprietà unità organizzativa.

 

 

 

 

Esempio di filtro utente LDAP con ambito ristretto:

 

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

 

 

Spiegazione visiva:

 

Bind Requisiti degli utenti.

 

Questo utente di binding deve disporre almeno dell'autorizzazione per eseguire query su utenti e gruppi definiti nel server LDAP per consentire al sistema di storage di autenticare questi utenti.

 

Per impostazione predefinita, quando un utente viene aggiunto alla scheda Protezione del dominio di primo livello in Utenti e computer di Active Directory, gli vengono forniti i requisiti di sola lettura predefiniti necessari per l'autenticazione LDAP in PFMP. ad es.

 

 

 

 

FYI: Non è necessario che l'utente di binding LDAP si trovi effettivamente nei gruppi AD, ma è necessario leggere nella directory, ma sono necessarie le autorizzazioni della scheda Security di "Read".

 

immagine

Requisiti generali del provider LDAP PFMP

 

Indirizzo: ldaps://ad.ldap.domain:3269 (SSL) O ldap://ad.ldap.domain:3268 (NORMALE)

DN binding: Nome distinto ADNTDOMAIN\serviceaccount o Bind DN.

Bind DN Password: password dell'account di servizio

Timeout 30000

Username LDAP attribute: sAMAccountName

Attributo ID: objectGUID

Object Class: Person

Percorso di ricerca: (livello più alto in grado di eseguire query su tutti i gruppi, ad esempio solo sui componenti di dominio/DC: DC=powerflex,DC=lab,DC=dell,DC=com)

Group Member Attribute: member

Group ID Attribute: cn

Group Object Class: group

Group Search Path:( uguale al percorso di ricerca dell'utente o più granulare se necessario.  Poiché utilizzeremo un filtro ristretto, il nostro ambito può essere ampio senza alcun impatto sulle prestazioni.)

 

#The seguente voce fornisce almeno un gruppo al filtro Gruppo LDAP (PFMP 4.6.x+), in modo che Keycloak non cerchi tutti i gruppi dall'intera directory:

Group LDAP Filter: (CN=GROUP1)

#Given la limitazione di 64 caratteri in questo campo solo per l'interfaccia utente PFMP, dobbiamo usare il keycloak per aggirarla se vogliamo aggiungere altro, ad esempio 3 gruppi diversi:
 

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

Testare la connessione e, in caso di esito positivo, cliccare su Submit.

Ad es.

 

 

2. Rimozione e pulizia del provider LDAP

 

Rimuovere gli utenti LDAP, i gruppi e quindi il provider di directory dall'interfaccia utente PFMP come utente amministratore.  Non tentare di eseguire questa operazione come utente LDAP, ma solo come amministratore.

 

AVVERTENZA: Assicurarsi di registrare la configurazione corrente per il mapping "Directory Provider" e "Remote Users/Groups" da PFMP (in particolare se è necessario ripristinare il mapping dei ruoli precedente).

Se il mapping di gruppi/ruoli non viene visualizzato in PFMP (problema noto), utilizzare le seguenti istruzioni:

# 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

 

 

Se nel database keycloak rimangono gruppi LDAP obsoleti, possono essere eliminati manualmente utilizzando la seguente procedura:

 

Comandi di backup del database Keycloak e pulizia della tabella del database keycloak_group.

 

Nota: A volte la pulizia manuale di Keycloak non è necessaria. 

È necessario utilizzare l'interfaccia utente PFMP per rimuovere il provider (sempre da PFMP prima), quindi verificare che sia stato cancellato da keycloak utilizzando /auth/ URL.

 

 

Come controllare il conteggio dei gruppi LDAP in Keycloak da qualsiasi MVM:

 

# Eseguire questa operazione per impostare prima la variabile.

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

 

Ciò avviene solo dopo la prima rimozione nell'interfaccia utente di PFMP e solo se i dati del provider rimangono nel back-end.  Se si utilizza PFxM 4.6.0.1, è anche possibile utilizzare il seguente metodo per rimuovere gli utenti importati nell'interfaccia utente di Keycloak:

  1. Accedere utilizzando /auth/ come utente Keycloak
  2. La password Keycloak è univoca per ogni installazione e può essere trovata su qualsiasi MVM utilizzando:

 

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

 

3. Federazione utenti -> LDAP -> Impostazioni e, nell'elenco a discesa Azioni in alto a destra, selezionare Rimuovi importato.

 

 

 

 

 

 

Dopo aver pulito e rimosso i gruppi e i provider di directory, riavviare i tre nodi MVM. 

 

 -Nota: Questa operazione è necessaria solo quando l'ambiente è di grandi dimensioni e le query LDAP si impilano ripetutamente, come illustrato in questo caso nei registri riportati di seguito.

 - Se l'ambiente non è sovraccarico di problemi di sincronizzazione e l'interfaccia utente è stabile, i riavvii di MVM possono generalmente essere saltati. Si tratta comunque di una buona misura in generale.

 

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

MVM Graceful Reboot (deve essere eseguito un nodo alla volta) Non passare al nodo successivo fino a quando non si verifica che il database segnala lo standby sincrono.

 

#As best practice, identificare il nodo leader corrente di Postgres e riavviare questo per ultimo.

#Run il seguente comando su qualsiasi MVM per elencare lo stato del database e i nomi dei database associati.

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 questo comando per identificare il nodo MVM che ospita il pod del database postgres.

 

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 l'MVM che è l'istanza del pod Postgres Leader.   Eseguire "watch kubectl get nodes" per monitorare lo stato dei riavvii. Questo MVM deve essere l'ultimo nodo che verrà riavviato.

#Esempio di ordine di riavvio se pfmp-mgmt-1 è il Postgres Leader. Regolare l'ordine dei comandi riportati di seguito a seconda di quale MVM è il Postgres Leader.

 

Aprire un terminale collegato al terzo MVM ed eseguire i primi due comandi.

 

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

#When il nodo si attiva dal riavvio. Eseguire il seguente comando.

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

#Run il seguente comando fino a quando il database associato a MVM3 non segnala Sync Standby. A quel punto è possibile passare all'MVM successivo.

 

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'

 

Aprire un terminale collegato al secondo MVM ed eseguire i primi due comandi.

 

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

#When il nodo si attiva dal riavvio.  Eseguire il seguente comando.

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

#Run il seguente comando fino a quando il database associato a MVM2 non segnala Sync Standby. A quel punto è possibile passare all'MVM successivo.

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 il seguente comando per utilizzare questo MVM come MVM per il monitoraggio dello stato del nodo.

'watch kubectl get nodes'

 

Passare al terminale connesso al primo MVM in esecuzione "watch kubectl get nodes".  Premere ctrl+c per tornare al terminale ed eseguire i primi due comandi.

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

#When il nodo si attiva dal riavvio.  Eseguire il seguente comando.

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

#Run il seguente comando fino a quando il database associato a MVM1 non segnala Sync Standby.  Questo MVM era il leader, ma un nuovo leader avrebbe preso il sopravvento quando MVM1 fosse stato prosciugato.  

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'

FINE DELLA PROCEDURA DI RIAVVIO NORMALE DI MVM

Una volta riavviato e ripristinata l'interfaccia utente per PFMP, accedere come amministratore e aggiungere Settings -> Directory Provider attenendosi alla seguente procedura:

3. Ricostruzione del provider LDAP

 

Come accennato nella sezione relativa alla preparazione, se sono presenti domini AD figlio o account attendibili di dominio AD in qualsiasi gruppo da utilizzare in PFMP, è necessario utilizzare le porte LDAP del catalogo globale (GC) 3268 (normale) e 3269 (SSL).

 

Ad es.

 

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. Applicazione restringente dell'ambito di utenti e gruppi LDAP

 

 

 

Accedere utilizzando /auth/ come utente Keycloak


Filtro utente:

 

 

 

# Il filtro LDAP dell'utente non è presente nell'interfaccia utente PFMP, quindi è necessario utilizzare quanto segue per modificarlo.

#This filtro deve essere applicato nell'area di autenticazione Keycloak PowerFlex (PowerFlex --> Federazione utenti --> Filtro LDAP utente)

 

 

 

Filtro LDAP utente:

 

 

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

 

 

 

Salvare la modifica.

 

 

 

Spiegazione di questo filtro ristretto:

 

 

 

objectCategory è uguale a Person.

e

sAMAccountName esiste

e

memberOf è uguale a CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com

Oppure

memberOf è uguale a CN=FLEX-STOR-MON,OU=15G,OU=FLEXLAB,DC=powerflex,DC=lab,DC=dell,DC=com

A partire da <https://ldap-builder.powerflex.lab.dell.com/>

Federazione utenti -> LDAP -> Impostazioni e nell'elenco a discesa Azioni in alto a destra selezionare Rimuovi importato.

 

Metodo dell'interfaccia utente 4.6.x+ per eliminare il mapping dei gruppi.

 

Nell'impostazione LDAP Group Mapping per "Membership User LDAP Attribute", è necessario anche assicurarsi che il valore spedito sia corretto come "cn" e che non possa essere modificato nell'interfaccia utente PFMP in DN.

 

 

 

Nel filtro LDAP del gruppo, è possibile elencare un operatore o/o |   e le NC di ciascun gruppo, ad es.

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