Saltar para o conteúdo principal
Versão 3.0

Segurança — Superset

ChartVersion3.0.1TypeapplicationAppVersion5.0.0
CompatibilidadeKubernetes1.32+OpenShift4.19+Rancher2.10.x+

Visão geral

O chart tdp-superset concentra a segurança em três frentes principais.
A primeira é a SUPERSET_SECRET_KEY, usada pelo Superset para proteger sessões, cookies e dados sensíveis persistidos na base de dados de metadados.
A segunda é a proteção das credenciais do PostgreSQL de metadados, incluindo o Secret gerido pelo chart e o Secret administrativo usado no bootstrap externo.
A terceira é a autenticação LDAP, configurada pelo bloco tdp-superset.ldap e integrada ao mapeamento de roles do Superset.

A ideia prática é simples: a chave protege o estado interno da aplicação, o PostgreSQL guarda os metadados e o LDAP controla quem entra.
Quando LDAP ou PostgreSQL externo estiverem ativos, trate Secrets, palavras-passe e dependências de rede como pré-requisitos do deploy.

Modos de operação

O chart pode operar com usuários internos do Superset ou com autenticação LDAP.
Essa diferença é controlada principalmente por tdp-superset.ldap.enabled e pelos valores de inicialização em tdp-superset.init.

Modotdp-superset.ldap.enabledAutenticaçãoUsuários e roles
Usuários internosfalseLogin gerido pelo SupersetUsuário inicial criado pelo bloco tdp-superset.init
LDAPtrueLogin via diretório LDAPUsuários registados conforme ldap.registration.* e roles mapeadas por ldap.roleMapping

Com LDAP desabilitado, o usuário administrador inicial vem do bloco tdp-superset.init.
Esse modo é útil para instalação simples, testes controlados ou ambientes onde o acesso é restrito por outra camada.

Com LDAP habilitado, o Superset usa o diretório corporativo como fornecedor de autenticação.
Nesse modo, o Secret com a palavra-passe do usuário de bind precisa existir antes do deploy, e as roles devem ser planeadas para evitar concessão ampla de permissões.

Pré-requisitos

  • SUPERSET_SECRET_KEY forte definida antes do primeiro deploy.
  • Secret de bind LDAP criado no namespace quando tdp-superset.ldap.enabled: true.
  • Servidor LDAP acessível a partir do namespace do Superset quando LDAP for usado.
  • PostgreSQL de metadados acessível e Secret administrativo disponível quando usar base de dados externa.
  • Políticas de rede e exposição configuradas para limitar acesso à interface do Superset.

SUPERSET_SECRET_KEY

A chave tdp-superset.extraSecretEnv.SUPERSET_SECRET_KEY é obrigatória.
O Superset usa esta chave para cifrar sessões, cookies e dados sensíveis persistidos na base de dados de metadados.
Gere um valor com entropia adequada e injete via Secret do Kubernetes ou ferramenta de gestão de segredos.
Não versione esta chave em texto claro.

Modelo para gerar um valor:

openssl rand -base64 42

Rodar esta chave sem planeamento invalida sessões ativas e dados já cifrados com o valor anterior.
Trate-a com o mesmo rigor de uma palavra-passe de infraestrutura.

PostgreSQL de metadados

O chart gere um Secret para a palavra-passe do usuário da base de dados de metadados do Superset.
O nome e a chave do Secret são controlados por tdp-superset.postgresqlSecrets.name e tdp-superset.postgresqlSecrets.passwordKey.

Quando TDP-Settings.externalDatabase.enabled=true, o job de bootstrap gera a palavra-passe automaticamente e armazena-a no Secret.
Modelo para consultar o Secret gerado:

kubectl -n <NAMESPACE> get secret <RELEASE_NAME>-postgresql-secrets -o jsonpath='{.data.superset-postgresql-password}' | base64 -d

Para PostgreSQL externo, o job db-create-job lê a palavra-passe do administrador num Secret com o nome <RELEASE_NAME> e a chave postgres-password.
Este Secret tem de existir no namespace antes do hook de instalação ou atualização.
O nome do Secret é definido por TDP-Settings.externalDatabase.externalSecret.releaseName (padrão tdp-postgresql).

LDAP habilitado

LDAP é usado pelo Superset como fornecedor de autenticação.
No chart, habilitar LDAP substitui o uso exclusivo da base de dados interna de usuários por login no diretório corporativo.

Antes de habilitar LDAP, crie o Secret com a palavra-passe do usuário de bind no namespace do Superset:

kubectl -n <NAMESPACE> create secret generic tdp-superset-ldap-secret --from-literal=bind-password=<LDAP_BIND_PASSWORD>

Modelo de configuração:

tdp-superset:
ldap:
enabled: true
server:
url: "ldap://<LDAP_HOST>:389"
useTls: "False"
bind:
user: "cn=<LDAP_BIND_USER>,cn=users,cn=accounts,dc=<LDAP_DOMAIN>,dc=com"
passwordSecret:
name: "tdp-superset-ldap-secret"
key: "bind-password"
search:
base: "cn=users,cn=accounts,dc=<LDAP_DOMAIN>,dc=com"
filter: "(objectClass=person)"
uidField: "uid"
userAttributes:
firstname: "givenName"
lastname: "sn"
email: "mail"
registration:
enabled: "True"
defaultRole: "Public"
roleMapping:
"cn=superset_admins,cn=groups,cn=accounts,dc=<LDAP_DOMAIN>,dc=com": ["Admin"]
"cn=superset_users,cn=groups,cn=accounts,dc=<LDAP_DOMAIN>,dc=com": ["Gamma", "Alpha"]
groupField: "memberOf"
roleSyncAtLogin: "True"

Substitua os placeholders antes de instalar.
<LDAP_HOST> é o endereço do LDAP visto de dentro do cluster.
<LDAP_BIND_USER> é a conta usada pelo Superset para pesquisar usuários e grupos.
<LDAP_DOMAIN> representa os componentes do DN do diretório.
<LDAP_BIND_PASSWORD> deve ser armazenado apenas no Secret.

Para desabilitar LDAP e voltar ao modo de usuários internos, defina tdp-superset.ldap.enabled: false e remova a configuração LDAP específica.
Depois do upgrade, valide se o login interno esperado ainda existe e se as políticas de exposição continuam restritas.

Mapeamento de grupos e roles

O parâmetro ldap.roleMapping mapeia grupos do diretório para roles do Superset.
A chave é o DN completo do grupo no LDAP; o valor é uma lista de roles do Superset.

Roles nativas do Superset: Admin, Alpha, Gamma, Public.
Use Gamma como defaultRole para acesso somente leitura a dashboards.
Use Alpha para usuários que criam gráficos e datasets.
Use Admin apenas para grupos administrativos controlados.

Com ldap.roleSyncAtLogin: "True", as roles do usuário são recalculadas em cada login com base nos grupos do LDAP.
Alterações no diretório, como adicionar ou remover grupos, refletem-se no Superset sem intervenção manual.

Parâmetros principais

ParâmetroPapelPredefiniçãoQuando alterar
tdp-superset.extraSecretEnv.SUPERSET_SECRET_KEYChave criptográfica da aplicaçãoplaceholderSempre definir antes do primeiro deploy
tdp-superset.initCriação do usuário admin inicialvalores do chartInstalações sem LDAP ou bootstrap inicial
tdp-superset.postgresqlSecrets.nameNome do Secret da palavra-passe da base de dados de metadados""Quando usar Secret próprio
tdp-superset.postgresqlSecrets.passwordKeyChave da palavra-passe dentro do Secretsuperset-postgresql-passwordQuando o Secret usar outra chave
TDP-Settings.externalDatabase.enabledHabilita bootstrap de PostgreSQL externofalseAmbientes com base de dados partilhada
TDP-Settings.externalDatabase.externalSecret.releaseNameNome do Secret PostgreSQL admintdp-postgresqlQuando o Secret admin tiver outro padrão
tdp-superset.ldap.enabledHabilita autenticação LDAPfalseAmbientes com autenticação corporativa
tdp-superset.ldap.server.urlURL do servidor LDAPldap://<LDAP_HOST>:389Quando usar outro host, porta ou LDAPS
tdp-superset.ldap.bind.passwordSecret.*Secret com palavra-passe do usuário de bindtdp-superset-ldap-secret / bind-passwordQuando usar outro Secret ou chave
tdp-superset.ldap.search.*Base, filtro e atributo de loginvalores LDAP do ambienteSempre ajustar ao diretório corporativo
tdp-superset.ldap.registration.*Auto-registo e role predefinidaTrue / PublicAo controlar perfil inicial de usuários
tdp-superset.ldap.roleMappingMapeia grupos LDAP para roles{}Ambientes com RBAC por grupos
tdp-superset.ldap.roleSyncAtLoginSincroniza roles no loginTrueQuando roles devem refletir alterações no LDAP

Resolução de Problemas

SituaçãoO que verificar
Pods não arrancamSUPERSET_SECRET_KEY definida e sem espaços extra
Init job falhaHost DB, palavra-passe e Secret admin <RELEASE_NAME> com a chave postgres-password
Login com usuários internos falhaBloco tdp-superset.init com usuário admin no ficheiro de valores
Login LDAP falhaURL LDAP, DN de bind, Secret tdp-superset-ldap-secret e conectividade
Usuário LDAP não encontradoldap.search.base, ldap.search.filter e ldap.search.uidField
Role errada após loginldap.roleMapping, DN dos grupos e ldap.roleSyncAtLogin: "True"
LDAP ativo mas sem efeitoConfirmar ldap.enabled: true e Secret de bind criado antes do deploy

Ao trocar de usuários internos para LDAP, crie o Secret de bind antes do helm upgrade.
Depois valide login, atributos de usuário e mapeamento de roles.

Ao trocar de LDAP para usuários internos, confirme que existe usuário admin local válido e reveja a exposição da interface.

Boas práticas

  • Não versionar a palavra-passe de bind LDAP nem a SUPERSET_SECRET_KEY.
  • Rode as credenciais após o primeiro deploy em produção.
  • Use Public ou Gamma como defaultRole para evitar acesso administrativo inadvertido a novos usuários LDAP.
  • Prefira secretKeyRef em extraEnvRaw em vez de valores literais em extraEnv.
  • Restrinja a exposição do serviço por NetworkPolicy e use Ingress apenas quando necessário.
  • Para LDAPS (porta 636), defina ldap.server.url como ldaps:// e ldap.server.useTls: "True".