secrets-management Skill
This skill enforces the zero-trust handling of credentials.
1. The Core Commandments
- NEVER commit secrets to Git. (Not even encrypted, if possible).
- NEVER log secrets to stdout/files.
- LEAST PRIVILEGE: An App's DB user should not be
postgres(superuser).
2. Storage Patterns
Level 1: Environment Variables (.env)
- Dev:
.envfile (gitignored). - Prod: Injected by platform (Vercel/Heroku env vars).
- Risk: Shell history exposure, accidental printenv.
Level 2: Secret Ops (SOPS / Encrypted Git)
- Secrets stored in git but encrypted with KMS/PGP.
- Decrypted only at build/deploy time.
- Tool: Mozilla SOPS, git-crypt.
Level 3: Secret Manager (The Standard)
- AWS Secrets Manager, Google Secret Manager, HashiCorp Vault.
- App fetches secret at runtime via SDK or Sidecar.
- Pros: Rotation, Audit trails.
3. Secret Rotation
- Static Secrets (API Keys): Rotate every 90 days.
- Dynamic Secrets (Db Creds): Vault creates a credential per session that expires in 1h.
4. Detection (Pre-Commit)
- Use
gitleaksortrufflehogin CI/CD. - If a secret is committed:
- Revoke it immediately.
- Rotate the key.
- Rewrite git history (BFG Repo Cleaner) - optional but recommended.
5. Kubernetes Secrets
- Default K8s Secrets are base64 encoded (NOT encrypted).
- Requirement: Enable Encryption-at-Rest for etcd.
- Better: Use "External Secrets Operator" to sync from AWS/Vault.