Configuración de LDAP de PowerFlex 4.x para entornos grandes

Summary: Mediante la reducción de los filtros de búsqueda LDAP de usuario y grupo mediante el back-end de SSO de la plataforma de administración de PowerFlex, podemos mitigar los problemas de sincronización que se ha observado que causan varios problemas de la interfaz de usuario y la plataforma. ...

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. Preparación
  2. Eliminación y limpieza de proveedores de LDAP
  3. Reconstrucción del proveedor de LDAP
  4. Aplicación de alcance reducido de usuarios y grupos de LDAP

 

 

Antecedentes: 

 

De manera predeterminada, los proveedores de directorios de PowerFlex Management Platform (PFMP) importan todos los objetos LDAP dentro del alcance de búsqueda configurado, incluidas las cuentas que no son de usuario y otros objetos no requeridos por nuestro RBAC.

En entornos grandes, este comportamiento puede dar lugar a una utilización significativa de recursos en las VM de administración de PFMP (MVM), la base de datos Postgres compatible y la plataforma general.

Por lo tanto, es posible que la sincronización de LDAP no se complete dentro de los plazos aceptables, lo que provoca trabajos pendientes, pérdidas de memoria y problemas de simultaneidad.

 

1. Preparación

 

Requisitos:

 

 

Uso del catálogo global de Active Directory

Nota:  Se requiere el uso del puerto 3268 para LDAP estándar o 3269 para LDAPS en entornos AD. Esto permite que los miembros de grupos de LDAP de dominios secundarios u otros dominios de confianza se puedan utilizar en PFMP.

Un grupo de AD, por ejemplo:

 

El dominio secundario anterior na.powerflex.lab.dell.com debe ser visible para Keycloak, de federación de usuarios LDAP de PFMP, utilizando los puertos de catálogo global que permiten su acceso. 

Esta es también la razón por la que se utiliza objectGUID en el proveedor de directorios PFMP, ya que vincula las cuentas a su UUID único global.

 

Si ambos dominios secundarios se enumeran en la pestaña Confianzas, parece que los subdominios confían entre sí de manera predeterminada.

En un entorno de Microsoft Active Directory (AD), un dominio primario y sus (sub)dominios secundarios confían inherentemente entre sí en una estructura jerárquica. Esto se conoce como confianza transitiva.

De forma predeterminada, estas confianzas son bidireccionales y transitivas, lo que significa que un dominio primario confía en sus dominios secundarios y viceversa. Esta naturaleza transitiva extiende la confianza a todos los dominios dentro de la jerarquía de elementos primarios y secundarios.

 

Búsqueda de servidores LDAP o AD GC disponibles a partir de entradas de DNS

 

Por lo general, el cliente proporciona la dirección LDAP que se utilizará.  Estos ajustes se pueden copiar de la configuración del proveedor de directorio PFMP antes de eliminarlo como parte de los próximos pasos de esta guía.

Como alternativa, los servidores disponibles se pueden recuperar desde DNS para un dominio específico:

 

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

 

 

Cómo encontrar el nombre distinguido de una unidad organizativa o grupo.

En primer lugar, vamos a necesitar los nombres distintivos (DN) de las unidades organizativas y los grupos en los que queremos leer a los usuarios en PFMP.  Estas rutas no siguen estrictamente la asignación de nombres DNS y contienen unidades organizativas dentro de una ruta LDAP x.500 que podemos extraer manualmente.

Podemos encontrar estos DNs usando diferentes utilidades dependiendo del sistema operativo, una forma fácil es usar curl:

Cómo probar la configuración de LDAP de PFMP mediante la utilidad curl en Linux.

 

Las versiones más recientes de curl que se instalan en los MVM se pueden usar para encontrar los nombres distinguidos completos que necesita, por ejemplo, esto busca el DN completo del 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

Busque todos los miembros de un grupo de LDAP mediante propiedades de filtro que, a continuación, puede colocar en el back-end de 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

 

 

Cómo probar la configuración de LDAP de PFMP mediante la utilidad ldapsearch o curl en Linux.

 

Si hay un host Linux disponible en la red, el uso de la utilidad ldapsearch podría ser útil para probar y validar los ajustes de LDAP utilizados en PFMP/Keycloak.

Como alternativa, curl también se puede usar para consultas de LDAP desde una de las VM/MVM de administración.

 

Introducción rápida (opciones más utilizadas):

 

 

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

 

 

 

Comprobación/instalación de la herramienta:

$ which ldapsearch
/usr/bin/ldapsearch

#RHEL/CentOS install
sudo yum install openldap-clients

# SLES install
sudo zypper install openldap2-client

 

 

Definición del DN base (-b) a partir de la entrada raíz de 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 entrada raíz proporciona información sobre el servidor de directorio. En AD, el atributo rootDomainNamingContext proporciona el DN base superior que se puede usar para la búsqueda.

 -W -b "

 

Prueba del URI de LDAP, el DN de enlace (usuario/contraseña con acceso de lectura) y los ajustes de búsqueda de usuarios:

 

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

En este ejemplo, estamos consultando LDAP para una cuenta de usuario existente mediante el atributo sAMAccountName (la salida se truncó para mostrar solo los atributos que necesitamos).

 

Ajustes correspondientes en la interfaz de usuario de PFMP:

Dirección (-H):  ldap://active.directory.domain.address.com:3268

DN de enlace (-D): "CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com" # ("FLEXLAB\ck3-user" o "ck3-user@powerflex.lab.dell.com" son equivalentes)

(-x es necesario para una autenticación simple a fin de evitar el modo SASL predeterminado)

Bind DN Password (-W): solicite la contraseña (o use –w '***' para proporcionarla en el comando)

 

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

Username LDAP Attribute: sAMAccountName

Atributo de ID: objectGUID

Clase de objeto: person

Ruta de búsqueda (-b): "DC = PowerFlex, DC = Lab, DC = Dell, DC = com"

 

 

Prueba de la configuración de búsqueda de grupo:

 

$ 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 del grupo de prueba:

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

 

Probando el filtro LDAP del usuario:

$ 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

Inicie Usuarios y equipos de Active Directory. Haga clic en Ver y seleccione Funciones avanzadas.

El DN es el nombre que identifica de manera exclusiva una entrada en el directorio. El primer componente del DN se conoce como el nombre distintivo relativo (RDN).

Un DN se compone de pares attribute=value, separados por comas, por ejemplo:

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

Piense en ellos como "FQDN para LDAP", la dirección x500 completa "URL".

Los usuarios y computadoras de AD se pueden utilizar para determinar los DN y otros atributos:

 

 

Desplácese y haga clic con el botón secundario en la unidad organizativa en la que desea leer a los usuarios y, a continuación, seleccione Propiedades.

En OU Properties, seleccione la pestaña Attribute Editor.

Haga clic en distinguishedName para resaltarlo y, luego, haga clic en Ver.

Haga clic con el botón secundario en el valor resaltado y seleccione Copiar. 

Haga clic en Cancelar y, a continuación, en Aceptar para cerrar las ventanas Editor de atributos y Propiedades de unidad organizativa.

 

 

 

 

Ejemplo de filtro de usuario de LDAP de alcance restringido:

 

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

 

 

Explicación visual:

 

Requisitos de usuario de vinculación.

 

Este usuario de vinculación debe tener, al menos, permiso para consultar usuarios y grupos definidos en el servidor LDAP para permitir que el sistema de almacenamiento autentique a estos usuarios.

 

De manera predeterminada, cuando se agrega un usuario a la pestaña de seguridad del dominio de nivel superior en Usuarios y equipos de Active Directory, se le proporcionan los requisitos de solo lectura predeterminados necesarios para la autenticación de LDAP en PFMP. p ej.

 

 

 

 

FYI: No necesitamos que nuestro usuario de enlace de LDAP esté realmente "en" los grupos de AD que debemos leer en el directorio, necesitamos los permisos de la pestaña Seguridad de "Lectura".

 

imagen

Requisitos generales del proveedor de LDAP de PFMP

 

Dirección: ldaps://ad.ldap.domain:3269 (SSL) O ldap://ad.ldap.domain:3268 (SIN FORMATO)

DN de enlace: ADNTDOMAIN\serviceaccount o el nombre distintivo de Bind DN.

Contraseña de DN de enlace: contraseña de la cuenta de servicio

Timeout 30000

Username LDAP attribute: sAMAccountName

Atributo de ID: objectGUID

Object Class: Person

Ruta de búsqueda: (El nivel más alto que puede consultar todos los grupos, por ejemplo, solo los componentes de dominio/DC: DC = powerflex, DC = lab, DC = dell, DC = com)

Group Member Attribute: member

Group ID Attribute: cn

Group Object Class: group

Ruta de búsqueda de grupo:( igual que la ruta de búsqueda del usuario o más granular si es necesario.  Dado que utilizaremos un filtro estrecho, nuestro alcance puede ser amplio sin afectar el rendimiento).

 

#The siguiente entrada proporciona al menos un grupo para el filtro de grupo LDAP (PFMP 4.6.x+), de modo que keycloak no busque todos los grupos de todo el directorio:

Group LDAP Filter: (CN=GROUP1)

#Given la limitación de 64 caracteres en este campo solo para la interfaz de usuario de PFMP, debemos usar keycloak para evitarlo si queremos agregar más que eso, por ejemplo, 3 grupos diferentes:
 

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

Pruebe la conexión y, si se realiza correctamente, haga clic en Enviar.

P ej.

 

 

2. Eliminación y limpieza de proveedores de LDAP

 

Elimine los usuarios de LDAP, los grupos y, a continuación, el proveedor de directorio de la interfaz de usuario de PFMP como usuario administrador.  No intente hacer esto como usuario de LDAP, solo como administrador.

 

PRECAUCIÓN: Asegúrese de registrar la configuración actual para la asignación de "Proveedor de directorio" y "Usuarios remotos/Grupos" desde PFMP (en particular si necesita restaurar la asignación de funciones anterior).

Si la asignación de grupo/función no se muestra en PFMP (problema conocido), utilice las siguientes instrucciones:

# 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

 

 

Si algún grupo de LDAP obsoleto permanece en la base de datos keycloak, se puede eliminar manualmente mediante el siguiente proceso:

 

Comandos de respaldo y limpieza de tabla de base de datos de keycloak_group Keycloak.

 

Nota: En ocasiones, no es necesario limpiar manualmente keycloak. 

Debemos usar la interfaz de usuario de PFMP para eliminar el proveedor (siempre desde PFMP primero) y, a continuación, confirmar que se haya borrado de keycloak mediante la URL /auth/.

 

 

Cómo comprobar el conteo de grupos de LDAP en keycloak desde cualquier MVM:

 

# Ejecute esto para establecer la variable primero.

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

 

Esto es solo después de la primera eliminación en la interfaz de usuario de PFMP y solo si los datos del proveedor permanecen en el back-end.  Si utiliza PFxM 4.6.0.1, también puede realizar el siguiente método para eliminar usuarios importados en la interfaz de usuario de Keycloak:

  1. Inicie sesión con /auth/ como usuario keycloak
  2. La contraseña de Keycloak es única para cada instalación y se puede encontrar en cualquier MVM mediante:

 

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

 

3. Federación de usuarios:> LDAP -> Configuración y, en el menú desplegable Acciones superior derecho, seleccione Quitar importado.

 

 

 

 

 

 

Después de que los grupos y los proveedores de directorios se hayan limpiado y eliminado, reinicie los tres nodos MVM. 

 

 -Nota: Esto solo es necesario cuando el entorno es grande y las consultas de LDAP se apilan repetidamente, como se muestra en este caso en los siguientes registros.

 - Si el entorno no está sobrecargado con problemas de sincronización y la interfaz de usuario es estable, los reinicios de MVM generalmente se pueden omitir. Sin embargo, es una buena medida en general.

 

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

Reinicio ordenado de MVM (se debe ejecutar un nodo a la vez) No pase al siguiente nodo hasta que verifique que la base de datos esté informando el modo de espera de sincronización.

 

#As práctica recomendada, identifique el nodo que es el líder actual de Postgres y reinicie este último.

#Run el siguiente comando en cualquier MVM para enumerar el estado de la base de datos y los nombres de base de datos asociados.

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 este comando para identificar qué nodo MVM aloja el pod de base de datos de 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 el MVM que es la instancia del pod líder de Postgres.   Ejecute "watch kubectl get nodes" para monitorear el estado de los reinicios. Este MVM debe ser el último nodo que se reiniciará.

#Ejemplo de orden de reinicio si pfmp-mgmt-1 es el líder de Postgres. Ajuste el orden de los siguientes comandos según qué MVM sea el líder de Postgres.

 

Abra un terminal conectado al tercer MVM y ejecute los dos primeros comandos.

 

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

#When el nodo se enciende tras el reinicio. Ejecute el siguiente comando.

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

#Run el siguiente comando hasta que la base de datos asociada con MVM3 informe el modo de espera síncrono. En ese momento, puede pasar al siguiente 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'

 

Abra un terminal conectado al segundo MVM y ejecute los dos primeros comandos.

 

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

#When el nodo se enciende tras el reinicio.  Ejecute el siguiente comando.

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

#Run el siguiente comando hasta que la base de datos asociada con MVM2 informe el modo de espera síncrono. En ese momento, puede pasar al siguiente 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 el siguiente comando para usar este MVM como MVM de monitoreo del estado del nodo.

'watch kubectl get nodes'

 

Vaya al terminal conectado al primer MVM que esté ejecutando 'watch kubectl get nodes'.  Presione Ctrl+c para volver al terminal y ejecute los dos primeros comandos.

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

#When el nodo se enciende tras el reinicio.  Ejecute el siguiente comando.

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

#Run el siguiente comando hasta que la base de datos asociada con MVM1 informe el modo de espera síncrono.  Este MVM era el líder, pero un nuevo líder tomaría el relevo cuando MVM1 fuera drenado.  

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'

FIN DEL PROCEDIMIENTO DE REINICIO ORDENADO DE MVM

Una vez que se reinicie y se restaure la interfaz de usuario para PFMP, inicie sesión como administrador y agregue Settings -> Directory Provider mediante los pasos que se indican a continuación:

3. Reconstrucción del proveedor de LDAP

 

Como se mencionó en la sección de preparación, si hay dominios de AD secundarios o cuentas de confianza de dominio de AD en cualquier grupo que vaya a utilizar en PFMP, se deben utilizar los puertos LDAP 3268 (simple) y 3269 (SSL) del catálogo global (GC).

 

P ej.

 

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. Aplicación de alcance reducido de usuarios y grupos de LDAP

 

 

 

Inicie sesión con /auth/ como usuario keycloak


Filtro de usuario:

 

 

 

# Falta el filtro LDAP del usuario en la interfaz de usuario de PFMP, por lo que debemos usar lo siguiente para cambiarlo.

#This filtro se debe aplicar en el dominio Keycloak PowerFlex (PowerFlex --> User federation --> User LDAP filter)

 

 

 

Filtro LDAP del usuario:

 

 

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

 

 

 

Guarde el cambio.

 

 

 

Explicación de este filtro reducido:

 

 

 

objectCategory es igual a Person.

Y

sAMAccountName existe

Y

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

O bien,

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

Desde <https://ldap-builder.powerflex.lab.dell.com/>

Federación de usuarios:> LDAP -> Configuración y, en el menú desplegable Acciones superior derecho, seleccione Quitar importado.

 

Interfaz de usuario de 4.6.x+ Método para eliminar la asignación de grupos.

 

En la configuración de asignación de grupos LDAP para "Membership User LDAP Attribute", también debemos asegurarnos de que el valor correcto que enviamos como "cn" y que no se puede cambiar en la interfaz de usuario de PFMP se cambie en la interfaz de usuario de keycloak a DN.

 

 

 

En el filtro LDAP del grupo, podemos enumerar un operador o bien |   y las NC de cada grupo, p. ej.

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