Market-intelligence startup, co-founder
Private-Network Cloud Platform as Code
Took a startup's cloud estate from public endpoints to a fully private network defined in code: one audited door in through an edge firewall, one door out through a deny-by-default egress list that CI checks against the codebase, and about forty tripwires watching all of it.
- Headline number
- 0 public endpoints on data services
- Role
- Architected and built
- Category
- Security & Operations
- Updated
Architecture
- Internet users
- Front Door + WAFprevention mode
- Private Link
- Container apps and jobspublic access disabled
- Private endpointsPostgres, Key Vault, registry, storageEgress firewallallowlist from YAML, CI-checked
- Approved external APIs~40 alert rulesdelete-locked, drilled
Key takeaways
- 16 Bicep templates define the whole estate. Posture changes only through a pull request and a deploy.
- One way in: Front Door with WAF over Private Link. One way out: an egress firewall whose rules are generated from a reviewed YAML allowlist.
- No credential a human could copy: 12 managed identities, OIDC for CI, no database passwords
- About 40 alert rules, delete-locked and heartbeat-checked, each drilled end to end on demand
The situation
The platform handles member data and payments with a two-person team. The first version ran on public endpoints because that is how you ship in week one. Before paid launch, the estate needed to be private, auditable, and impossible to misconfigure by hand.
What I built
Everything lives in one virtual network. Inbound traffic hits Front Door with a WAF in prevention mode and reaches the container environment only over Private Link; public access on the environment is disabled. Outbound traffic from the app, CI runner, and management subnets is forced through an Azure Firewall whose rules are generated from a YAML allowlist in the repo. A CI guard reconciles that file against every outbound hostname in the code, and another guard fails any template that could reopen public access.
PostgreSQL, Key Vault, the container registry, and storage sit behind six private endpoints with private DNS. Human access goes through Bastion to a jump host that is deallocated between uses. Workloads authenticate with 12 managed identities and CI with OIDC pinned to the main branch, so no secret a human could copy exists.
On top of the network sits detection: about forty KQL alert rules across identity, data plane, network, control plane, liveness, and cost, plus two watchers that check the DNS security layer and the secrets vault every 15 minutes. Every rule is delete-locked and has a documented trigger that produces a known email. After the edge firewall silently swallowed the alert relay for five days, a daily heartbeat and a silent-pipeline rule joined the set.
The outcome
The cutover from public to private ran over one week with no member-facing downtime. The estate has no reachable data service from the internet, and "no email" can never be mistaken for "nothing happened."
Stack
Related work
Same discipline, different system.
Need this built inside your organization?
One person, architecture to deployment. Tell me what is stuck and I will tell you where I would start.
