Zero trust without the hype: what it is and when to use it
For non-engineers who keep hearing "zero trust" and want the practical meaning, not the slogan. This guide explains where zero trust sits in a real system, how a request actually gets allowed or blocked, and when the extra complexity is worth it.
TL;DR — Zero trust does not mean "trust nothing" in a dramatic sense; it means stop giving broad access just because someone is on the company network. The most useful practical move for most teams is: put internal apps behind identity-based access (your login provider plus device and policy checks) instead of exposing them by VPN or office-network rules alone. Reading time: ~7 min
What it is and where it sits
Zero trust is a security approach where every access request is checked based on identity (who you are), device state (is this a managed/approved laptop), context (where, when, risk), and policy (what this person is allowed to do). The key idea is simple: being "inside the network" should not automatically grant access.
Without the marketing, zero trust usually replaces one old assumption:
- Old model: "If you are on the office Wi‑Fi or connected to the VPN (virtual private network), you can probably reach internal systems."
- Zero trust model: "Each app, admin panel, database, and API checks access per request or per session, using identity and policy."
Where it sits in a typical architecture
In a normal web setup, a user talks to an app through DNS, TLS (encrypted connection), and HTTP. Zero trust usually sits in front of the app, or inside the app, or both:
- In front of the app: an access proxy or gateway checks login and policy before traffic reaches the app.
- Inside the app: the app itself checks roles and permissions after the user is authenticated.
- Around admin and infrastructure tools: SSH, cloud dashboards, Kubernetes, databases, and internal admin pages get the same treatment.
What talks to it:
- Users in a browser
- Mobile or desktop apps
- Service-to-service calls between backend systems
- Admin tools like SSH clients, database tools, and cloud consoles
What it replaces or reduces:
- Flat internal networks where many systems can talk to many others
- "Connect to VPN, then everything is reachable"
- Shared passwords for internal tools
- IP allowlists (lists of approved network addresses) as the main control
A common request flow looks like this:
View as text
[User Browser] ---- 1. GET app.example.com ----> [Access Proxy] [User Browser] <---- 2. redirect to login ---- [Access Proxy] [User Browser] ---- 3. sign in ----> [IdP] [IdP] ---- 4. identity token ----> [Access Proxy] [Access Proxy] ---- 5. allowed request ----> [Internal App] [Internal App] ---- 6. app/data response ----> [Access Proxy] [Access Proxy] ---- 7. HTTPS response ----> [User Browser]
The IdP (identity provider, such as Google Workspace, Microsoft Entra ID, Okta, or similar) proves who the user is. The access proxy enforces the rule: for example, "Only Finance group members on managed devices may open the billing admin app."
How it actually works
The mechanism is less magical than the term suggests. A zero trust system usually does four concrete things:
- Authenticate the user — send them to the IdP to log in.
- Evaluate policy — check group membership, device posture, location, time, risk, and app-specific rules.
- Issue short-lived access — create a session cookie or token with a limited lifetime.
- Re-check on new sessions or sensitive actions — especially for admin actions, data exports, or unusual behavior.
One realistic end-to-end example
Let’s use a common case: your company has an internal admin app at admin.example.com. Today it is reachable only over VPN. You want to replace that with identity-based access.
Step 1: User opens the app
A finance manager types https://admin.example.com into a browser.
Instead of the app being directly open to anyone on the VPN, traffic first hits an access proxy. This could be a reverse proxy (a server that sits in front of your app) or a cloud access gateway.
Step 2: The proxy sees no valid session
The proxy checks for a valid session cookie or token. There is none, so it does not forward the request to the app yet.
It redirects the browser to the company IdP login page.
Step 3: The user signs in with the company account
The user logs in with email, password, and MFA (multi-factor authentication, such as an authenticator app code or security key).
The IdP returns a signed identity assertion — usually using OIDC (OpenID Connect, a standard login protocol) or SAML (an older enterprise login standard).
Step 4: The proxy checks policy
Now the proxy evaluates rules such as:
- user is in the
finance-admingroup - MFA was completed in this session
- device is marked compliant by your device management system
- country is allowed
- access time is within business hours for this app
If any rule fails, the request stops here with an access denied page.
Step 5: The proxy forwards identity to the app
If policy passes, the proxy forwards the request to the internal app and often adds headers such as the user email or user ID.
The app can then do its own finer checks, like:
- finance managers can view invoices
- only controllers can approve refunds over $10,000
This is important: zero trust at the edge does not replace app authorization. It narrows who can reach the app; the app still decides what they can do inside it.
Step 6: The app calls the database
The app talks to Postgres or another database using its own service account. In a stronger zero trust design, the database is not directly reachable from employee laptops at all — only from the app service.
That means the finance manager can use the app, but cannot open a database client and connect straight to production data just because they are "internal."
Step 7: Logs are recorded
The proxy logs who requested access, from which device or IP, whether MFA passed, and whether access was allowed or denied. The app logs what the user actually did.
That audit trail is one of the biggest practical benefits: you can answer "who accessed what, when, and under which policy?"
When to use it (and when not to)
Zero trust is useful when you have multiple internal systems, remote staff, contractors, sensitive data, or compliance requirements. It is less useful when people are trying to use it as a fancy label for basic login.
| Scenario | Recommendation |
|---|---|
| Internal admin tools currently exposed by VPN only | Strong yes. Put them behind identity-based access first. |
| Team is remote/hybrid and uses many SaaS and internal apps | Yes. Per-app access is usually easier to manage than broad network access. |
| You handle customer financial, health, or regulated data | Yes. The audit trail and least-privilege controls are usually worth it. |
| Small brochure website with no internal admin users beyond normal app login | Probably no. Standard authentication and good hosting practices are enough. |
| Single small app used by 3 people on one network | Probably not yet. The operational overhead may exceed the benefit. |
| You want to solve all security problems with one project | No. Zero trust helps access control; it does not replace patching, backups, secure coding, or monitoring. |
You probably don’t need this if...
- your only real need is "users should log in to the app" — normal app authentication may be enough
- you have no internal tools, no sensitive back-office systems, and no contractor access
- your team cannot yet manage identity groups, device inventory, or access reviews
A good rule: if your main problem is user login inside one app, start with app auth. If your problem is controlling access across many internal apps and admin surfaces, zero trust is the right category.
Trade-offs
Zero trust has real benefits, but each one costs something.
-
Benefit: smaller blast radius (if one account or laptop is compromised, access is narrower)
- Cost: more policy design work, more exceptions, more support tickets when rules are too strict
-
Benefit: better visibility and audit logs
- Cost: more systems to integrate and monitor; logs may contain sensitive metadata that must be retained carefully
-
Benefit: less dependence on VPN
- Cost: you still need secure paths for some protocols and legacy systems; not everything fits neatly behind a browser-based access flow
-
Benefit: easier contractor and third-party access
- Cost: identity lifecycle management becomes critical; if offboarding is sloppy, risk remains
-
Benefit: per-app access instead of broad network access
- Cost: more moving parts between user and app, which can add latency and failure points
-
Benefit: stronger security posture for remote work
- Cost: device compliance checks can frustrate users on personal devices or unmanaged machines
-
Benefit: centralized policy
- Cost: possible vendor lock-in if your access rules, device checks, and logs live mainly in one provider
In plain terms: zero trust usually improves security and control, but it also turns access into a product you have to operate.
In practice
Below are two practical examples you could adapt today. The first is app-level protection with nginx and an auth service. The second is database hardening so employees cannot bypass the app.
Example 1: Put an internal app behind an auth-checking reverse proxy
If your app already trusts headers from a front proxy, nginx can require a successful auth subrequest before forwarding traffic.
server {
listen 443 ssl http2;
server_name admin.example.com;
location / {
auth_request /_auth;
error_page 401 = @login;
auth_request_set $user $upstream_http_x_auth_request_email;
proxy_set_header X-User-Email $user;
proxy_set_header Host $host;
proxy_pass http://admin_app:8080;
}
location = /_auth {
internal;
proxy_pass http://auth_gateway:4180/auth;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}
location @login {
return 302 https://login.example.com/start?rd=$scheme://$host$request_uri;
}
}
This sends every request to an auth gateway first; only authenticated users reach the app, and the app receives the user email in a header. Gotcha: the app must trust that header only from nginx, not from the public internet, or a user could spoof it.
Example 2: Restrict Postgres so only the app network can connect
A common zero trust improvement is not just protecting the app, but also removing direct employee access to the database.
⚠️ Editing Postgres network rules can lock out legitimate connections and cause downtime. Before changing this file, confirm you have console access or a tested rollback path in your hosting dashboard.
In your Postgres host, edit pg_hba.conf and allow only the app subnet:
# TYPE DATABASE USER ADDRESS METHOD
host appdb app_user 10.20.30.0/24 scram-sha-256
host all all 0.0.0.0/0 reject
Then reload Postgres:
sudo systemctl reload postgresql
This allows the application subnet to connect as app_user and rejects all other IPv4 clients. Gotcha: if your app servers use changing IPs, use a stable private subnet or service network first; otherwise you will break app connectivity during scaling or failover.
Dashboard-first actions you would usually take
Because exact screens vary by provider, use these common paths:
- In your DNS or edge provider dashboard:
DNS/RecordsorDomains→ pointadmin.example.comto the access proxy - In your identity provider dashboard:
ApplicationsorEnterprise Apps→ add a new OIDC/SAML app foradmin.example.com - In your access provider or proxy settings:
Access PoliciesorApplications→ require company login, MFA, and the right group - In your cloud firewall dashboard:
Networking→Firewall RulesorSecurity Groups→ allow Postgres only from app servers, not from the internet or employee IP ranges
If you do have shell access, a simple check after rollout is:
curl -I https://admin.example.com
A protected app should usually return a redirect to login or a 401/403 when unauthenticated, not the app content itself.
Further reading
- NIST SP 800-207 Zero Trust Architecture
- Google BeyondCorp papers
- OpenID Connect Core 1.0
- OWASP Application Security Verification Standard
- The "Authentication" and "HTTP access control (CORS)" sections of the MDN Web Docs
This article was written by an AI system and published pending human review. Verify anything you intend to act on.
Have a project in mind?
Get an instant AI price estimate for it, or talk directly to our team.
One email a month on what we learn building with AI