Segurança — NiFi
O chart tdp-nifi suporta autenticação LDAP e HTTPS com certificados gerenciados pelo cert-manager. A configuração é feita sob a chave nifiCluster no values.yaml.
Por padrão, o NiFi é implantado sem LDAP ativo e sem HTTPS forçado. A ativação de qualquer um desses recursos requer configuração explícita dos blocos abaixo.
Activar LDAP e HTTPS
O bloco nifiCluster.security controla o protocolo de acesso (http ou https), a porta e a integração com LDAP de forma unificada:
nifiCluster:
security:
enabled: true
protocol: "https"
port: 8443
ldap:
enabled: true
url: "ldap://<ldap-host>:389"
managerDn: "uid=<bind-user>,cn=users,cn=accounts,dc=empresa,dc=com,dc=br"
managerPassword: "<bind-password>"
| Campo | Descrição |
|---|---|
security.enabled | Activa o modo seguro no NiFi |
security.protocol | https para TLS; http para acesso sem encriptação |
security.port | Porta de escuta — 8443 com HTTPS, 8080 com HTTP |
security.ldap.enabled | Activa a autenticação LDAP |
security.ldap.url | Endereço do servidor LDAP |
security.ldap.managerDn | DN do utilizador de bind (só leitura no directório) |
security.ldap.managerPassword | Palavra-passe do bind — não versionar em repositório público |
Não armazene managerPassword em repositório Git. Utilize um ficheiro de valores privado (fora do controlo de versões) ou um mecanismo de gestão de Secrets para injectar esta credencial no deploy.
LDAP — configuração detalhada
A autenticação via LDAP delega o login ao directório corporativo (LDAP ou Active Directory). O bloco de configuração fica em nifiCluster.ldapConfiguration:
nifiCluster:
ldapConfiguration:
enabled: true
url: "ldap://<ldap-host>:389"
searchBase: "cn=users,cn=accounts,dc=empresa,dc=com,dc=br"
searchFilter: "(&(uid={0})(objectClass=person))"
authenticationStrategy: "SIMPLE"
managerDn: "uid=<bind-user>,cn=users,cn=accounts,dc=empresa,dc=com,dc=br"
managerPassword: "<bind-password>"
referralStrategy: "FOLLOW"
identityStrategy: "USE_USERNAME"
| Campo | Descrição |
|---|---|
url | Endereço do servidor LDAP |
searchBase | Base DN onde os utilizadores estão localizados |
searchFilter | Filtro de pesquisa — {0} é substituído pelo username introduzido |
authenticationStrategy | Tipo de bind: SIMPLE para autenticação directa |
managerDn | DN do utilizador de bind (só leitura no directório) |
managerPassword | Palavra-passe do utilizador de bind — não versionar em repositório público |
identityStrategy | USE_USERNAME usa o login como identidade no NiFi |
Adicionalmente, inclua o provider no bloco de propriedades do NiFi:
nifiCluster:
readOnlyConfig:
nifiProperties:
overrideConfigs: |
nifi.sensitive.props.key=<chave-sensivel>
nifi.security.user.login.identity.provider=ldap-provider
Identidades iniciais
Após activar o LDAP, é necessário definir o utilizador inicial e o administrador no authorizersXML. O valor deve ser uma identidade válida devolvida pelo seu fornecedor LDAP:
nifiCluster:
authorizersSecret:
authorizersXML: |
<property name="Initial User Identity 1"><identidade-ldap></property>
<property name="Initial Admin Identity"><identidade-ldap></property>
Substitua <identidade-ldap> pela identidade exacta que o LDAP devolve para o utilizador (geralmente o uid ou o DN do utilizador, consoante identityStrategy).
Desactivar LDAP
Para reverter ao acesso HTTP sem autenticação LDAP:
nifiCluster:
security:
enabled: false
protocol: "http"
port: 8080
ldap:
enabled: false
Ingress com HTTPS
Quando o NiFi opera em modo seguro (nifiCluster.security.protocol: "https"), o Ingress Controller precisa da anotação backend-protocol para fazer o proxy correctamente. Configure a anotação no bloco de Ingress do NiFi:
nifiCluster:
ingress:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
rules:
paths:
backend:
service:
port:
number: 8443
Para reverter ao HTTP, ajuste a anotação e a porta:
nifiCluster:
ingress:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
rules:
paths:
backend:
service:
port:
number: 8080
Estas anotações são específicas do NGINX Ingress Controller. Caso utilize outro controlador, consulte a sua documentação para a configuração equivalente de backend TLS.
HTTPS com cert-manager
O NiFi pode ser configurado para operar em HTTPS utilizando certificados emitidos automaticamente pelo cert-manager. O webhook do operador NiFiKop também exige cert-manager quando nifikop.webhook.enabled: true.
nifiCluster:
https:
enabled: true
host: nifi.empresa.com
sslSecrets:
create: true
pkiBackend: cert-manager
issuerRef:
name: selfsigned-issuer
kind: Issuer
| Campo | Descrição |
|---|---|
https.enabled | Habilita HTTPS no cluster NiFi |
https.host | Hostname que será usado no certificado |
sslSecrets.create | Cria automaticamente o Secret de TLS |
sslSecrets.pkiBackend | cert-manager delega a emissão ao cert-manager |
issuerRef.name | Nome do Issuer ou ClusterIssuer configurado no cluster |
Pré-requisito: cert-manager
O cert-manager deve estar instalado no cluster antes do deploy do NiFi com HTTPS ou com webhook habilitado:
kubectl create namespace cert-manager
kubectl apply --validate=false -f \
https://github.com/jetstack/cert-manager/releases/download/v1.7.2/cert-manager.crds.yaml
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager \
--namespace cert-manager \
--version v1.17.2 jetstack/cert-manager
Boas práticas
| Aspecto | Recomendação |
|---|---|
| Ambiente de desenvolvimento | LDAP desabilitado, acesso via port-forward |
| Ambiente compartilhado / produção | LDAP com ldaps:// (porta 636) e HTTPS habilitado |
| Credenciais | Nunca versionar managerPassword em valores públicos |
| Certificados | Preferir cert-manager com ClusterIssuer em produção |
Resolução de Problemas
| Problema | Causa provável | Solução |
|---|---|---|
| Pod NiFi não sobe com HTTPS | cert-manager ausente ou Issuer não encontrado | Verificar instalação do cert-manager e nome do Issuer |
| Login LDAP falha | DN de bind ou senha incorretos | Testar bind com ldapsearch antes de configurar |
| Certificado inválido no navegador | Uso de selfsigned-issuer | Esperado em desenvolvimento; usar CA válida em produção |
Para a lista completa de parâmetros, use helm show values na versão do chart que instalou.