Lion Cipher Lab

Enforce zero-trust east-west traffic with Istio: STRICT mTLS + default-deny authorization (prove 'RBAC: access denied')

Why it matters

Perimeter firewalls assume the inside of your network is trustworthy. Zero trust throws that assumption out: every call must prove WHO it is and be explicitly authorized, even between two pods in the same cluster. Inside Kubernetes, pod IPs are ephemeral and reused, so IP-based rules age badly, and by default any pod can talk to any other pod in plaintext. A service mesh answers this by giving every workload a cryptographic IDENTITY (a SPIFFE ID minted by the mesh CA and carried in an X.509 cert), wrapping every east-west call in mutual TLS, and letting you write authorization in terms of…

What you'll learn

Steps in this lab

  1. The mental model: sidecars, workload identity (SPIFFE), and the two guarantees you'll enforce
  2. Stand up a free local cluster and install Istio (demo profile)
  3. Deploy the two workloads and confirm each pod has a sidecar (or deliberately doesn't)
  4. Expose the PERMISSIVE trap: plaintext from an out-of-mesh client still works
  5. Flip to STRICT mTLS and prove plaintext is now refused
  6. The mTLS-is-not-authorization trap, and the empty-spec `{}` = deny-all gotcha
  7. Default-deny + an identity-scoped ALLOW: prove the wrong identity gets 'RBAC: access denied'
  8. The named failure modes: scope, evaluation order, the too-broad ALLOW, and the sidecar bypass
  9. The judgment: mesh mTLS vs NetworkPolicy vs app mTLS, ambient vs sidecar, and when a mesh is overkill

Open the full interactive lab →