Segurança — CloudBeaver
Configure a autenticação LDAP para o CloudBeaver Community, permitindo que os usuários se autentiquem contra o seu servidor LDAP corporativo em vez de usar contas locais.
Siga as boas práticas de não commitar palavras-passe em ficheiros versionados e utilizar Kubernetes Secrets ou operadores de gestão de secrets.
Pré-requisitos
- Servidor LDAP acessível a partir do cluster (ex.:
ldap.empresa.local:389) - DN de bind com permissão para pesquisar usuários no directório
- Credenciais de bind (usuário e palavra-passe)
- Base DN onde os usuários estão localizados
- Filtro LDAP para localizar usuários por ID
Credenciais e Secrets
kubectl -n <NAMESPACE> create secret generic tdp-cloudbeaver-ldap-bind \
--from-literal=password='<LDAP_BIND_PASSWORD>'
Este Secret armazena a palavra-passe de bind de forma segura, referenciada pelos valores do chart.
Configuração LDAP
A configuração LDAP utiliza os blocos ldap.server, ldap.bind, ldap.userSearch e ldap.extraEnvVars
para injectar CLOUDBEAVER_AUTH_LDAP_BIND_PASSWORD via secretKeyRef.
O chart gera automaticamente o ficheiro cloudbeaver.conf com o bloco authConfigurations
a partir destes campos — não é necessário fornecer JSON manualmente.
tdp-cloudbeaver:
ldap:
enabled: true
server:
host: "<LDAP_HOST>"
port: 389
useSSL: false
useTLS: false
insecureSkipVerify: true
bind:
dn: "<LDAP_BIND_DN>"
passwordSecretName: "tdp-cloudbeaver-ldap-bind"
passwordSecretKey: "password"
userSearch:
baseDN: "<LDAP_USER_BASE_DN>"
filter: "(objectClass=person)"
userIdAttribute: "uid"
extraEnvVars: |
- name: CLOUDBEAVER_AUTH_LDAP_BIND_PASSWORD
valueFrom:
secretKeyRef:
name: tdp-cloudbeaver-ldap-bind
key: password
O chart gera o ficheiro cloudbeaver.conf com o bloco authConfigurations automaticamente,
a partir dos campos ldap.server.*, ldap.bind.* e ldap.userSearch.*.
Não é necessário definir settings manualmente nos valores.
O campo ldap.extraEnvVars injeta a palavra-passe de bind em tempo de execução via secretKeyRef.
Placeholders a substituir:
<LDAP_HOST>: hostname ou IP do servidor LDAP<LDAP_BIND_DN>: DN completo do usuário de bind (ex.:cn=admin,dc=empresa,dc=local)<LDAP_USER_BASE_DN>: Base DN onde os usuários estão (ex.:ou=pessoas,dc=empresa,dc=local)
Instalação ou actualização
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-cloudbeaver \
-n <NAMESPACE> --create-namespace \
-f <VALUES_FILE>
Parâmetros
| Área | Uso | Exemplo |
|---|---|---|
ldap.server.* | Host, porta, SSL/TLS | host: "ldap.empresa.local" |
ldap.bind.* | DN de bind + nome do Secret com palavra-passe | dn: "cn=admin,dc=empresa,dc=local" |
ldap.userSearch.* | Base DN, filtro, atributo de login | baseDN: "ou=pessoas,dc=empresa,dc=local" |
ldap.extraEnvVars | Injecção da palavra-passe de bind via secretKeyRef | Incluir sempre CLOUDBEAVER_AUTH_LDAP_BIND_PASSWORD |
Solução de problemas
Opção LDAP não aparece no login
Verificação 1: confirmar se LDAP está activado
tdp-cloudbeaver:
ldap:
enabled: true
Verificação 2: validar a secção authConfigurations no ConfigMap gerado
kubectl get configmap tdp-cloudbeaver-auto-config -n <NAMESPACE> -o yaml | grep -A 20 "authConfigurations"
Verificação 3: verificar logs do pod
kubectl logs -n <NAMESPACE> -l app.kubernetes.io/name=tdp-cloudbeaver | grep -i ldap
Falha de autenticação LDAP
Verificação 1: testar conectividade ao servidor LDAP
kubectl exec -it -n <NAMESPACE> <POD_NAME> -- nc -zv <LDAP_HOST> 389
Verificação 2: verificar credenciais de bind
ldapwhoami -x -H ldap://<LDAP_HOST>:389 \
-D "<LDAP_BIND_DN>" \
-w '<LDAP_BIND_PASSWORD>'
Verificação 3: validar filtro e base DN
ldapsearch -x -H ldap://<LDAP_HOST>:389 \
-D "<LDAP_BIND_DN>" \
-w '<LDAP_BIND_PASSWORD>' \
-b "<LDAP_USER_BASE_DN>" \
"<LDAP_FILTER>"
Verificação 4: verificar atributo de ID do usuário
ldapsearch -x -H ldap://<LDAP_HOST>:389 \
-D "<LDAP_BIND_DN>" \
-w '<LDAP_BIND_PASSWORD>' \
-b "<LDAP_USER_BASE_DN>" \
"uid=<USERNAME>"
Fluxo de autenticação LDAP
- O usuário selecciona "LDAP" no ecrã de login do CloudBeaver.
- O CloudBeaver realiza um bind ao servidor LDAP usando as credenciais configuradas em
ldap.bind. - Pesquisa o usuário com o filtro definido em
ldap.userSearch.filtere o atributouserIdAttribute. - Autentica o usuário com a palavra-passe introduzida no login.
- Cria ou actualiza o perfil do usuário no CloudBeaver com os atributos LDAP.
Considerações de segurança
- Use LDAPS em produção: habilite
ldap.server.useSSL: truepara encriptar o tráfego LDAP. - Usuário de bind dedicado: use um usuário de bind com permissões mínimas (apenas leitura no directório).
- Segurança de rede: o servidor LDAP deve ser acessível apenas a partir de redes autorizadas.
- Gestão de palavras-passe: nunca commite palavras-passe em Git; use Kubernetes Secrets com Sealed Secrets, External Secrets Operator ou HashiCorp Vault em produção.
insecureSkipVerify: defina comofalseem produção para validar o certificado TLS do servidor LDAP.
LDAP vs autenticação local
O CloudBeaver suporta autenticação local e LDAP simultaneamente:
| Tipo | Usuários | Quando usar |
|---|---|---|
| Local | Usuários criados directamente no CloudBeaver (ex.: admin) | Sempre disponível; necessário para administração inicial |
| LDAP | Usuários do directório corporativo | Ambientes com SSO ou autenticação centralizada |
O usuário administrador local (configurado via initialData.adminName) permanece disponível
independentemente do LDAP.
Mantenha-o como contingência para acesso administrativo caso o LDAP fique indisponível.