Practice / controls and tools
Practice
Security is not a stage at the end. These are the six controls I apply, in order, on every system I touch.
Controls
Model the threat
Before code: list the assets, the people who want them and every place data crosses a process, a network or a vendor.
Keep secrets home
Keys live in Key Vault, the OS keychain or the platform secret store, never in the bundle, the repo or a client request.
Scan every push
SAST with Bandit, Semgrep and Trivy on each commit, DAST with OWASP ZAP before a release, the same gates that passed a CASA Tier 2 preparation.
Mask what leaves
Personal details are replaced before text reaches a third-party model, and restored only on the machine that owns them.
Ask before acting
Anything that sends, deletes or runs waits for a human yes, with the details on one card and an expiry.
Watch and account
Traces, metrics and cost per request in one place, so a slow endpoint or a 4.2 TB surprise shows up as a number, not an invoice.
Tools
What I reach for- IaC and CI/CD
- Terraform / ARM templates / GitHub Actions / Azure DevOps Pipelines
- Cloud
- Azure Container Apps / API Management / Key Vault / Azure SQL / Virtual Desktop / Storage / AWS S3 / Amazon Polly / CloudFormation
- Containers
- Docker / Kubernetes / Azure Container Apps
- Observability
- OpenTelemetry / Jaeger / Prometheus / Grafana
- Security
- Bandit / Semgrep / Trivy / OWASP ZAP / Azure Key Vault / OpenVPN / Headscale / Tailscale
- AI and LLM infrastructure
- OpenRouter / Gemini / LM Studio / Prompt caching / AssemblyAI / Amazon Polly / Cartesia / Deepgram
- Databases
- MongoDB Atlas / Azure SQL / PostgreSQL / MySQL
- Languages and frameworks
- Python / Bash / PowerShell / SQL / JavaScript / TypeScript / Java / FastAPI / Node.js / React / Nginx