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

  1. 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.

  2. 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.

  3. 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.

  4. Mask what leaves

    Personal details are replaced before text reaches a third-party model, and restored only on the machine that owns them.

  5. Ask before acting

    Anything that sends, deletes or runs waits for a human yes, with the details on one card and an expiry.

  6. 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