Pentaho 5 autenticando no LDAP (OpenLDAP e AD)

Postado em

A uns anos atrás(2011), escrevi um tutorial autenticando o Pentaho (na época versão 3.7) no LDAP. Acredito que esse tutorial ajudou muitas pessoas, pois até a versão 4 as configurações ainda eram as mesmas.

Na versão 5, algumas configurações mudaram. Então depois de muito procrastinar, eu tomei vergonha na cara e resolvi escrever esse tutorial atualizado na versão 5 do Pentaho. Para ser mais exato, na versão 5.2.

Vou tentar ser o mais didático possível no passo a passo dessa configuração. Vou falar um pouco sobre as configurações do meu servidor LDAP de teste e mostrar algumas diferenças que possam ter em relação ao Active Directory (AD).

Objetivos:

  • Entender a estrutura do LDAP.
  • Configurar o Pentaho BI-Server para autenticar no LDAP.
  • Testar a autenticação como usuário administrador.
  • Testar a autenticação como usuário comum.
  • Fazer alguns testes de acessos a pastas e arquivos através dos grupos do LDAP.

Entender a estrutura do LDAP

Esse servidor LDAP foi configurado exclusivamente para esse tutorial, por isso ele possuí poucos registros e está o mais simples possível para ser entendido.

Estrutura do LDAP:

  • Raiz: dc=domingos,dc=com,dc=br
  • Usuário administrador: admin (cn=admin,dc=domingos, dc=com,dc=br)
  • Unidade Organizacional (OU) dos grupos: GROUPS (ou=GROUPS,dc=domingos,dc=com,dc=br)
  • Unidade Organizacional (OU) dos usuários: USERS (ou=USERS,dc=domingos,dc=com,dc=br)
  • Grupos criados: pentaho-admin, comercial e administrativo:
    • cn=pentaho-admin,ou=GROUPS,dc=domingos,dc=com,dc=br
    • cn=comercial,ou=GROUPS,dc=domingos,dc=com,dc=br
    • cn=administrativo,ou=GROUPS,dc=domingos,dc=com,dc=br
  • Usuários criados: vader, fulano e ciclano:
    • cn=vader,ou=USERS,dc=domingos,dc=com,dc=br
    • cn=fulano,ou=USERS,dc=domingos,dc=com,dc=br
    • cn=ciclano,ou=USERS,dc=domingos,dc=com,dc=br

O usuário vader é o meu usuário administrador, então ele está associado ao grupo pentaho-admin:

dn: cn=pentaho-admin,ou=GROUPS,dc=domingos,dc=com,dc=br
objectClass: posixGroup
gidNumber: 10002
memberUid: vader
structuralObjectClass: posixGroup
cn: pentaho-admin

O usuário fulano está associado ao grupo Comercial e o usuário ciclano ao Administrativo. Com isso quero ilustrar como ficaria se o seu BI-Server tivesse pastas separadas por departamentos, onde cada um só pode ter acesso a sua pasta. Fazendo dessa forma, todos que estiverem no LDAP vão ter acesso ao Pentaho BI-Server, mas só poderão visualizar aquilo que for permitido ao seu grupo ou diretamente ao seu usuário.

Uma outra forma de fazer, é criar um grupo específico para os usuários comuns do Pentaho, então somente que estiver naquele grupo terá acesso ao Pentaho. Só que dessa forma fica mais complicado de fazer as restrições segmentanda por grupo, teria que ser somente por usuário. Um exemplo seria se eu criasse um grupo chamado pentaho-users e os usuários fulano e ciclano estivessem associados a ele. Ficaria da seguinte forma no LDAP:

dn: cn=pentaho-users,ou=GROUPS,dc=domingos,dc=com,dc=br
objectClass: posixGroup
gidNumber: 10001
memberUid: fulano
memberUid: ciclano
structuralObjectClass: posixGroup
cn: pentaho-users

Nos arquivos de configuração do Pentaho, também vou dar exemplos caso decidam fazer dessa forma com um único grupo.

Configurar o Pentaho BI-Server para autenticar no LDAP

Aqui é o passo a passo da configuração do BI-Server no LDAP.

Os arquivos que vão ser configurados, estão em biserver-ce/pentaho-solutions/system. Os arquivos são:

  • properties
  • applicationContext-security-ldap.properties
  • applicationContext-spring-security.xml
  • spring.properties
  • data-access/settings.xml

1. properties

Nesse arquivo vamos mudar o modo de autenticação.

De:
provider=jackrabbit

Para:
provider=ldap

2. applicationContext-security-ldap.properties

Devemos configurar esse arquivo conforme o nosso servidor LDAP. Segue o exemplo baseado no meu LDAP onde vou dar alguns detalhes:

contextSource.providerUrl=ldap\://localhost\:389
contextSource.userDn=cn\=admin,dc\=domingos,dc\=com,dc\=br
contextSource.password=123456
userSearch.searchBase=ou\=USERS,dc\=domingos,dc\=com,dc\=br
userSearch.searchFilter=(cn\={0})

populator.convertToUpperCase=false
populator.groupRoleAttribute=cn
populator.groupSearchBase=ou\=GROUPS,dc\=domingos,dc\=com,dc\=br
populator.groupSearchFilter=(memberUid\={1})
populator.rolePrefix=
populator.searchSubtree=true

allAuthoritiesSearch.roleAttribute=cn
allAuthoritiesSearch.searchBase=ou\=GROUPS,dc\=domingos,dc\=com,dc\=br
allAuthoritiesSearch.searchFilter=(objectClass\=posixGroup)

allUsernamesSearch.usernameAttribute=cn
allUsernamesSearch.searchBase=ou\=USERS
allUsernamesSearch.searchFilter=(objectClass\=posixAccount)

adminRole=cn\=pentaho-admin,ou\=GROUPS,dc\=domingos,dc\=com,dc\=br
adminUser=cn\=vader,ou\=USERS,dc\=domingos,dc\=com,dc\=br

Observações importantes: 

– contextSource.providerUrl=ldap\://localhost\:389: Endereço de onde está o servidor LDAP. No meu caso ele está em localhost e rodando na porta 389. Normalmente o servidor LDAP está em outra máquina, então coloque o IP da máquina e a porta que ele está rodando.

– userSearch.searchFilter=(cn\={0}): Esse é o atributo do LDAP que ele procurará para achar o nome do usuário. No caso do meu LDAP, o atributo é o CN, e o número zero indica para ele procurar o DN completo do usuário.
Para quem utilizado o Active Directory, normalmente o atributo utilizado é o (sAMAccountName\={0})

– populator.groupSearchFilter=(memberUid\={1}): O campo dentro dos grupos que identificam os usuários pertencentes ao grupo é o atributo memberUid. Colocando 1 ele procura somente pelo nome do usuário, se deixasse em 0 ele procuraria pelo DN completo. Na seção acima foi destacado que no meu LDAP os usuários estão no atributo memberUid, mas possa ser que seu LDAP/AD, use outro, é muito comum no AD ele usar o atributo member.

adminRole=cn\=pentaho-admin,ou\=GROUPS,dc\=domingos,dc\=com,dc\=br e adminUser=cn\=vader,ou\=USERS,dc\=domingos,dc\=com,dc\=br: Essas são as seções onde são configurados o grupo e o usuário admin do Pentaho. Fiquem atentos para configurar o grupo e usuário correto.

3. applicationContext-spring-security.xml

 Esse arquivo é o que define o que os grupos podem acessar. E nele temos um ponto muito específico. Digo isso, pois se seguirem o exemplo de usar os grupos já existente no LDAP, para fazer uma separação por setores, não é necessário mudar nada nesse arquivo.

Exemplo do arquivo:

….
\A/content/common-ui/resources/web/(.+/)*.+\.js.*\Z=Anonymous,Authenticated
\A/.*require-cfg.js.*\Z=Anonymous,Authenticated
\A/.*require-js-cfg.js.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/require.js.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/require-cfg.js.*\Z=Anonymous,Authenticated
\A/content/data-access/resources/gwt/.*css\Z=Anonymous,Authenticated
\A/webcontext.js.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/cache/cache-service.js.*\Z=Anonymous,Authenticated
\A/cacheexpirationservice.*\Z=Anonymous,Authenticated
\A/js/theme.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/themes/.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/dojo/djconfig.js.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/angular-directives/angular-directives.css\Z=Anonymous,Authenticated
\A/content/pentaho-mobile/resources/.*\Z=Anonymous,Authenticated
\A/docs/.*\Z=Anonymous,Authenticated
\A/mantlelogin/.*\Z=Anonymous,Authenticated
\A/mantle/mantleloginservice/*\Z=Anonymous,Authenticated
\A/mantle/.*\Z=Authenticated
\A/welcome/.*\Z=Anonymous,Authenticated
\A/public/.*\Z=Anonymous,Authenticated
\A/login.*\Z=Anonymous,Authenticated
\A/ping/alive.gif.*\Z=Anonymous,Authenticated
\A/j_spring_security_check.*\Z=Anonymous,Authenticated
\A/getimage.*\Z=Anonymous,Authenticated
\A/getresource.*\Z=Anonymous,Authenticated
\A/admin.*\Z=Admin
\A/auditreport.*\Z=Admin
\A/auditreportlist.*\Z=Admin
\A/versioncontrol.*\Z=Admin
\A/propertieseditor.*\Z=Admin
\A/propertiespanel.*\Z=Admin
\A/subscriptionadmin.*\Z=Admin
\A/resetrepository.*\Z=Admin

O grupo Authenticated do Pentaho BI-Server, é o grupo padrão que todos os usuários pertencem para poder autenticar. Como vamos usar os nosso grupos do LDAP para fazer uma separação departamental, não precisamos modificar esse arquivo. Mas caso vocês optem por usar o grupo único, o pentaho-users que eu dei de exemplo, devem substituir todos os Authenticated por pentaho-users. Sendo assim, somente os usuários desse grupo teriam acesso ao Pentaho. Exemplo:

….
\A/content/common-ui/resources/web/(.+/)*.+\.js.*\Z=Anonymous,pentaho-users
\A/.*require-cfg.js.*\Z=Anonymous,pentaho-users
\A/.*require-js-cfg.js.*\Z=Anonymous,pentaho-users
\A/content/common-ui/resources/web/require.js.*\Z=Anonymous,pentaho-users
\A/content/common-ui/resources/web/require-cfg.js.*\Z=Anonymous,pentaho-users
\A/content/data-access/resources/gwt/.*css\Z=Anonymous,pentaho-users
\A/webcontext.js.*\Z=Anonymous,pentaho-users

Outro ponto importante nesse arquivo, é o grupo Admin. ELE NÃO DEVE SER ALTERADO.
Nas versões 3 e 4 do Pentaho BI-Server, era necessário trocar esse grupo Admin para o grupo de administrador criado no LDAP, no meu caso seria o pentaho-admin. Só que nessa versão essa palavra Admin é reservada e ela se refere a configuração que foi feita em applicationContext-security-ldap.properties no item adminRole=cn\=pentaho-admin,ou\=GROUPS,dc\=domingos,dc\=com,dc\=br

Resumindo, se for usar os grupos que já existem no LDAP, não altere esse arquivo. Caso for usar um grupo único de usuários comuns criado no LDAP, só altere o Authenticated para esse grupo. Não mexa nas linhas onde tem o grupo Admin.

4. spring.properties

Nesse arquivo, devemos informar quem é o nosso usuário admin do Pentaho.

singleTenantAdminDefaultUserName=vader
singleTenantAdminUserName=vader
singleTenantAdminDefaultAuthorityName=Administrator
singleTenantAdminAuthorityName=Administrator
repositoryAdminUsername=pentahoRepoAdmin
singleTenantAuthenticatedAuthorityName=Authenticated
singleTenantAnonymousAuthorityName=Anonymous
superAdminAuthorityName=SysAdmin
superAdminUserName=super
systemTenantAdminUserName=system
systemTenantAdminPassword=cGFzc3dvcmQ=

Caso tenham optado por usar o grupo único (pentaho-users), é necessário trocar o parâmetro singleTenantAuthenticatedAuthorityName de Authenticated para pentaho-users.

5. data-access/settings.xml

Nesse arquivo, altere um parâmetro para o usuário administrador do Penthao:

<data-access-view-users>vader</data-access-view-users>

E caso use o grupo único, troque tudo o que tiver Authenticated para pentaho-users.

Após essas configurações, podemos reiniciar o BI-Server.

Importante 1: Para validar esse processo e pegar o problema quando a autenticação LDAP não funciona, eu sempre ativo o DEBUG dos logs no log4j do Pentaho. O arquivo do log4j fica em biserver-ce/tomcat/webapps/pentaho/WEB-INF/classes, e é o arquivo log4j.xml.

Nesse arquivo, eu coloco em DEBUG os seguintes parâmetros:

<category name=”org.springframework”>
<priority value=”DEBUG“/>
</category>

<category name=”org.springframework.security”>
<priority value=”DEBUG“/>
</category>

Com isso, quando reiniciar o Pentaho BI-Server e tentar fazer a autenticação, poderá ser visto o passo a passo da autenticação para possível resolução de problemas. Lembrem de desativar esse DEBUG depois que estiver funcionando, pois ficará gerando log desnecessário.

Importante 2: Se a sua estrutura LDAP tiver mais que 1.000 usuários, pode ser que seja necessário alterar o parâmetro MaxPageSize do seu servidor LDAP (AD ou outro), para que todos os usuários consigam logar no Pentaho e apareçam na lista de permissões.

Testar a autenticação como usuário administrador

 Após reiniciar o BI-Server, podemos fazer o teste de autenticação com o usuário administrador, que no meu caso é o vader.

1. Tela de login:

ScreenHunter_01 Jan. 09 16.09

2. Logado como o usuário vader:

ScreenHunter_02 Jan. 09 16.11

Reparem que o usuário vader como administrador, tem acesso a todos os menus.

Testar a autenticação como usuário comum

1. Logado como usuário fulano

ScreenHunter_03 Jan. 09 16.14

Reparem que o usuário fulano tem acesso restrito nos menus.

Testes de acessos a pastas e arquivos através dos grupos do LDAP

Com usuário vader, podemos criar uma pasta Comercial e associar que somente o grupo comercial tenha acesso a ela. Dessa forma, o usuário ciclano que é do Administrativo, não teria acesso a ela.

1. Criar a pasta e dar o acesso.

ScreenHunter_04 Jan. 09 16.20

2. Dessa forma, o usuário fulano logado terá a seguinte visualização:

ScreenHunter_05 Jan. 09 16.21

3. E o usuário ciclano que é do grupo Administrativo, terá a seguinte visualização:

ScreenHunter_06 Jan. 09 16.25

Com isso finalizamos esse tutorial que mostra a configuração do Pentaho BI-Server para autenticar em um LDAP.

Espero que seja de grande ajuda para quem precisa.

Abraços.

14 comentários em “Pentaho 5 autenticando no LDAP (OpenLDAP e AD)

    Kleyton R. Ribeiro disse:
    19 de abril de 2016 às 18:42

    Olá, esse seu tutorial foi na visada certa, reiniciou o server e logou pelo AD, apenas tive um problema de permissão: nenhum loga como administrador. Talvez seja pela estrutura do AD: temos uma floresta com muitas árvores, é o AD do Estado e ramificações para cada elemento do Governo. Veja como eu fiz teria como me dar uma luz?

    Kleyton R. Ribeiro disse:
    19 de abril de 2016 às 18:43

    contextSource.providerUrl=ldap\://s1044.sejusp.ms\:389
    contextSource.userDn=jasoarez@sejusp
    contextSource.password=jasoarez

    userSearch.searchBase=ou\=CBMMS,dc\=SEJUSP,dc\=MS
    userSearch.searchFilter= (sAMAccountName\={0})

    populator.convertToUpperCase=false
    populator.groupRoleAttribute=cn
    populator.groupSearchBase=ou\=CBMMS,dc\=SEJUSP,dc\=MS
    populator.groupSearchFilter=(memberOf\={1})
    populator.rolePrefix=
    populator.searchSubtree=true

    allAuthoritiesSearch.roleAttribute=cn
    allAuthoritiesSearch.searchBase=ou\=CBMMS,dc\=SEJUSP,dc\=MS
    allAuthoritiesSearch.searchFilter=(objectClass\=posixGroup)

    allUsernamesSearch.usernameAttribute=cn
    allUsernamesSearch.searchBase=ou\=CBMMS,dc\=SEJUSP,dc\=MS
    allUsernamesSearch.searchFilter=(objectClass\=posixAccount)

    adminRole=cn\=grp_Desenvolvimento,ou\=Grupos,ou\=Informatica – CBMMS,ou\=Comando Geral do Corpo de Bombeiros,ou\=CBMMS,dc\=SEJUSP,dc\=MS
    adminUser=krr
    #cn\=Kleyton Rodrigues Ribeiro,ou\=Usuários,ou\=Informatica – CBMMS,ou\=Comando Geral do Corpo de Bombeiros,ou\=CBMMS,dc\=SEJUSP,dc\=MS
    *********************************************************************************
    Gostaria que todos na equipe de desenvolvimento fosse admin

    *********************************************************************************
    #Tue Mar 26 17:50:44 EDT 2013
    singleTenantAdminDefaultUserName=krr
    singleTenantAdminUserName=krr
    singleTenantAdminDefaultAuthorityName=Administrator
    singleTenantAdminAuthorityName=Administrator
    repositoryAdminUsername=pentahoRepoAdmin
    singleTenantAuthenticatedAuthorityName=Authenticated
    singleTenantAnonymousAuthorityName=Anonymous
    superAdminAuthorityName=SysAdmin
    superAdminUserName=super
    systemTenantAdminUserName=system
    systemTenantAdminPassword=cGFzc3dvcmQ=
    cache-size=100
    cache-ttl=300
    # This is the property to enable/disable multi byte encoding in the repository
    # This property can only be changed to “true” if you are installing it fresh. For upgrades,
    # this must be set to false.
    useMultiByteEncoding=false
    *********************************************************************************

    Kleyton R. Ribeiro disse:
    20 de abril de 2016 às 16:22

    Muito obrigado, já resolvi. O item 5 e 4 são diferentes para a versão 5.4. Foi de grande ajuda.

      Marcos Lopes disse:
      17 de maio de 2016 às 13:33

      Como resolveu? Está assim comigo também?

        Marcos Lopes disse:
        19 de maio de 2016 às 11:05

        Fantástico!!! Funcionou perfeitamente. Muito Obrigado!

    Fleyzer disse:
    17 de maio de 2016 às 15:19

    Cesar, você verificou se as permissões se estendem aos cubos do Saiku?
    Consegui autenticar via AD e utilizo os grupos que criei para liberar acesso aos diretórios dos dashboards, porém, não consigo mais enxergar os cubos para criar relatórios no Saiku.
    A versão que utilizo é a Pentaho CE 5.0.

    Wagner G.C. disse:
    20 de junho de 2016 às 18:55

    Olá!… Vamos ver se você responde :-)… é possível integrar LDAP ou o AD apenas no repositório do KETTLE?… Não quero instalar toda a suíte. Obrigado! 🙂

      Cesar respondido:
      21 de junho de 2016 às 9:08

      Bom dia Wagner.

      Nunca tentei fazer isso somente no repositório do Kettle. Infelizmente não vou poder te ajudar
      nessa.

      Abraços

    Fleyzer disse:
    29 de junho de 2016 às 11:10

    Pessoal, no meu AD tenho alguns usuários em OU’s diferentes, como posso contornar essa situação?

    contextSource.providerUrl=ldap\://s00win01.unimedfortaleza.com.br\:389/DC\=unimedfortaleza,DC\=com,DC\=br
    contextSource.userDn=CN\=pentahoad,OU\=Usuarios,DC\=unimedfortaleza,DC\=com,DC\=br
    contextSource.password=*************

    userSearch.searchBase=OU\=Usuarios
    userSearch.searchFilter=(sAMAccountName\={0})

    populator.convertToUpperCase=false
    populator.groupRoleAttribute=CN
    populator.groupSearchBase=OU\=Usuarios
    populator.groupSearchFilter=(member:1.2.840.113556.1.4.1941:\={0})
    populator.rolePrefix=
    populator.searchSubtree=true

    allAuthoritiesSearch.roleAttribute=CN
    allAuthoritiesSearch.searchBase=OU\=Usuarios
    allAuthoritiesSearch.searchFilter=(objectCategory=group)

    allUsernamesSearch.usernameAttribute=sAMAccountName
    allUsernamesSearch.searchBase=OU\=Usuarios
    allUsernamesSearch.searchFilter=(&(objectClass\=user)(memberOf\=CN\=pentahousers,OU\=Usuarios,DC\=unimedfortaleza,DC\=com,DC\=br))

    adminRole=DC\=pentahoadmin,OU\=Usuarios,DC\=unimedfortaleza,DC\=com,DC\=br
    adminUser=(sAMAccountName\={1})

    Alguns usuários estão em uma OU chamada MobileUsersPac, o que impede do Pentaho localiza-los.

      Fleyzer disse:
      29 de junho de 2016 às 13:33

      Kleyton já tentei mas o serviço não funciona com esse parâmetro.

    Fleyzer disse:
    4 de julho de 2016 às 8:28

    Kleyton todos os seus usuários encontram-se em uma mesma OU?

    Anderson da Silva Moreira disse:
    25 de setembro de 2017 às 16:35

    Boa tarde!
    Parabéns pelo tutorial.
    Estou tentando executar a configuração no Pentaho BA Server 7.1 e não localizo o arquivo properties que altera a forma de autenticação.
    Pode me ajudar?
    Obrigado!

      Cesar respondido:
      25 de setembro de 2017 às 16:44

      Boa Tarde.

      Infelizmente não tive tempo ainda de atualizar o tutorial para a versão 7 do Pentaho. A cada versão muda alguma coisa. Mas está no meu TO DO para fazer isso. Nesse momento, não consigo te ajudar em muita coisa, pois não fiz o procedimento no 7 ainda.

      Abraços

    Josimar Guedes disse:
    13 de dezembro de 2017 às 9:42

    Bom dia

    Alguém sabe como fazer alteração na janela procurar arquivos no pentaho, queria mudar a ordem das janelas e aumentar o tanho.

Deixar mensagem para Fleyzer Cancelar resposta