Secrets Management
Definition
Where and how sensitive values (passwords, API keys, private keys, tokens) are stored, accessed, and rotated. A secret that ends up in git, logs, or env dumps is compromised.
Core practices
- No secrets in code / git — use
.gitignore, scan with gitleaks / trufflehog - Least privilege — scope each secret to one service
- Rotation — automatic, short-lived credentials beat long-lived ones
- Audit — every access logged
Where it appears
🐧 Linux
- systemd-creds — encrypted credentials per unit
- gpg-agent / ssh-agent — in-memory key agents
/etc/shadowpermissions (0000, root only)
☁️ Cloud
- AWS — Secrets Manager (rotating), Parameter Store (cheap), KMS (the key under the key)
- Azure — Key Vault (secrets, keys, certificates)
- Instance roles — avoid long-lived keys entirely
📦 Containers
- Kubernetes Secrets — base64-encoded, enable encryption-at-rest for etcd
- External Secrets Operator — sync from Vault/AWS/Azure
- SOPS / sealed-secrets — encrypted secrets in git
🔄 CI/CD
- GitHub Actions secrets / OIDC — prefer OIDC federation over static secrets
- Runner scope — org vs repo vs environment secrets
🔐 Cybersecurity
- HashiCorp Vault — dynamic secrets, PKI, transit
- SPIFFE/SPIRE — workload identity, short-lived SVIDs