Problem
Flat internal networks let a single compromised credential or host reach most systems. VPN access grants broad trust once and rarely revisits it. Attackers who get inside move laterally with little resistance.
Move from perimeter-based trust to continuous verification of every user, device, and workload request.
Flat internal networks let a single compromised credential or host reach most systems. VPN access grants broad trust once and rarely revisits it. Attackers who get inside move laterally with little resistance.
Zero trust assumes no request is trustworthy because of its network location. Every access decision is made using identity, device state, and context, and is evaluated each time. Adoption is a program of incremental enforcement, not a product purchase.
The program succeeds when it is sequenced by risk rather than by technology. Start with administrative access and the most sensitive data stores, where one stolen credential does the most harm, and use early results to justify broader rollout and tooling investment.
A policy decision point evaluates each request against rules: who is the caller (user or workload identity), is the device compliant, what resource is requested, and does risk context such as location or time allow it. A policy enforcement point, such as an identity-aware proxy or service mesh sidecar, allows or denies the request. Short-lived credentials replace long-lived network trust, and all decisions are logged for analysis.
Communicate changes to users early and provide self-service ways to request access and report false denials. Friction is the main driver of workarounds that quietly rebuild the trust you removed.
Percentage of applications behind identity-aware access, share of east-west traffic using mutual TLS, count of standing privileged accounts, median credential lifetime, policy denial rate, and time to revoke access after offboarding.
Publish the numbers to application owners, not only security. When teams see how many unused permissions they hold and how often policies would have blocked an unusual request, they engage with least privilege rather than fighting it.
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: orders-read
namespace: orders
spec:
selector:
matchLabels:
app: orders-api
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/checkout/sa/checkout-web"]
to:
- operation:
methods: ["GET"]
paths: ["/orders/*"]