Saltar para o conteúdo principal
Versão 3.0

Segurança — ArgoCD

ChartVersion3.0.1TypeapplicationAppVersion3.2.5
CompatibilidadeKubernetes1.32+OpenShift4.19+Rancher2.10.x+
Suporte a recursosLDAPsuportado

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-secret criado manualmente com kubectl create secret antes do deploy, com as chaves dex.ldap.bindDN e dex.ldap.bindPW.
  • Dex habilitado explicitamente com tdp-argo.dex.enabled: true.
  • tdp-argo.configs.cm.dex.config preenchido com host LDAP e baseDN.

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:

Terminal input
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
danger

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.

Produção: prefira LDAPS

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:admin associam grupos LDAP a roles internas do Argo CD.
  • Permissões de role customizada: linhas p, role:ldap-user, ... definem o que a role ldap-user pode executar.
  • Atribuição padrão: g, *, role:ldap-user associa usuários autenticados à role ldap-user por 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

Terminal input
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:

Terminal input
kubectl get pods -n <NAMESPACE> | grep dex
kubectl get svc -n <NAMESPACE> | grep dex

Confirme também os recursos RBAC criados pelo chart:

Terminal input
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:

Terminal input
kubectl logs -n <NAMESPACE> deployment/<DEPLOYMENT_NAME> -f

Teste LDAP a partir do pod Dex (exemplo com ldapsearch):

Terminal input
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

ProblemaCausa provávelO que verificar
no such host para argocd-dex-serverDex desabilitado ou Service do Dex não criadoDefinir tdp-argo.dex.enabled: true e confirmar `kubectl get pods,svc -n <NAMESPACE>
config referenced key does not exist in secretdex.config referencia chaves que não existem no argocd-secretConfirmar que o Secret argocd-secret existe e contém dex.ldap.bindDN e dex.ldap.bindPW
Invalid username or password ou LDAP inválidoFalha de conectividade, bind DN/senha incorretos ou busca de usuário incorretaValidar acesso ao servidor LDAP a partir do cluster, conferir bindDN/senha, userSearch.baseDN, filter, e logs do servidor LDAP
Usuário autenticado sem permissãoUsuário/grupo LDAP não mapeado para uma role do Argo CDRevisar tdp-argo.rbacConfig.policy.csv, confirmar nomes dos grupos LDAP e verificar mensagens de avaliação RBAC nos logs do Argo CD