Configuração de LDAP do PowerFlex 4.x para ambientes grandes

Summary: Ao restringir os filtros de pesquisa LDAP do usuário e do grupo usando o back-end SSO da plataforma de gerenciamento do PowerFlex, podemos reduzir os problemas de sincronização que foram observados como causadores de vários problemas de interface do usuário e 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. Preparação
  2. Remoção e limpeza do provedor LDAP
  3. Recriação do provedor LDAP
  4. Aplicativo de escopo de usuário e grupo LDAP restrito

 

 

Informações gerais: 

 

Por padrão, os provedores de diretório da PowerFlex Management Platform (PFMP) importam todos os objetos LDAP dentro do escopo de pesquisa configurado, inclusive contas de não usuário e outros objetos não exigidos pelo nosso RBAC.

Em ambientes grandes, esse comportamento pode resultar na utilização significativa de recursos entre as VMs de gerenciamento de PFMP (MVMs), o banco de dados Postgres de suporte e a plataforma geral.

Portanto, a sincronização LDAP pode não ser concluída dentro de períodos aceitáveis, causando pendências de trabalhos, vazamentos de memória e problemas de simultaneidade.

 

1. Preparação

 

Requisitos:

 

 

Usando o catálogo global do Active Directory

Nota:  Exigimos o uso da porta 3268 para LDAP padrão ou 3269 para LDAPS em ambientes AD. Isso permite que os membros do grupo LDAP de domínios secundários ou outros domínios confiáveis sejam utilizáveis na PFMP.

Um grupo do AD, por exemplo:

 

O domínio secundário acima na.powerflex.lab.dell.com deve estar visível pelo LDAP User Federation Keycloak da PFMP, usando as portas do catálogo global que permitem que eles sejam alcançados. 

É também por isso que usamos objectGUID no provedor de diretório PFMP, ele vincula as contas ao UUID exclusivo global.

 

Se ambos os domínios secundários estiverem listados na guia Confianças, parece que os subdomínios confiam um no outro por padrão.

Em um ambiente do Microsoft Active Directory (AD), um domínio pai e seus domínios secundários (sub) confiam inerentemente um no outro em uma estrutura hierárquica. Isso é conhecido como confiança transitiva.

Por padrão, essas relações de confiança são bidirecionais e transitivas, o que significa que um domínio pai confia em seus domínios filho e vice-versa. Essa natureza transitiva estende a confiança a todos os domínios dentro da hierarquia pai-filho.

 

Localizar servidores LDAP ou AD GC disponíveis em entradas DNS

 

Normalmente, o cliente fornece o endereço LDAP a ser usado.  Essas configurações podem ser copiadas da configuração do provedor de diretório PFMP antes de removê-lo como parte das próximas etapas deste guia.

Como alternativa, os servidores disponíveis podem ser recuperados do DNS para um domínio 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.

 

 

Como encontrar o distinguishedName de uma OU ou grupo.

Primeiro, precisaremos dos nomes distintos (DN) das UOs e dos grupos onde queremos ler os usuários na PFMP.  Esses caminhos não seguem estritamente a nomenclatura DNS e contêm UOs dentro de um caminho LDAP x.500 que podemos extrair manualmente.

Podemos encontrar esses DNs usando diferentes utilitários dependendo do sistema operacional, uma maneira fácil é usando curl:

Como testar as configurações de LDAP da PFMP usando o utilitário curl no Linux.

 

As versões mais recentes do curl que é instalado em MVMs podem ser usadas para encontrar os nomes distintos completos que você precisa, por exemplo, isso procura o DN completo do 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

Localize todos os membros de um grupo LDAP usando propriedades de filtro que você pode colocar no back-end do 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

 

 

Como testar as configurações de LDAP da PFMP usando o utilitário ldapsearch ou curl no Linux.

 

Se um host linux estiver disponível na rede, o uso do utilitário ldapsearch pode ser útil para testar e validar as configurações LDAP usadas no PFMP/Keycloak.

Como alternativa, o utilitário curl também pode ser usado para consultas LDAP de uma das VMs/MVMs de gerenciamento.

 

Introdução rápida (opções comumente usadas):

 

 

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

 

 

 

Verificação/instalação da ferramenta:

$ which ldapsearch
/usr/bin/ldapsearch

#RHEL/CentOS install
sudo yum install openldap-clients

# SLES install
sudo zypper install openldap2-client

 

 

Definindo o DN de base (-b) a partir da entrada raiz 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

 

 

A entrada root apresenta informações sobre o servidor de diretório. No AD, o atributo rootDomainNamingContext fornece o DN de base superior que pode ser usado para pesquisa.

 -W -b "

 

Testando o URI do LDAP, o DN de vinculação (usuário/senha com acesso de leitura) e as configurações de pesquisa de usuário:

 

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

Neste exemplo, estamos consultando o LDAP para uma conta de usuário existente usando o atributo sAMAccountName (a saída foi truncada para mostrar apenas os atributos necessários).

 

Configurações correspondentes na interface do usuário do PFMP:

Endereço (-H):  ldap://active.directory.domain.address.com:3268

DN de vinculação (-D): "CN=ck3-user,CN=Users,DC=powerflex,DC=lab,DC=dell,DC=com" # ("FLEXLAB\ck3-user" ou "ck3-user@powerflex.lab.dell.com" são equivalentes)

(-x é necessário para autenticação simples para evitar o modo SASL padrão)

Bind DN Password (-W): solicita a senha (ou use –w '***' para fornecê-la no comando)

 

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

Username LDAP Attribute: sAMAccountName

Atributo ID: objectGUID

Classe do objeto: pessoa

Caminho de pesquisa (-b): "dc=powerflex,dc=lab,dc=dell,dc=com"

 

 

Configurações de pesquisa do grupo de testes:

 

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

 

Grupo de teste Filtro 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" "(&(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)))"

 

Usuário de teste do filtro 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" \
"(&(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 Usuários e Computadores do Active Directory. Clique em View e selecione Advanced Features.

O DN é o nome que identifica exclusivamente uma entrada no diretório. O primeiro componente do DN é chamado de RDN (Relative Distinguished Name, nome distinto relativo).

Um DN é composto de pares atributo=valor, separados por vírgulas, por exemplo:

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

Pense neles como "FQDNs para LDAP", o endereço x500 completo 'URL'.

Usuários e computadores do AD podem ser usados para determinar DNs e outros atributos:

 

 

Navegue e clique com o botão direito do mouse na unidade organizacional em que você deseja ler os usuários e, em seguida, selecione Propriedades.

Em OU Properties, selecione a guia Attribute Editor.

Clique em distinguishedName para realçá-lo e, em seguida, clique em Exibir.

Clique com o botão direito do mouse no valor destacado e selecione Copy. 

Clique em Cancel e em OK para fechar as janelas Editor de atributos e Propriedades da unidade organizacional.

 

 

 

 

Exemplo de filtro de usuário LDAP de escopo restrito:

 

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

 

 

Explicação visual:

 

Vincular requisitos do usuário.

 

Esse usuário vinculado deve ter pelo menos permissão para consultar usuários e grupos definidos no servidor LDAP para permitir que o sistema de armazenamento autentique esses usuários.

 

Por padrão, quando um usuário é adicionado à guia segurança do domínio de nível superior em Usuários e Computadores do Active Directory, ele recebe os requisitos padrão somente leitura necessários para a autenticação LDAP na PFMP. por exemplo,

 

 

 

 

FYI: Não precisamos de nosso usuário vinculado ao LDAP, na verdade, "nos" grupos do AD que devemos ler no diretório, precisamos das permissões da guia Segurança de "Leitura".

 

imagem

Requisitos gerais do provedor LDAP da PFMP

 

Endereço: ldaps://ad.ldap.domain:3269 (SSL) OU ldap://ad.ldap.domain:3268 (PLAIN)

DN vinculado: ADNTDOMAIN\serviceaccount ou Bind DN Nome distinto.

Senha do DN vinculado: senha da conta de serviço

Timeout 30000

Username LDAP attribute: sAMAccountName

Atributo ID: objectGUID

Object Class: Person

Caminho de pesquisa: (Nível mais alto que pode consultar todos os grupos, por exemplo, apenas os componentes de domínio/DCs: DC=powerflex,DC=lab,DC=dell,DC=com)

Group Member Attribute: member

Group ID Attribute: cn

Group Object Class: group

Group Search Path:(igual ao User Search Path ou mais granular, se necessário.  Como usaremos um filtro estreito, nosso escopo pode ser amplo sem impacto no desempenho.)

 

#The seguinte entrada fornece pelo menos um grupo para o filtro de grupo LDAP (PFMP 4.6.x+), de modo que o keycloak não pesquisa todos os grupos de todo o diretório:

Group LDAP Filter: (CN=GROUP1)

#Given limitação de 64 caracteres neste campo apenas para a IU da PFMP, devemos usar o Keycloak para contornar isso se quisermos adicionar mais do que isso, por exemplo, 3 grupos diferentes:
 

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

Teste a conexão e, se for bem-sucedida, clique em Enviar.

Por exemplo,

 

 

2. Remoção e limpeza do provedor LDAP

 

Remova os usuários, grupos e o provedor de diretório LDAP da interface do usuário do PFMP como usuário administrador.  Não tente fazer isso como um usuário LDAP, apenas como administrador.

 

ADVERTÊNCIA: Registre a configuração atual do mapeamento de "Provedor de diretório" e "Usuários/grupos remotos" da PFMP (especialmente se você precisar restaurar o mapeamento de função anterior).

Se o mapeamento de grupo/função não for exibido na PFMP (problema conhecido), use as seguintes instruções:

# 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 quaisquer grupos LDAP obsoletos permanecerem no banco de dados keycloak, eles poderão ser excluídos manualmente usando o seguinte processo:

 

Comandos de limpeza de tabela de banco de dados keycloak_group e backup do banco de dados Keycloak.

 

Nota: Às vezes, a limpeza manual do keycloak não é necessária. 

Devemos usar a IU do PFMP para remover o provedor (sempre do PFMP primeiro) e, em seguida, confirmar se ele foi removido do keycloak usando o URL /auth/.

 

 

Como verificar a contagem de grupos LDAP no keycloak de qualquer MVM:

 

# Execute isso para definir a variável primeiro.

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

 

Isso ocorre somente após a primeira remoção na IU da PFMP e somente se os dados do provedor permanecerem no back-end.  Se você estiver usando o PFxM 4.6.0.1, também poderá executar o seguinte método para remover usuários importados na interface do usuário do Keycloak:

  1. Faça log-in usando /auth/ como usuário do Keycloak
  2. A senha do Keycloak é exclusiva para cada instalação e pode ser encontrada em qualquer MVM usando:

 

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

 

3. User federation -> LDAP -> Settings e, no menu suspenso Actions superior direito, selecione Remove Imported.

 

 

 

 

 

 

Com os grupos e os provedores de diretório limpos e removidos, reinicialize os três nós MVM. 

 

 -Nota: Isso só é necessário quando o ambiente é grande e as consultas LDAP se acumulam repetidamente, como visto neste caso nos logs abaixo.

 - Se o ambiente não estiver sobrecarregado com problemas de sincronização e a interface do usuário estiver estável, as reinicializações do MVM geralmente podem ser ignoradas. É uma boa medida em geral, no entanto.

 

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

Reinicialização normal do MVM (deve ser executado um nó de cada vez) Não migre para o próximo nó até verificar se o banco de dados está relatando o modo de espera de sincronização.

 

#As uma prática recomendada, identifique o nó que é o atual líder do Postgres e reinicialize este último.

#Run o seguinte comando em qualquer MVM para listar o status do banco de dados e os nomes de banco de dados associados.

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 esse comando para identificar qual nó MVM está hospedando o pod do banco de dados 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 o MVM, que é a instância do pod Postgres Leader.   Execute "watch kubectl get nodes" para monitorar o status das reinicializações. Esse MVM deve ser o último nó que será reinicializado.

#Exemplo de ordem de reinicialização se pfmp-mgmt-1 for o líder do Postgres. Ajuste a ordem dos comandos abaixo, dependendo de qual MVM é o Postgres Leader.

 

Abra um terminal conectado ao terceiro MVM e execute os dois primeiros comandos.

 

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

#When o nó surgir da reinicialização. Execute o comando a seguir.

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

#Run o seguinte comando até que o banco de dados associado ao MVM3 relate Sync Standby. Nesse ponto, você pode passar para o próximo 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 um terminal conectado ao segundo MVM e execute os dois primeiros comandos.

 

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

#When o nó surgir da reinicialização.  Execute o comando a seguir.

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

#Run o seguinte comando até que o banco de dados associado ao MVM2 relate Sync Standby. Nesse ponto, você pode passar para o próximo 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 o seguinte comando para usar esse MVM como o MVM de monitoramento do status do nó.

'watch kubectl get nodes'

 

Vá para o terminal conectado ao primeiro MVM que está executando 'watch kubectl get nodes'.  Pressione ctrl+c para voltar ao terminal e execute os dois primeiros comandos.

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

#When o nó surgir da reinicialização.  Execute o comando a seguir.

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

#Run o seguinte comando até que o banco de dados associado ao MVM1 relate Sync Standby.  Este MVM era o líder, mas um novo líder assumiria quando o MVM1 fosse 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'

FIM DO PROCEDIMENTO DE REINICIALIZAÇÃO NORMAL DO MVM

Depois que a reinicialização for reiniciada e a interface do usuário for restaurada para a PFMP, faça log-in como administrador e adicione Settings -> Directory Provider seguindo as etapas abaixo:

3. Recriação do provedor LDAP

 

Conforme mencionado na seção de preparação, se houver domínios secundários do AD ou contas confiáveis de domínio do AD em quaisquer grupos que você possa utilizar na PFMP, as portas LDAP 3268 (simples) e 3269 (SSL) do catálogo global (GC) deverão ser usadas.

 

Por exemplo,

 

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. Aplicativo de escopo de usuário e grupo LDAP restrito

 

 

 

Faça log-in usando /auth/ como usuário do Keycloak


Filtro de usuário:

 

 

 

# O filtro LDAP do usuário está ausente na interface do usuário do PFMP, então precisamos usar o seguinte para alterar isso.

#This filtro deve ser aplicado no realm Keycloak PowerFlex (PowerFlex --> federação de usuário --> filtro LDAP do usuário)

 

 

 

Filtro LDAP do usuário:

 

 

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

 

 

 

Salve a alteração.

 

 

 

Explicação desse filtro restrito:

 

 

 

objectCategory é igual a Person.

E

sAMAccountName existe

E

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

Ou

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

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

Federação de usuários -> LDAP -> Configurações e, no menu suspenso Ações no canto superior direito, selecione Remover importado.

 

IU 4.6.x+ Método para excluir mapeamento de grupo.

 

Na configuração LDAP Group Mapping de Membership User LDAP Attribute, também precisamos garantir que um valor correto fornecido como "cn" e que não pode ser alterado na IU do PFMP seja alterado na interface do usuário do Keycloak para DN.

 

 

 

No filtro LDAP do grupo, podemos listar um operador e/ou |   e os CNs de cada grupo, por exemplo.

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