Saltar para o conteúdo principal
Versão 3.0.0

Segurança — ClickHouse

Esta página concentra os aspectos de segurança e controle de acesso do tdp-clickhouse: senhas, usuário default, usuário TDP, perfis adicionais e autenticação LDAP.

Para configurações de integração com S3/MinIO e políticas de armazenamento, consulte Integrações — ClickHouse.

Gestão de senhas locais

Usuário default

O usuário default do ClickHouse tem privilégios amplos. Em produção, defina uma senha forte e nunca versione credenciais reais no Git:

tdp-clickhouse:
clickhouse:
defaultUser:
password: "<senha-forte>"
Recomendação

Evite usar o usuário default em aplicações de rotina. Sempre que possível, prefira um usuário dedicado com grants limitados ao mínimo necessário.

Usuário TDP (opcional)

Quando tdpUser.enabled: true, o chart cria um Secret (tdp-clickhouse-tdp-user) e executa um Job pós-instalação para aplicar grants.

tdp-clickhouse:
clickhouse:
tdpUser:
enabled: true
password: "<senha-tdp-user>"

Use este padrão quando quiser separar o acesso técnico das aplicações do acesso administrativo do usuário default.

Perfis e usuários adicionais (extraUsers)

Para perfis e usuários adicionais via XML nativo do ClickHouse, use extraUsers:

tdp-clickhouse:
clickhouse:
extraUsers: |
<clickhouse>
<profiles>
<default>
<query_cache_system_table_handling>ignore</query_cache_system_table_handling>
</default>
</profiles>
</clickhouse>

Controle de acesso do usuário default

Por padrão, o usuário default pode ser exposto de forma ampla se a configuração de rede for permissiva. Em ambientes com exposição externa ou com múltiplas redes, controle explicitamente esse acesso:

tdp-clickhouse:
clickhouse:
defaultUser:
allowExternalAccess: true # false = apenas ligações locais no pod
hostIP: 0.0.0.0/0 # substitua por CIDR restrito em produção

Quando ajustar hostIP

  • Use um CIDR interno quando apenas serviços do cluster devem acessar o ClickHouse.
  • Evite 0.0.0.0/0 em ambientes de produção expostos.
  • Sempre que possível, complemente com políticas de rede do cluster e segmentação por namespace.
Boas práticas em produção
  • Restrinja hostIP ao range CIDR realmente necessário.
  • Não use credenciais compartilhadas entre equipes e aplicações.
  • Armazene senhas em Secrets Kubernetes ou em arquivos privados de valores.

LDAP

O chart suporta autenticação LDAP via extraConfig (XML nativo do ClickHouse). Por padrão, o LDAP fica desabilitado e o values.yaml contém apenas um bloco comentado de exemplo.

Pré-requisito

O servidor LDAP deve estar acessível a partir do cluster Kubernetes.

Criar o Secret de bind LDAP

Antes de instalar ou atualizar o chart com LDAP habilitado, crie o Secret com a senha do usuário de bind:

Terminal input
kubectl -n <namespace> create secret generic tdp-clickhouse-ldap-bind \
--from-literal=LDAP_BIND_PASSWORD='<LDAP_BIND_PASSWORD>'

Configuração via extraConfig e podTemplate

Ative o LDAP descomentando e preenchendo os blocos extraConfig, podTemplate e, opcionalmente, ldapRoleInit num arquivo de valores separado:

tdp-clickhouse:
clickhouse:
extraConfig: |
<yandex>
<user_directories replace="replace">
<ldap>
<server>tdp_ldap</server>
<roles>
<tdp_ldap_role />
</roles>
</ldap>
<local_directory>
<path>/var/lib/clickhouse/access/</path>
</local_directory>
<users_xml>
<path>users.xml</path>
</users_xml>
</user_directories>
<ldap_servers>
<tdp_ldap>
<host>ldap.example.com</host>
<port>389</port>
<bind_dn>uid=svc_clickhouse,ou=users,dc=example,dc=com</bind_dn>
<bind_password from_env="LDAP_BIND_PASSWORD" />
<base_dn>ou=users,dc=example,dc=com</base_dn>
<user_filter>(uid={user})</user_filter>
<enable_tls>0</enable_tls>
</tdp_ldap>
</ldap_servers>
</yandex>

podTemplate:
spec:
containers:
- name: clickhouse
env:
- name: LDAP_BIND_PASSWORD
valueFrom:
secretKeyRef:
name: tdp-clickhouse-ldap-bind
key: LDAP_BIND_PASSWORD

Ajuste host, port, bind_dn, base_dn e user_filter ao seu ambiente.

Atenção ao TLS do LDAP

No exemplo acima, enable_tls: 0 representa apenas um ponto de partida. Se o seu servidor LDAP suportar TLS, prefira ativá-lo em produção e trate certificados conforme a política da sua organização.

Criação automática da role LDAP (ldapRoleInit)

O chart pode criar a role LDAP automaticamente quando ldapRoleInit.enabled: true. Bases de dados e GRANTs continuam a ser geridos manualmente após o deploy:

-- Opcional se ldapRoleInit.enabled=true
CREATE ROLE IF NOT EXISTS tdp_ldap_role;

-- Grants opcionais: aplique apenas o acesso necessário
-- GRANT ALL ON tdp.* TO tdp_ldap_role;
-- GRANT SELECT ON default.* TO tdp_ldap_role;
-- GRANT SELECT ON system.* TO tdp_ldap_role;

Parâmetros LDAP

ParâmetroDescrição
tdp-clickhouse.clickhouse.extraConfigXML com <ldap_servers> e <user_directories>
tdp-clickhouse.clickhouse.podTemplateInjeta LDAP_BIND_PASSWORD via Secret no container
tdp-clickhouse.clickhouse.ldapRoleInit.enabledCria a role LDAP automaticamente no pós-install
Arquivo de valores separado

Coloque blocos LDAP num arquivo separado, por exemplo values-ldap.yaml, para evitar expor configurações sensíveis no repositório principal.