Secrets management: Vault, SOPS e AWS Secrets Manager
⏱ 12 min·⭐ 55 XP
Pré-requisitos (0/1)0%
- ⬜📋 OWASP Top 10 (2024) com exemplo em código(Security Engineering)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Ferramentas comparadas
| Tool | Quando usar | Pros | Contras |
|---|---|---|---|
| HashiCorp Vault | Empresa, multi-cloud | Dynamic secrets, auditing, policies | Ops overhead |
| AWS Secrets Manager | AWS-heavy | Rotation automática, IAM integration | $0.40/secret, AWS-only |
| SOPS + age/KMS | GitOps, times pequenos | Git-native, simple | Sem rotation automática |
| Doppler | Times SaaS pequenos | DX ótima, multi-env | Vendor lock-in, custo em escala |
| 1Password Connect | Dev local + CI | Já no fluxo do time | Limite em produção |
| Kubernetes Secrets | NÃO (base64 ≠ encrypted) | — | Precisa SealedSecrets ou SOPS por cima |
ToolHashiCorp Vault
Quando usarEmpresa, multi-cloud
ProsDynamic secrets, auditing, policies
ContrasOps overhead
ToolAWS Secrets Manager
Quando usarAWS-heavy
ProsRotation automática, IAM integration
Contras$0.40/secret, AWS-only
ToolSOPS + age/KMS
Quando usarGitOps, times pequenos
ProsGit-native, simple
ContrasSem rotation automática
ToolDoppler
Quando usarTimes SaaS pequenos
ProsDX ótima, multi-env
ContrasVendor lock-in, custo em escala
Tool1Password Connect
Quando usarDev local + CI
ProsJá no fluxo do time
ContrasLimite em produção
ToolKubernetes Secrets
Quando usarNÃO (base64 ≠ encrypted)
Pros—
ContrasPrecisa SealedSecrets ou SOPS por cima
Dynamic secrets com Vault
# Setup Vault DB engine (uma vez)
vault secrets enable database
vault write database/config/my-postgres \
plugin_name=postgresql-database-plugin \
connection_url="postgresql://admin:pass@db:5432/" \
allowed_roles="app-readonly,app-readwrite"
vault write database/roles/app-readonly \
db_name=my-postgres \
creation_statements="CREATE USER \"{{name}}\" WITH PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
# App pede credentials on demand
vault read database/creds/app-readonly
# → { username: "v-root-app-rd-...", password: "...", lease_duration: 3600 }SOPS em 3 comandos
# .sops.yaml — define quais arquivos + qual chave
creation_rules:
- path_regex: secrets/.*\.yaml
age: age1abcd... # sua public key age
# Criptografar arquivo com values sensíveis
sops -e -i secrets/prod.yaml
# O arquivo fica com VALUES criptografados mas KEYS legíveis:
# database_password: ENC[AES256_GCM,data:...,iv:...,tag:...,type:str]
# Commit no git — tudo bem.
# Descriptografar na máquina autorizada (tem age private key)
sops -d secrets/prod.yaml > .env
# CD pipeline (com chave KMS/age): sops exec-envQuiz rápido
Qual é a vantagem de credenciais geradas sob demanda com validade curta?
AWS Secrets Manager com rotation
import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
const client = new SecretsManagerClient({ region: 'us-east-1' });
async function getDbCredentials() {
const res = await client.send(new GetSecretValueCommand({ SecretId: 'prod/db' }));
return JSON.parse(res.SecretString!);
}
// Lambda extension: cache local (~/opt/secrets-manager) reduz latency + cost
// Rotation: função Lambda rotaciona credencial a cada N dias, atualiza secretAnti-padrões
- Secret em docker image: layers são cacheadas; dá pra extrair com . Use build args sem persistir ou BuildKit secrets.
- Secret em CI logs: num script vaza em log público de PR. Use no Actions.
- .env versionado: proibido. com placeholders OK.
- Base64 ≠ encryption: Kubernetes Secrets default é só base64. Use SOPS ou SealedSecrets por cima.
- Tokens sem expiração: GitHub PAT, API keys custom — sempre com TTL e rotation.
⚠️
Install ou como pre-commit hook. Bloqueia secret vazando antes do push.
Perguntas frequentes
❓ Por que variável de ambiente é ruim para segredo?
Porque ela aparece em listagem de processo, em despejo de memória, em registro de erro e em ferramenta de depuração — e é herdada por processo filho. Ela é melhor que arquivo versionado e pior que cofre com credencial de curta duração buscada em execução.
❓ Cofre gerenciado ou cifragem de arquivo no repositório?
Cofre quando há rotação, auditoria por acesso e credencial dinâmica — é o desenho maduro. Cifragem de arquivo versionado é solução simples e boa para configuração de infraestrutura, com o limite de não ter rotação nem revogação por acesso.
❓ O que fazer quando um segredo vaza no repositório?
Rotacionar primeiro, remover depois. Apagar o commit não resolve: ele está em clones, em caches e possivelmente já foi coletado. Tratar a rotação como a ação primária é a diferença entre incidente contido e incidente que continua aberto.
Fixando
Quiz rápido
Por que criptografar segredos no repositório é uma estratégia legítima em alguns contextos?
Quiz rápido
Qual é o erro conceitual em usar variável de ambiente como se fosse cofre?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…