Argo CD Config Management Plugin
A partir da v4.5, o CipherVault tem CLI cv-argocd-cmp que se
integra ao Argo CD como Config Management Plugin (CMP). Resolve
placeholders {{cv:vault/path}} nos manifests Kubernetes antes do
Argo aplicar no cluster.
Resultado: GitOps puro sem secret estático no repo nem no Argo CD — manifests no Git têm placeholders, plugin injeta valores no momento do sync.
Instalação como sidecar do Argo
# argocd-cmp-server-cv.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cv-cmp-plugin
namespace: argocd
data:
plugin.yaml: |
apiVersion: argoproj.io/v1alpha1
kind: ConfigManagementPlugin
metadata:
name: ciphervault
spec:
version: v1.0
generate:
command: ["cv-argocd-cmp"]
args: ["render", "--manifests-dir", "."]
discover:
find:
command: ["sh", "-c", "find . -name '*.yaml' | xargs grep -l '{{cv:' || true"]
Patch o ConfigMap argocd-repo-server para incluir o sidecar:
spec:
template:
spec:
containers:
- name: cv-cmp
image: ghcr.io/martinez1991/ciphervault-argocd-cmp:v4.5.0
env:
- name: CV_URL
value: https://cv.acme.com.br
- name: CV_CLIENT_ID
valueFrom: { secretKeyRef: { name: cv-cmp-creds, key: client_id } }
- name: CV_CLIENT_SECRET
valueFrom: { secretKeyRef: { name: cv-cmp-creds, key: client_secret } }
Uso nos manifests
apiVersion: v1
kind: Secret
metadata:
name: stripe
namespace: billing
stringData:
STRIPE_KEY: "{{cv:producao/api/stripe/secret_key}}"
WEBHOOK_SECRET: "{{cv:producao/api/stripe/webhook_secret}}"
Argo CD chama cv-argocd-cmp render que:
- Lê todos os YAMLs do diretório
- Detecta padrões
{{cv:vault/path}} - Busca no CV via mTLS
- Substitui e devolve YAML resolvido para Argo CD aplicar
Segurança
- mTLS entre Argo CMP sidecar e CV
- Audit log registra cada chamada com
source: "argocd-cmp" - Não cacheia valores entre renders — cada sync busca fresh
- Filesystem isolado do sidecar — manifests resolvidos ficam só em memória
- Falha-soft — placeholder não encontrado → render falha (não aplica manifest incompleto)
Limitações
- Sem suporte a Helm templating — apenas plain YAML (use Helm + CMP separados em sequência)
- Sem suporte a Kustomize patches com placeholders — apenas base + overlays
- Sem suporte a Dynamic Secrets lease — apenas leitura de secrets persistentes
Boas práticas
- Placeholders só em K8s
Secret— não use em ConfigMap (acaba commitado por engano) - Audit alertas em volume incomum de
argocd-cmpsource — pode indicar comprometimento do Argo - Rotacionar credenciais do CMP a cada 3 meses