"Castle-and-Moat" 2. Anatomy of a Breach: A Real-World Case Study 3. The Solution, A new mindset: "Never Trust, Always Verify" 4. The Platform: Istio & The Rise of Ambient Mesh 5. The 3 Pillars: A Practical Implementation * Identity * Authentication * Authorization 6. The Payoff: Why This Makes Your Life Better
Public-facing web app. ❖ Reviews-service: A simple, non-critical service with a Log4Shell vulnerability. ❖ Customer-api: A high-value internal service. It should only be called by the frontend-service. Scenario
the reviews-service pod via Log4Shell. 2. Recon: Attacker finds 3. Lateral Movement: Attacker runs a simple curl: 4. Failure: In a "castle-and-moat" network, this works. DATA IS EXFILTRATED. http://customer-api.default.svc.cluster.local. [attacker@reviews-service]$ curl http://customer-api/api/v1/users/export
curl... [attacker@reviews-service]$ curl http://customer-api/api/v1/users/export curl: (56) Recv failure: Connection reset by peer ❖ What happened? The attacker's plain HTTP request was not using mTLS. ❖ Istio's Action: Our cluster-wide PeerAuthentication policy (Pillar 1) requires mTLS for all traffic. ❖ Result: The Ztunnel (L4) on the customer-api's node saw a non-mTLS request and immediately dropped the TCP connection. ❖ Key Point: The application was never touched. Explanation
the attacker uses the pod's own identity against us?" Key Point: The attacker has RCE. They can access everything the pod can. This includes its own cryptographic identity. Attacker's Recon: [attacker@reviews-service]$ ls -l /var/run/secrets/tokens/ total 0 lrwxrwxrwx 1 root root 15 Nov 17 20:30 istio-token -> ..data/istio-token [attacker@reviews-service]$ ls -l /var/run/secrets/istio/ total 0 lrwxrwxrwx 1 root root 17 Nov 17 20:30 cert-chain.pem -> ..data/cert-chain.pem lrwxrwxrwx 1 root root 11 Nov 17 20:30 key.pem -> ..data/key.pem lrwxrwxrwx 1 root root 15 Nov 17 20:30 root-ca.crt -> ..data/root-ca.crt
the JWT token from the filesystem. # Attacker reads the token file and saves it [attacker@reviews-service]$ TOKEN=$(cat /var/run/secrets/tokens/istio-token) # This $TOKEN is a valid JWT representing the # 'reviews-service' identity Key Point: This token, combined with the mTLS certs, will bypass our L4 mTLS defense. The request will be valid mTLS.
pod's identity to make a valid mTLS request. What this command does: * --cacert, --key, --cert: Performs a valid mTLS handshake as the reviews-service. * -H "Authorization: Bearer $TOKEN": Passes the valid identity token. * This request will pass L4 (Ztunnel) and go to the L7 Waypoint Proxy. [attacker@reviews-service]$ curl \ --cacert /var/run/secrets/istio/root-ca.crt \ --key /var/run/secrets/istio/key.pem \ --cert /var/run/secrets/istio/cert-chain.pem \ -H "Authorization: Bearer $TOKEN" \ https://customer-api/api/v1/users/export
RBAC: access denied Key Point: The server is istio-envoy. The customer-api app never saw the request. HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Mon, 17 Nov 2025 20:50:00 GMT server: istio-envoy
The Waypoint Proxy received the attacker's valid mTLS request. * It extracted the identity: cluster.local/ns/default/sa/reviews-service * It checked this policy. The policy only allows the frontend-service principal. * Identity did not match. * Result: Access Denied.
we must be able to answer * Verifiable Identity: Who are you? (Service-to-Service) * Verifiable Authentication: Who is the end-user? (User-to-Service) * Explicit Authorization: What are you allowed to do? (Policy)
(1 proxy per pod). Heavy & complex. * The New Way: Ambient Mesh (Sidecar-less) * Ztunnel (L4): A per-node agent. Handles Pillar 1 (Identity & mTLS) for all pods on that node. Very lightweight. * Waypoint (L7): An optional, per-service-account proxy. Handles Pillars 2 & 3 (Authn & Authz) only where you need it. * Best of both worlds: Secure-by-default, low-overhead, and incrementally adoptable.
the blast radius. Move from "breach prevention" to "breach containment." ❖ For SREs: Uniform Observability. You can log every allowed and denied request. (A spike in 403s is a critical signal!) ❖ For Developers: Ship features faster. Stop writing security boilerplate. Security is now an enabling feature, not a bottleneck.
for you? (Read "To Mesh or Not to Mesh?") ❏ Crawl (L4): Install Istio Ambient. Enable PeerAuthentication in PERMISSIVE mode. Just observe. ❏ Walk (L4): Move critical services to STRICT mTLS. ❏ Run (L7): Deploy a WaypointProxy for one critical service and add a strict AuthorizationPolicy. ❏ Iterate and expand. This is a journey, not a switch.