azure · aks · platform engineering
A private Azure Kubernetes cluster with no public API server, no static credentials anywhere, and a payments-style audit table on Azure SQL Ledger that cryptographically proves whether its own history has been altered. Built as a hands-on demonstration of zero-trust platform design — from cluster access to pod identity to policy enforcement to the audit trail itself.
$ kubectl run bad-pod --image=nginx --dry-run=server Error from server: admission webhook denied the request: container <bad-pod> uses image <nginx>, which resolves to the :latest tag — pin an explicit version $ EXEC sys.sp_verify_database_ledger @corrupted_digest Msg 37339, Level 16, State 5 The hash of block 0 in the database ledger doesn't match the hash provided in the digest for this block. $ az aks command invoke --command "kubectl get nodes" NAME STATUS ROLES aks-system-12345678-0 Ready <none> aks-system-12345678-1 Ready <none>
architecture
One VNet, a private AKS cluster, and three PaaS services — SQL, Storage, Key Vault — each reachable only through a Private Endpoint. Nothing in this diagram has a public IP.
<img src="architecture.png" alt="Architecture diagram">.
Recommended size: ~1400px wide, dark background to match the page.
what this proves
Each of these is a real gap between "the setting is enabled" and "the thing actually works day-to-day" — and how it's closed here.
the centerpiece
The ledger table rejects direct edits to its own history outright. For the harder case — data altered below the database engine — a digest verification later proves exactly which block stopped matching. Both are reproducible from the scripts in the repo.
sql/05_engine_level_tamper_attempt.sql and
sql/06_verify_with_corrupted_digest.sql and showing the
resulting errors is the single most convincing thing on this page —
swap this box for a <video> or an animated GIF.
posture
No public API serverPrivate cluster — not IP-restricted, genuinely absent from the internet
No static cluster credentialsLocal accounts disabled; access is Entra ID or ARM-mediated only
No public data-plane endpointsSQL, Storage, and Key Vault reachable only via Private Endpoint
No long-lived pod secretsWorkload Identity issues short-lived, auto-rotated tokens
No un-pinned container imagesPolicy-enforced allowed registries, resource limits, no :latest
Tamper-evident, not just tamper-loggedSQL Ledger detects — with proof — not just records
built with