Segurança — Airflow
O chart tdp-airflow suporta autenticação LDAP opcional para a interface web do Airflow (Flask-AppBuilder). Por predefinição, tdp-airflow.ldap.enabled é false.
Pré-requisitos
- Servidor LDAP acessível a partir do cluster Kubernetes
- Credenciais de bind (utilizador e palavra-passe), normalmente fornecidas via Secret
Secret com palavra-passe de bind
Crie o Secret antes de instalar ou atualizar o release, ou declare-o num manifesto com placeholders:
Terminal input
kubectl -n <namespace> create secret generic <ldap-bind-secret> \
--from-literal=password='<ldap-bind-password>'
Alternativa equivalente (manifesto):
apiVersion: v1
kind: Secret
metadata:
name: <ldap-bind-secret>
namespace: <namespace>
type: Opaque
stringData:
password: "<ldap-bind-password>"
Importante
Se o Secret referenciado em tdp-airflow.extraEnv não existir, os pods podem falhar no arranque.
Configurar LDAP
Num ficheiro de values (por exemplo values-ldap.yaml), utilize o prefixo tdp-airflow.ldap.* e injete a palavra-passe com tdp-airflow.extraEnv:
tdp-airflow:
ldap:
enabled: true
apiServerConfig: |
import os
from flask_appbuilder.security.manager import AUTH_LDAP
AUTH_TYPE = AUTH_LDAP
AUTH_LDAP_SERVER = "ldap://<ldap-host>:389"
AUTH_LDAP_USE_TLS = False
AUTH_LDAP_BIND_USER = "uid=<bind-user>,cn=users,cn=accounts,dc=example,dc=com"
AUTH_LDAP_BIND_PASSWORD = os.environ.get("LDAP_BIND_PASSWORD", "")
AUTH_LDAP_SEARCH = "cn=users,cn=accounts,dc=example,dc=com"
AUTH_LDAP_UID_FIELD = "uid"
AUTH_LDAP_EMAIL_FIELD = "mail"
AUTH_LDAP_FIRSTNAME_FIELD = "givenName"
AUTH_LDAP_LASTNAME_FIELD = "sn"
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = "User"
extraEnv: |
- name: LDAP_BIND_PASSWORD
valueFrom:
secretKeyRef:
name: <ldap-bind-secret>
key: password
dica
A palavra-passe de bind não deve ficar em texto simples no values.yaml versionado; utilize valueFrom.secretKeyRef em tdp-airflow.extraEnv.
Instalar ou atualizar com LDAP
Terminal input
helm upgrade --install <release> oci://registry.tecnisys.com.br/tdp/charts/tdp-airflow \
-n <namespace> --create-namespace \
-f values.yaml \
-f values-ldap.yaml
Parâmetros LDAP
| Parâmetro | Descrição |
|---|---|
tdp-airflow.ldap.enabled | Ativa autenticação LDAP |
tdp-airflow.ldap.apiServerConfig | Trecho Python Flask-AppBuilder (AUTH_LDAP, etc.) |
tdp-airflow.extraEnv | Variáveis extra; utilize para LDAP_BIND_PASSWORD via Secret |
Resolução de problemas
| Problema | Causa provável | Solução |
|---|---|---|
| O pod não arranca | Secret de bind em falta ou nome incorreto | Criar/corrigir o Secret e alinhar secretKeyRef.name em tdp-airflow.extraEnv |
| Credenciais inválidas | Bind DN ou palavra-passe incorretos | Validar o bind com ferramentas LDAP do ambiente |
| Utilizador sem permissão | Função predefinida de registo | Ajustar AUTH_USER_REGISTRATION_ROLE em tdp-airflow.ldap.apiServerConfig |