Segurança — ArgoCD
O chart tdp-argo suporta autenticação LDAP via Dex. LDAP vem desabilitado por padrão; habilite explicitamente editando values.yaml e definindo tdp-argo.dex.enabled: true.
Quando habilitado, o LDAP usa credenciais de bind em argocd-secret (chaves dex.ldap.bindDN e dex.ldap.bindPW), dex.config em tdp-argo.configs.cm e RBAC em tdp-argo.rbacConfig.
Pré-requisitos
- Servidor LDAP acessível a partir do cluster Kubernetes.
- Credenciais de bind LDAP para o Dex.
argocd-secretcriado manualmente comkubectl create secretantes do deploy, com as chavesdex.ldap.bindDNedex.ldap.bindPW.- Dex habilitado explicitamente com
tdp-argo.dex.enabled: true. tdp-argo.configs.cm.dex.configpreenchido com host LDAP ebaseDN.
Credenciais e Secrets
Crie o argocd-secret antes de instalar o chart, para que o Dex leia as credenciais de bind via referências $dex.ldap.bindDN / $dex.ldap.bindPW e o Helm não tente gerenciá-lo:
kubectl create namespace <NAMESPACE>
kubectl create secret generic argocd-secret \
--from-literal=dex.ldap.bindDN="uid=<LDAP_BIND_USER>,cn=users,cn=accounts,dc=<LDAP_DOMAIN>,dc=com" \
--from-literal=dex.ldap.bindPW="<LDAP_BIND_PASSWORD>" \
-n <NAMESPACE>
Em seguida, mantenha createSecret: false no arquivo de valores para que o Helm não gerencie o Secret:
tdp-argo:
configs:
secret:
createSecret: false
Não commite senhas. Use arquivos de valores privados, CI seguro ou gestão de secrets externa.
Configuração LDAP
tdp-argo:
configs:
cm:
url: https://<ARGOCD_HOST>
dex.config: |
connectors:
- type: ldap
id: ldap
name: LDAP
config:
host: "<LDAP_HOST>:389"
insecureNoSSL: true
insecureSkipVerify: true
bindDN: "$dex.ldap.bindDN"
bindPW: "$dex.ldap.bindPW"
userSearch:
baseDN: "cn=users,cn=accounts,dc=example,dc=com"
filter: "(objectClass=person)"
username: uid
idAttr: uid
emailAttr: mail
nameAttr: givenName
secret:
createSecret: false
dex:
enabled: true
Ajuste host, baseDN e flags SSL conforme seu diretório. Quando createSecret: false, crie e mantenha o argocd-secret por outro meio, com as chaves referenciadas em dex.config.
O values.yaml padrão mantém Dex desabilitado e deixa dex.config vazio. Nesse estado, a página de login não mostra o botão LDAP/SSO.
O exemplo acima usa LDAP em texto claro (<LDAP_HOST>:389 com insecureNoSSL: true e insecureSkipVerify: true), adequado apenas para ambientes de teste. Em produção, use LDAPS (porta 636): defina insecureNoSSL: false e insecureSkipVerify: false, ajuste host para <LDAP_HOST>:636 e disponibilize a CA do servidor LDAP ao Dex.
Autorização e políticas
tdp-argo:
rbacConfig:
policy.default: role:readonly
policy.csv: |
g:devops-admins, role:admin
g:data-platform, role:admin
g:data-read, role:readonly
p, role:ldap-user, applications, *, default/<NAMESPACE>, get
p, role:ldap-user, applications, *, default/<NAMESPACE>, sync
p, role:ldap-user, applications, *, default/<NAMESPACE>, override
p, role:ldap-user, clusters, *, *, get
g, *, role:ldap-user
Substitua <NAMESPACE> pelo projeto/namespace lógico do Argo CD que você utiliza.
Este bloco já vem ativo por padrão no chart, mesmo sem LDAP/Dex habilitado.
Os grupos devops-admins, data-platform e data-read e o <NAMESPACE> são valores de exemplo: substitua-os pelos grupos reais do seu diretório LDAP e pelo namespace do seu projeto, caso contrário essas regras não se aplicam a nenhum usuário.
O bloco rbacConfig.policy.csv combina três tipos de regra:
- Mapeamento de grupos: linhas como
g:devops-admins, role:adminassociam grupos LDAP a roles internas do Argo CD. - Permissões de role customizada: linhas
p, role:ldap-user, ...definem o que a roleldap-userpode executar. - Atribuição padrão:
g, *, role:ldap-userassocia usuários autenticados à roleldap-userpor padrão.
NetworkPolicy
Por padrão, o chart não cria NetworkPolicies (tdp-argo.global.networkPolicy.create: false), mantendo o tráfego liberado (allow-all).
Para habilitar as policies allow-all do upstream:
tdp-argo:
global:
networkPolicy:
create: true
defaultDenyIngress: false
Os templates do upstream não permitem customizar as regras via valores Helm. Para uma restrição real, aplique uma NetworkPolicy própria — por exemplo, permitindo ingresso aos pods do Argo CD apenas a partir de um namespace confiável (<NAMESPACE> é o namespace onde o Argo CD roda; <TRUSTED_NAMESPACE>, o namespace de origem autorizado):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-restrict-ingress
namespace: <NAMESPACE>
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: In
values:
- <TRUSTED_NAMESPACE>
Instalação ou atualização
helm upgrade --install <RELEASE_NAME> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-argo \
-n <NAMESPACE> --create-namespace
Depois do deploy ou upgrade, confirme que o Dex está em execução:
kubectl get pods -n <NAMESPACE> | grep dex
kubectl get svc -n <NAMESPACE> | grep dex
Confirme também os recursos RBAC criados pelo chart:
kubectl get serviceaccount -n <NAMESPACE> | grep argo
kubectl get role -n <NAMESPACE> | grep argo
kubectl get rolebinding -n <NAMESPACE> | grep argo
Login
- UI: acesse
https://<ARGOCD_HOST>e use "LOG IN VIA LDAP" (login/senha local é só para contas locais). - CLI:
argocd login <ARGOCD_HOST> --sso
Solução de problemas
Verificações iniciais
Verifique os logs do Argo CD server para erros de conexão LDAP e avaliação RBAC:
kubectl logs -n <NAMESPACE> deployment/<DEPLOYMENT_NAME> -f
Teste LDAP a partir do pod Dex (exemplo com ldapsearch):
kubectl exec -n <NAMESPACE> deployment/<DEPLOYMENT_NAME> -- \
ldapsearch -x -H ldap://<LDAP_HOST>:389 \
-D "<LDAP_BIND_DN>" \
-w "<PASSWORD>" \
-b "<LDAP_USER_BASE_DN>" \
"(uid=<USERNAME>)"
Substitua nomes dos deployments pelos recursos reais (kubectl get deploy -n <NAMESPACE>).
Problemas comuns
| Problema | Causa provável | O que verificar |
|---|---|---|
no such host para argocd-dex-server | Dex desabilitado ou Service do Dex não criado | Definir tdp-argo.dex.enabled: true e confirmar `kubectl get pods,svc -n <NAMESPACE> |
config referenced key does not exist in secret | dex.config referencia chaves que não existem no argocd-secret | Confirmar que o Secret argocd-secret existe e contém dex.ldap.bindDN e dex.ldap.bindPW |
Invalid username or password ou LDAP inválido | Falha de conectividade, bind DN/senha incorretos ou busca de usuário incorreta | Validar acesso ao servidor LDAP a partir do cluster, conferir bindDN/senha, userSearch.baseDN, filter, e logs do servidor LDAP |
| Usuário autenticado sem permissão | Usuário/grupo LDAP não mapeado para uma role do Argo CD | Revisar tdp-argo.rbacConfig.policy.csv, confirmar nomes dos grupos LDAP e verificar mensagens de avaliação RBAC nos logs do Argo CD |