Konfigurace protokolu LDAP PowerFlex 4.x pro velká prostředí
Summary: Zúžením vyhledávacích filtrů LDAP uživatelů i skupin pomocí backendu PowerFlex Management Platform SSO můžeme zmírnit problémy se synchronizací, u nichž bylo zjištěno, že způsobují více problémů s uživatelským rozhraním a platformou. ...
Instructions
- Příprava
- Odebrání a vyčištění poskytovatele LDAP
- Opětovné vytvoření poskytovatele LDAP
- Zúžení aplikace oboru uživatele a skupiny LDAP
Pozadí:
Poskytovatelé adresářů PFMP (PowerFlex Management Platform) ve výchozím nastavení importují všechny objekty LDAP v nakonfigurovaném oboru vyhledávání, včetně neuživatelských účtů a dalších objektů, které naše RBAC nevyžaduje.
Ve velkých prostředích může toto chování vést k významnému využití prostředků napříč virtuálními počítači pro správu PFMP (MVM), podpůrnou databází Postgres a celkovou platformou.
Proto se synchronizace LDAP nemusí dokončit v přijatelných časových rámcích, což může způsobit backlogy úloh, nevracení paměti a problémy se souběžností.
1. Příprava
Požadavky:
- Globální katalog
- Zjištění DN skupin AD pro PFMP
- Požadavky na vazbu uživatele
- Obecné požadavky PFMP LDAP
Použití globálního katalogu služby Active Directory
Poznámka: Požadujeme použití portu 3268 pro standardní protokol LDAP nebo 3269 pro protokol LDAPS v prostředích AD. To umožňuje, aby členové skupiny LDAP z podřízených domén nebo jiných důvěryhodných domén byli použitelní v PFMP.
Skupina AD, například:

Podřízená doména nad na.powerflex.lab.dell.com musí být viditelná pomocí protokolu PFMP LDAP User Federation Keycloak pomocí portů globálního katalogu, které umožňují jejich dostupnost.
To je také důvod, proč používáme objectGUID v PFMP Directory Provider, propojuje účty s jejich globálním unikátním UUID.
Pokud jsou obě podřízené domény uvedené na kartě Vztahy důvěryhodnosti, zdá se, že subdomény si ve výchozím nastavení vzájemně důvěřují.
V prostředí služby Microsoft Active Directory (AD) si nadřazená doména a její podřízené (poddomény) ze své podstaty vzájemně důvěřují v hierarchické struktuře. To se označuje jako tranzitivní vztah důvěryhodnosti.
Ve výchozím nastavení jsou tyto vztahy důvěryhodnosti obousměrné a přenositelné, což znamená, že nadřazená doména důvěřuje svým podřízeným doménám a naopak. Tato přenosná povaha rozšiřuje vztah důvěryhodnosti na všechny domény v hierarchii nadřazený-podřízený.
Vyhledání dostupných serverů LDAP nebo AD GC z položek DNS
Zákazník obvykle poskytne adresu LDAP, kterou má použít. Tato nastavení lze zkopírovat z konfigurace poskytovatele adresáře PFMP před jeho odebráním v rámci dalších kroků této příručky.
Případně lze dostupné servery načíst ze služby DNS pro konkrétní doménu:
# 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.
Jak najít rozlišující název organizační jednotky nebo skupiny.
Nejprve budeme potřebovat rozlišující názvy (DN) organizačních jednotek a skupin, ve kterých chceme číst uživatele do PFMP. Tyto cesty nedodržují striktně názvy DNS a obsahují organizační jednotky uvnitř cesty LDAP x.500, kterou lze extrahovat ručně.
Tyto DN můžeme najít pomocí různých nástrojů v závislosti na operačním systému, jedním ze snadných způsobů je použití curl:
Jak otestovat nastavení PFMP LDAP pomocí nástroje curl v systému Linux.
Novější verze curl, které jsou nainstalovány na MVM, lze použít k nalezení úplných rozlišujících názvů, které potřebujete, například toto vyhledá úplné DN 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
Najděte všechny členy skupiny LDAP pomocí vlastností filtru, které pak můžete umístit do backendu 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=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
Jak otestovat nastavení PFMP LDAP pomocí nástroje ldapsearch nebo curl v systému Linux.
Pokud je v síti k dispozici linuxový hostitel, může být užitečné použít utilitu ldapsearch k otestování a ověření nastavení LDAP použitých v PFMP/Keycloak.
Alternativně lze nástroj curl použít také pro dotazy LDAP z jednoho z virtuálních počítačů pro správu nebo MVM.
Rychlý úvod (běžně používané možnosti):
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
Kontrola/instalace nástroje:
$ which ldapsearch
/usr/bin/ldapsearch
#RHEL/CentOS install
sudo yum install openldap-clients
# SLES install
sudo zypper install openldap2-client
Definování Base DN (-b) z kořenové položky 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
Kořenový adresář obsahuje informace o adresářovém serveru. Ve službě AD atribut rootDomainNamingContext poskytuje nejvyšší základní rozlišující název, který lze použít pro vyhledávání.
-W -b "
Testování identifikátoru URI LDAP, rozlišujícího jména vazby (uživatel/heslo s přístupem pro čtení) a nastavení vyhledávání uživatelů:
$ 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)"
V tomto příkladu se dotazujeme na protokol LDAP pro existující uživatelský účet pomocí atributu sAMAccountName (výstup byl zkrácen tak, aby zobrazoval pouze atributy, které potřebujeme).
Odpovídající nastavení v uživatelském rozhraní PFMP:
Adresa (-H): ldap://active.directory.domain.address.com:3268
Rozlišující název vazby (-D): "CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com" # ("FLEXLAB\ck3-user" nebo "ck3-user@powerflex.lab.dell.com" jsou ekvivalenty)
(-x se vyžaduje pro jednoduché ověřování, aby se zabránilo výchozímu režimu SASL)
Bind DN Password (-W): výzva k zadání hesla (nebo ho zadejte v příkazupomocí –w '***').
The output of the command validates the following PFMP User Search Settings:
Username LDAP Attribute: sAMAccountName
Atribut ID: identifikátor objectGUID
Třída objektu: person
Vyhledávací cesta (-b): "dc=powerflex,dc=lab,dc=dell,dc=com"
Nastavení vyhledávání testovacích skupin:
$ 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"
Testovací skupina LDAP filtru:
$ 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)))"
Testování uživatelského filtru LDAP:
$ 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
Spusťte nástroj Uživatelé a počítače služby Active Directory. Klikněte na Zobrazit a zvolte Pokročilé funkce.
DN je název, který jednoznačně identifikuje položku v adresáři. První složka DN se označuje jako relativní rozlišující název (RDN).
DN se skládá z párů atribut = hodnota oddělených čárkami, například:
CN=PowerFlex Admin,OU=sio-group1,DC=powerflex,DC=lab,DC=dell,DC=com
Představte si je jako "FQDN for LDAP", což je úplná adresa "URL" adresy x500.
Uživatelé a počítače služby AD lze použít k určení názvů názvů a dalších atributů:

Přejděte a klikněte pravým tlačítkem na organizační jednotku, ve které chcete číst uživatele, a pak vyberte Vlastnosti.

V části Vlastnosti organizační jednotky vyberte kartu Editor atributů.
Kliknutím na rozlišující název ho zvýrazněte a potom klikněte na Zobrazit.
Klikněte pravým tlačítkem na zvýrazněnou hodnotu a vyberte možnost Kopírovat.
Kliknutím na tlačítko Storno a poté na tlačítko OK zavřete okna Editor atributů a Vlastnosti organizační jednotky.

Příklad uživatelského filtru LDAP s úzkým rozsahem:
(&(objectCategory=Osoba)(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)))
Vizuální vysvětlení:

Vytvořte vazbu uživatelských požadavků.
Tento uživatel vazby musí mít alespoň oprávnění k dotazování uživatelů a skupin definovaných na serveru LDAP, aby úložný systém mohl tyto uživatele ověřit.
Ve výchozím nastavení platí, že když je uživatel přidán na kartu zabezpečení domény nejvyšší úrovně v modulu Uživatelé a počítače služby Active Directory, jsou mu dány výchozí požadavky jen pro čtení potřebné pro ověřování LDAP v PFMP. např.



FYI: Nepotřebujeme, aby uživatel vazby LDAP skutečně "v" skupinách AD, které musíme číst v adresáři, potřebujeme oprávnění karty Zabezpečení "Číst".

Obecné požadavky poskytovatele PFMP LDAP
Adresa: ldaps://ad.ldap.domain:3269 (SSL) NEBO ldap://ad.ldap.domain:3268 (PLAIN)
Bind DN: ADNTDOMAIN\serviceaccount nebo rozlišující název rozlišujícího názvu Bind DN.
Bind DN Password: heslo účtu služby
Timeout 30000
Username LDAP attribute: sAMAccountName
Atribut ID: objectGUID
Object Class: Person
Cesta hledání: (Nejvyšší úroveň, která se může dotazovat na všechny skupiny, např. pouze na komponenty domény/DC: DC = powerflex, DC = laboratoř, DC = dell, DC = com)
Group Member Attribute: member
Group ID Attribute: cn
Group Object Class: group
Vyhledávací cesta skupiny:(Stejná jako vyhledávací cesta uživatele, případně podrobnější. Vzhledem k tomu, že budeme používat úzký filtr, může být náš rozsah široký, aniž by to mělo vliv na výkon.)
#The následující položka poskytuje alespoň jednu skupinu do filtru LDAP Group (PFMP 4.6.x+), aby keycloak nehledal všechny skupiny z celého adresáře:
Group LDAP Filter: (CN=GROUP1)
#Given omezením 64 znaků v tomto poli pouze pro uživatelské rozhraní PFMP musíme použít klávesový plášť, abychom to vyřešili, pokud chceme přidat více než to, např. 3 různé skupiny:
Group LDAP Filter: (|(CN=GROUP1)(CN=GROUP2)(CN=GROUP3))
Otestujte připojení a v případě úspěchu klikněte na tlačítko Odeslat.
Např.

2. Odebrání a vyčištění poskytovatele LDAP
Odeberte uživatele LDAP, skupiny a poté poskytovatele adresářů z uživatelského rozhraní PFMP jako uživatele admin. Nepokoušejte se o to jako uživatel LDAP, ale pouze jako správce.
VÝSTRAHA: Nezapomeňte si poznamenat aktuální konfiguraci pro mapování "Directory Provider" a "Remote Users/Groups" z PFMP (zejména pokud potřebujete obnovit předchozí mapování rolí).
Pokud se v PFMP nezobrazuje mapování skupin/rolí (známý problém), postupujte podle následujících pokynů:
# 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
Pokud v databázi keycloak zůstanou nějaké zastaralé skupiny LDAP, lze je odstranit ručně pomocí následujícího procesu:
Příkazy pro zálohování databáze Keycloak a keycloak_group vyčištění databázové tabulky.
Poznámka: Ruční čištění klávesnice někdy není nutné.
K odstranění poskytovatele bychom měli použít uživatelské rozhraní PFMP (nejprve vždy z PFMP) a poté pomocí adresy URL /auth/ potvrdit, že byl vymazán z funkce keycloak.
Jak zkontrolovat počet skupin LDAP v keycloak z libovolného MVM:
# Spusťte toto pro nastavení proměnné jako první.
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;"
To je pouze po prvním odebrání v uživatelském rozhraní PFMP a pouze v případě, že data poskytovatele zůstanou v back-endu. Pokud používáte PFxM 4.6.0.1, můžete také provést následující metodu pro odebrání importovaných uživatelů v uživatelském rozhraní Keycloak:
- Přihlaste se pomocí /auth/ jako uživatel keycloak.
- Heslo Keycloak je jedinečné pro každou instalaci a lze jej nalézt na jakémkoli MVM pomocí:
kubectl get secret -n powerflex keycloak-admin-credentials -o jsonpath="{.data.password}" | base64 --decode; echo
3. Federace uživatelů –> LDAP –> Nastavení a v rozevíracím seznamu Akce vpravo nahoře vyberte Odebrat importované.

Po vyčištění a odebrání skupin a poskytovatelů adresářů restartujte tři uzly MVM.
-Poznámka: To je vyžadováno pouze v případě, že je prostředí velké a dotazy LDAP se opakovaně sčítají, jak je vidět v tomto případě v protokolech níže.
- Pokud prostředí není přetížené problémy se synchronizací a uživatelské rozhraní je stabilní, restartování MVM je obecně možné přeskočit. Obecně je to však dobré opatření.
Restartujte https://www.dell.com/support/kbdoc/en-us/000225550 KB
MVM Graceful Reboot (musí být spuštěn po jednom uzlu) Nepřecházejte do dalšího uzlu, dokud neověříte, že databáze hlásí pohotovostní režim synchronizace.
#As osvědčených postupů identifikujte uzel, který je aktuálním vedoucím Postgres, a restartujte jej jako poslední.
#Run následující příkaz u libovolného MVM pro výpis stavu databáze a přidružených názvů databází.
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 tímto příkazem identifikujte, který uzel MVM je hostitelem databázového podu 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 MVM, což je instance podu Postgres Leader. Spuštěním příkazu "watch kubectl get nodes" monitorujte stav restartování. Tento MVM musí být posledním uzlem, který se restartuje.
#Příklad pořadí restartování, pokud je pfmp-mgmt-1 vedoucím Postgres. Upravte pořadí níže uvedených příkazů podle toho, který MVM je vedoucím Postgres.
Otevřete terminál připojený ke třetímu MVM a spusťte první dva příkazy.
kubectl label
node pfmp-mgmt-3 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-3 --ignore-daemonsets --delete-emptydir-data && sudo reboot
#When se uzel probudí z restartování. Spusťte následující příkaz.
kubectl uncordon pfmp-mgmt-3 ; kubectl label node pfmp-mgmt-3 cmo.maintenance.mode-
#Run následující příkaz, dokud databáze přidružená k MVM3 nenahlásí úsporný režim synchronizace. V tomto okamžiku můžete přejít na další 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'
Otevřete terminál připojený ke druhému MVM a spusťte první dva příkazy.
kubectl label node pfmp-mgmt-2 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-2 --ignore-daemonsets --delete-emptydir-data && sudo reboot
#When se uzel probudí z restartování. Spusťte následující příkaz.
kubectl uncordon pfmp-mgmt-2 ; kubectl label node pfmp-mgmt-2 cmo.maintenance.mode-
#Run následující příkaz, dokud databáze přidružená k MVM2 nenahlásí úsporný režim synchronizace. V tomto okamžiku můžete přejít na další 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 následující příkaz, chcete-li použít tento MVM jako MVM monitorování stavu uzlu.
'watch kubectl get nodes'
Přejděte k terminálu připojenému k prvnímu MVM, na kterém běží "watch kubectl get nodes". Stisknutím kláves Ctrl+C se vraťte do terminálu a spusťte první dva příkazy.
kubectl label
node pfmp-mgmt-1 cmo.maintenance.mode=true
kubectl drain pfmp-mgmt-1 --ignore-daemonsets --delete-emptydir-data && sudo reboot
#When se uzel probudí z restartování. Spusťte následující příkaz.
kubectl uncordon pfmp-mgmt-1 ; kubectl label node pfmp-mgmt-1 cmo.maintenance.mode-
#Run následující příkaz, dokud databáze přidružená k MVM1 nenahlásí úsporný režim synchronizace. Tento MVM byl vůdcem, ale nový vůdce převzal vedení, když byl MVM1 vyčerpán.
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'
KONEC PROCEDURY MVM GRACEFUL REBOOT
Po restartování a obnovení uživatelského rozhraní pro PFMP se přihlaste jako admin a přidejte Settings –> Directory Provider pomocí následujících kroků:
3. Opětovné vytvoření poskytovatele LDAP
Jak je uvedeno v části přípravy, Pokud existují podřízené domény AD nebo důvěryhodné účty domény AD ve všech skupinách, které chcete použít v PFMP, měli byste použít porty LDAP globálního katalogu (GC) 3268 (plain) a 3269 (SSL).
Např.
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. Zúžení aplikace oboru uživatele a skupiny LDAP
Přihlaste se pomocí /auth/ jako uživatel keycloak.
Uživatelský filtr:
# V uživatelském rozhraní PFMP chybí uživatelský LDAP filtr, takže to musíme změnit pomocí následujícího.
#This filtr musí být použit v oblasti Keycloak PowerFlex (PowerFlex --> Federace uživatelů --> Filtr LDAP uživatele)
Uživatelský filtr LDAP:
(&(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)))
Uložte změnu .
Vysvětlení tohoto zúženého filtru:
objectCategory se rovná Person.
a
sAMAccountName existuje
a
memberOf se rovná CN=PowerFlex Admin, OU=sio-group1;DC=powerflex,DC=lab,DC=dell,DC=com
Nebo
memberOf se rovná CN=FLEX-STOR-MON,OU=15G,OU=FLEXLAB,DC=powerflex,DC=lab,DC=dell,DC=com
Od <https://ldap-builder.powerflex.lab.dell.com/>
Federace uživatelů –> LDAP –> Nastavení a v rozevíracím seznamu Akce vpravo nahoře vyberte odebrat importované.

4.6.x+ Metoda uživatelského rozhraní pro odstranění mapování skupin.

V nastavení mapování skupiny LDAP pro atribut LDAP uživatele členství musíme také zajistit, aby se správná hodnota, kterou dodáváme jako "cn" a nelze ji změnit, změnila v uživatelském rozhraní klávesnice na DN.

Ve skupinovém LDAP filtru můžeme vypsat operátor buď/nebo | a kombinované nomenklatury každé skupiny, např.
(|(CN=FLEXLAB-APP-PROD-SDS-Admin)(CN=CN=PRV_US_SA_SRV_SVS))