Saltar para o conteúdo principal
Versão 3.0

Segurança - Trino

ChartVersion3.0.1TypeapplicationAppVersion478
CompatibilidadeKubernetes1.32+OpenShift4.19+Rancher2.10.x+

Visão geral

O chart tdp-trino concentra a segurança em três frentes principais.
A primeira é a autenticação LDAP, que muda o acesso do Trino de HTTP sem autenticação para HTTPS com PASSWORD authentication.
A segunda é o bloco trinoCerts, usado para organizar keystores, certificados e materiais TLS em Secret, PVC e Job de cópia.
A terceira é o controle de acesso com Apache Ranger, configurado por tdp-trino.accessControl e arquivos XML adicionais no coordinator.

A ideia prática é simples: LDAP autentica quem entra, HTTPS protege o transporte e Ranger decide o que cada usuário pode acessar.
Quando LDAP ou Ranger estiverem ativos, trate certificados, senhas e shared secrets como dependências obrigatórias do deploy.

Modos de operação

O chart foi desenhado para alternar entre um modo simples de desenvolvimento e um modo autenticado.
Essa diferença é controlada principalmente por ldap.enabled e pelos valores de HTTPS/autenticação em tdp-trino.server.config.

Modoldap.enabledPortaAutenticaçãoCertificados
HTTP sem LDAPfalse8080Não exige loginNão monta certificados por padrão
HTTPS com LDAPtrue8443PASSWORD com LDAPMonta keystore e configura shared secret

Com ldap.enabled: false, o chart usa HTTP na porta 8080 e não exige autenticação.
Esse modo é útil para teste controlado, mas não deve ser exposto fora de ambientes restritos.

Com ldap.enabled: true, o acesso passa para HTTPS na porta 8443.
Nesse modo, o Trino precisa de keystore, senha do keystore, internal-communication.shared-secret e um arquivo password-authenticator.properties apontando para o LDAP.

Pré-requisitos

  • Servidor LDAP acessível a partir do namespace do Trino, quando LDAP for usado.
  • Keystore JKS válido para HTTPS e senha correspondente.
  • Secret Kubernetes com os arquivos de certificado antes do deploy.
  • StorageClass disponível se trinoCerts.pvc.enabled: true.
  • Ranger implantado e acessível quando access-control.name=ranger for usado.
  • Conectividade do coordinator com LDAP, Ranger e fontes de dados protegidas.

Certificados TLS do Trino (trinoCerts)

O bloco trinoCerts prepara os materiais de certificado usados pelo Trino quando o ambiente exige HTTPS, LDAP ou integrações como Ranger.
Ele não gera certificados automaticamente; ele organiza como arquivos já existentes serão disponibilizados aos pods.

O Secret guarda arquivos sensíveis, como keystores JKS.
O PVC fornece um volume persistente para reutilizar esses arquivos entre etapas do Helm.
O copyJob roda como hook de pre-install e pre-upgrade para copiar arquivos do Secret para o PVC antes da instalação ou atualização.

ParâmetroUsoPadrão
trinoCerts.pvc.enabledCria PVC para certificadosfalse
trinoCerts.pvc.nameNome do PVCtrino-certs-pvc
trinoCerts.pvc.sizeTamanho do PVC1Gi
trinoCerts.secret.enabledMonta Secret com certificados no Jobfalse
trinoCerts.secret.nameNome do Secret de certificadostdp-trino-certs-secret
trinoCerts.copyJob.enabledExecuta Job para preparar o PVCfalse

Modelo de Secret para LDAP com keystore:

kubectl -n <NAMESPACE> create secret generic tdp-trino-certs-secret \
--from-file=keystore.jks=<LOCAL_PATH>/keystore.jks

Exemplo de Secret para fluxo com PVC e Ranger:

kubectl -n <NAMESPACE> create secret generic tdp-trino-certs-secret \
--from-file=trino_cert.jks=<LOCAL_PATH>/trino_cert.jks

Exemplo de preparação do PVC por copyJob:

trinoCerts:
pvc:
enabled: true
size: "1Gi"
secret:
enabled: true
name: "tdp-trino-certs-secret"
copyJob:
enabled: true

LDAP habilitado

LDAP é usado pelo Trino como autenticador de senha.
No chart, habilitar LDAP implica também habilitar HTTPS, porque credenciais de usuário não devem trafegar por HTTP simples.

O arquivo password-authenticator.properties define como o Trino consulta o diretório LDAP.
O userBindPattern é o molde do DN usado no bind; ${USER} é substituído pelo usuário informado no cliente Trino.

Modelo de configuração:

ldap:
enabled: true
server:
url: "ldap://<LDAP_HOST>:389"
insecure: true
auth:
userBindPattern: "uid=${USER},cn=users,cn=accounts,dc=<LDAP_DOMAIN>,dc=com,dc=br"

tdp-trino:
server:
config:
https:
enabled: true
port: 8443
keystore:
path: "/etc/trino/certs/keystore.jks"
authenticationType: "PASSWORD"
additionalConfigProperties:
- "internal-communication.shared-secret=<SHARED_SECRET>"
- "http-server.https.keystore.key=<KEYSTORE_PASSWORD>"
coordinator:
additionalVolumes:
- name: trino-certs
secret:
secretName: tdp-trino-certs-secret
additionalVolumeMounts:
- name: trino-certs
mountPath: /etc/trino/certs
readOnly: true
additionalConfigFiles:
password-authenticator.properties: |
password-authenticator.name=ldap
ldap.url=ldap://<LDAP_HOST>:389
ldap.allow-insecure=true
ldap.user-bind-pattern=uid=${USER},cn=users,cn=accounts,dc=<LDAP_DOMAIN>,dc=com,dc=br
ldap.cache-ttl=1h
ldap.timeout.connect=1m
ldap.timeout.read=1m

Substitua os placeholders antes de instalar.
<LDAP_HOST> é o endereço do LDAP visto de dentro do cluster.
<LDAP_DOMAIN> representa os componentes do DN do diretório.
<SHARED_SECRET> deve ser um valor forte para comunicação interna do Trino.
<KEYSTORE_PASSWORD> deve corresponder à senha do keystore usado por HTTPS.

Para desabilitar LDAP e voltar ao modo HTTP, remova a configuração LDAP específica e deixe ldap.enabled: false.
Depois do upgrade, valide se os pods reiniciaram e se o cliente usa a porta 8080.

Para habilitar LDAP, crie primeiro o Secret de certificados, aplique os valores de LDAP/HTTPS e use a porta 8443 no cliente.
Depois do upgrade, confira o ConfigMap gerado, os mounts do coordinator e os logs de autenticação.

Ranger

Apache Ranger adiciona controle de acesso centralizado ao Trino via plugin de autorização.

A integração usa tdp-trino.accessControl para ativar o plugin Ranger.
Os arquivos extras em tdp-trino.coordinator.additionalConfigFiles entregam a configuração de política, auditoria e SSL que o plugin lê no startup.

Use o exemplo abaixo como modelo de estrutura.
Ele mostra onde ficam os pontos principais sem trazer XML completo para a página.

trinoCerts:
pvc:
enabled: true
size: "1Gi"
secret:
enabled: true
name: "tdp-trino-certs-secret"
copyJob:
enabled: true

tdp-trino:
server:
config:
https:
enabled: true
port: 8443
keystore:
path: "/etc/trino/ssl/trino_cert.jks"
key: "<KEYSTORE_PASSWORD>"
authenticationType: "PASSWORD"

accessControl:
type: properties
properties: |
access-control.name=ranger
ranger.service.name=dev_trino
ranger.plugin.config.resource=/etc/trino/ranger-trino-security.xml,/etc/trino/ranger-trino-audit.xml,/etc/trino/ranger-policymgr-ssl.xml

coordinator:
additionalVolumes:
- name: trino-certs
persistentVolumeClaim:
claimName: trino-certs-pvc
additionalVolumeMounts:
- name: trino-certs
mountPath: /etc/trino/ssl
additionalConfigFiles:
ranger-trino-security.xml: |
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>ranger.plugin.trino.policy.rest.url</name>
<value>http://ranger-<NAMESPACE>.svc.cluster.local:6180</value>
</property>
<property>
<name>ranger.plugin.trino.super.users</name>
<value>admin</value>
</property>
</configuration>
ranger-trino-audit.xml: |
<configuration>
<!-- Configuração de auditoria do plugin -->
</configuration>
ranger-policymgr-ssl.xml: |
<configuration>
<!-- Truststore/keystore para comunicação com Ranger -->
</configuration>

O valor ranger.service.name deve ser o mesmo serviço cadastrado na interface do Ranger.
Se os nomes não baterem, o plugin pode iniciar, mas as políticas não serão aplicadas ao serviço esperado.

Use superusuários com cuidado.
Uma conta listada como superusuário passa pelas políticas com privilégio amplo, então mantenha a lista curta e auditável.

Quando houver auditoria externa ou SSL mútuo, preencha os XMLs com os destinos, truststores e credenciais exigidos pelo ambiente.
Mantenha senhas e arquivos sensíveis fora do repositório.

Conectar com cliente Trino

Modelo para HTTP sem LDAP:

HTTP sem LDAP
kubectl -n <NAMESPACE> port-forward svc/<RELEASE_NAME> 8080:8080 &
trino --server http://localhost:8080

Modelo para HTTPS com LDAP:

HTTPS com LDAP
kubectl -n <NAMESPACE> port-forward svc/<RELEASE_NAME> 8443:8443 &
trino --server https://localhost:8443 \
--user <LDAP_USER> \
--password \
--insecure

Exemplo:

HTTP sem LDAP
kubectl port-forward -n tdp-project svc/tdp-trino 8080:8080 &
trino --server http://localhost:8080
HTTPS com LDAP
kubectl port-forward -n tdp-project svc/tdp-trino 8443:8443 &
trino --server https://localhost:8443 \
--user your-ldap-username \
--password \
--insecure

Em produção, prefira validar a cadeia de certificado em vez de usar --insecure.
Use --insecure apenas para depuração controlada ou certificados de laboratório.

Parâmetros principais

ParâmetroPapelPadrãoQuando alterar
ldap.enabledLiga ou desliga o modo LDAPfalseAmbientes com autenticação corporativa
tdp-trino.server.config.https.enabledHabilita HTTPS no TrinofalseLDAP, Ranger ou exposição segura
tdp-trino.server.config.https.portPorta HTTPS do Trino8443Quando o ambiente padronizar outra porta
tdp-trino.server.config.https.keystore.pathCaminho do keystore dentro do podvazioSempre que HTTPS for usado
tdp-trino.server.config.authenticationTypeTipo de autenticação do TrinovazioUse PASSWORD para LDAP ou arquivo de senhas
tdp-trino.additionalConfigPropertiesPropriedades extras do Trino[]Shared secret, HTTPS interno e ajustes avançados
tdp-trino.coordinator.additionalVolumesVolumes extras no coordinator[]Montar Secret ou PVC com certificados
tdp-trino.coordinator.additionalConfigFilesArquivos extras no coordinator{}LDAP, password file e XMLs do Ranger
tdp-trino.accessControlConfiguração de autorização{}Apache Ranger ou outro controle suportado
trinoCerts.*Preparação de certificadosdesabilitadoHTTPS, LDAP, Ranger ou SSL mútuo

Solução de problemas

SituaçãoO que verificar
Pod não sobe com LDAPCaminho do keystore, senha do keystore, Secret, mounts e authenticationType
Login LDAP falhaURL LDAP, userBindPattern, conectividade, certificado e permissões do usuário de bind
Cliente não conectaPorta correta: 8080 para HTTP, 8443 para HTTPS
Erro de certificadoNome do arquivo no Secret, mountPath e path configurado no Trino
Ranger não aplica políticasranger.service.name, URL do Ranger, XMLs no coordinator e usuário autenticado
PVC não é criadotrinoCerts.pvc.enabled, StorageClass e eventos do namespace

Ao trocar de LDAP para HTTP, remova os blocos específicos de LDAP/HTTPS para evitar configuração residual.
Depois valide se o Service e o cliente voltaram para a porta 8080.

Ao trocar de HTTP para LDAP, crie o Secret antes do helm upgrade.
Depois valide o ConfigMap, os volumes montados e o acesso pela porta 8443.

Boas práticas

  • Use LDAPS na porta 636 em produção sempre que o diretório suportar.
  • Não versionar keystores, senhas, hashes reais ou shared secrets.
  • Rotacione senhas de keystore e shared secrets periodicamente.
  • Restrinja permissões do usuário de bind LDAP.
  • Mantenha a lista de superusuários do Ranger mínima.
  • Monitore logs de autenticação do Trino e auditoria do Ranger.
  • Deixe ldap.enabled: false apenas em ambientes controlados de desenvolvimento ou teste.