ConfigMaps e Secrets no Kubernetes: Guia Completo para Configurações Seguras e Ágeis

ConfigMaps e Secrets no Kubernetes: Guia Completo para Configurações Seguras e Ágeis

Visão geral

No Kubernetes, a lógica de configuração das aplicações fica separada da imagem do container. Essa separação é feita principalmente com ConfigMaps (para dados não sensíveis) e Secrets (para informações confidenciais). Ambos podem ser injetados nos containers via variáveis de ambiente ou como arquivos montados em volumes, mas cada um tem um propósito distinto.


1. Injetando dados nos containers

1.1 Variáveis de ambiente (env)

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_MODE: "production"
  LOG_LEVEL: "debug"
# trecho do pod
env:
  - name: APP_MODE
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: APP_MODE

Secret

apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  DB_PASSWORD: cGFzc3dvcmQ=   # "password" em base64
# trecho do pod
env:
  - name: DB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: app-secret
        key: DB_PASSWORD

1.2 Volumes montados

ConfigMap como volume

volumes:
  - name: config-volume
    configMap:
      name: app-config
containers:
  - name: app
    volumeMounts:
      - mountPath: /etc/config
        name: config-volume

Secret como volume

volumes:
  - name: secret-volume
    secret:
      secretName: app-secret
containers:
  - name: app
    volumeMounts:
      - mountPath: /etc/secret
        name: secret-volume

2. ConfigMap vs. Secret

Característica ConfigMap Secret
Objetivo Parâmetros, flags e arquivos de configuração que não são sensíveis Senhas, tokens, chaves, certificados
Formato Texto puro Dados codificados em base64 (apenas para serialização)
Armazenamento Não criptografado por padrão Não criptografado por padrão; recomenda‑se habilitar criptografia em repouso (etcd)
Tamanho típico Pode ser maior, usado para blocos de configuração Ideal para pequenos blocos de dados confidenciais
Controle de acesso RBAC mais permissivo RBAC rigoroso; permissões de leitura devem ser restritas
Uso comum Variáveis de ambiente, arquivos de configuração, flags de inicialização Credenciais de banco, tokens de API, certificados TLS

3. Boas práticas

  1. Mantenha a configuração fora da imagem – Use ConfigMaps para valores que podem mudar sem necessidade de rebuild.
  2. Separe sempre os dados sensíveis – Armazene credenciais, chaves e certificados em Secrets.
  3. Organize por namespaces e labels – Facilita a descoberta e o controle de acesso.
  4. RBAC restrito para Secrets – Conceda get/list apenas a quem realmente precisa.
  5. Criptografia em repouso – Ative a criptografia de Secrets no etcd.
  6. Monte Secrets como volumes – Evita que valores apareçam em processos ou logs.
  7. Não registre Secrets em logs – Remova qualquer impressão de variáveis sensíveis.
  8. Rotacione Secrets regularmente – Atualize senhas e tokens periodicamente.

4. Operações rápidas com a CLI

# Criar um Secret a partir de um literal
kubectl create secret generic app-secret \
  --from-literal=DB_PASSWORD=senhaSegura123

# Criar um ConfigMap a partir de literais
kubectl create configmap app-config \
  --from-literal=LOG_LEVEL=info \
  --from-literal=APP_ENV=production

Depois, basta referenciar o ConfigMap ou Secret nos manifests de Pods, Deployments ou StatefulSets conforme os exemplos da seção 1.


5. Resumo rápido

Recurso Quando usar Como injetar Segurança
ConfigMap Dados de configuração que não são confidenciais Variáveis de ambiente ou volume Acesso menos restrito; não criptografado
Secret Credenciais, tokens, chaves, certificados Variáveis de ambiente ou volume (preferível) Criptografia em repouso recomendada + RBAC estrito

6. Conclusão

Separar configuração e dados sensíveis usando ConfigMaps e Secrets é essencial para manter ambientes Kubernetes seguros e ágeis. Compreender as diferenças, aplicar as boas práticas de isolamento e proteger os Secrets reduz vulnerabilidades e simplifica a gestão de configurações dinâmicas.

Nos próximos artigos vamos aprofundar em volumes persistentes, StorageClasses e estratégias avançadas de segurança de dados no Kubernetes.