Zero Trust Is an Engineering Strategy, Not a Security Product
Share this post

1. Manifesto

Most Organizations Already Believe in Zero Trust. Very Few Have Engineered It.

Belief is cheap. Every enterprise security strategy deck written in the last five years contains the phrase. Every board has approved a budget line for it. Every architecture team can recite the principle. And yet, in almost every organization we walk into, the same thing is true: an engineer with a valid laptop, a valid session, and a valid reason to be somewhere can reach systems nobody intended them to reach, using a path nobody documented, through a service account nobody owns, holding a token nobody will ever revoke.

That gap — between the belief and the engineering — is the entire subject of this document. It is also the reason so much cybersecurity strategy reads well and changes nothing: a strategy that specifies outcomes without specifying who changes which defaults, in which repository, on which date, is a description of a destination rather than a route to it.

Zero Trust did not fail those organizations. It was never attempted. What was attempted was procurement. A product was bought. An agent was deployed. A gateway was placed in front of a subset of applications. A policy engine was licensed and configured with eleven rules, three of which are allow * with a comment saying // temporary, remove after migration, dated four years ago.

Here is the position this handbook takes, stated plainly so it can be argued with:

Zero Trust is not a security capability that sits beside your architecture. It is a property that emerges — or fails to emerge — from thousands of ordinary engineering decisions, most of which are not made by the security team, most of which are not made in a security review, and most of which are not made on a day anyone was thinking about security at all.

Security architecture is decided in pull requests. It is decided when a platform engineer chooses whether the internal service mesh requires mutual TLS by default or by opt-in. It is decided when a developer, blocked on a Friday afternoon, is given a wildcard IAM role instead of a scoped one, "just to unblock the demo." It is decided when a product manager negotiates away a re-authentication prompt because it hurt conversion by 0.4%. It is decided when someone writes a Terraform module that becomes the template for the next four hundred services, and that module has a default that nobody will ever read again.

None of those moments look like security decisions. All of them are.

This is why buying Zero Trust does not work. You cannot purchase a property of a system you did not design. You can only purchase components, and components inherit the assumptions of the architecture they are dropped into. Install the most sophisticated policy decision point in the world into an environment where every service holds a long-lived credential with broad scope, and you have not built Zero Trust. You have built a very expensive audit log of decisions that were already predetermined elsewhere.

What we are actually arguing

Three claims, which the rest of this document defends:

First: trust is a resource, and it behaves like one. It is created, consumed, transferred, delegated, cached, inherited, and — rarely, painfully — revoked. Like any resource in a distributed system, it can leak. It accumulates in places nobody is watching. It has a lifecycle, and most organizations have engineered the creation path with enormous care and the destruction path not at all.

Second: security engineering is fundamentally about the default case. Not the exception. Not the incident. The default. What happens when nobody is paying attention, when the on-call engineer is tired, when the deadline is tomorrow, when the integration partner says their system cannot support short-lived credentials. Your security posture is not the policy you wrote. It is the path of least resistance you left open.

Third: an organization's trust topology mirrors its org chart, its incentive structure, and its deployment pipeline far more closely than it mirrors its security policy. Conway's Law applies to authorization. If two teams cannot get a scoped permission provisioned in under a week, they will share one. If ownership of a service account is ambiguous, its permissions will only ever expand. If the fastest way to ship is to bypass the control, the control is decorative.

What this document is not

It is not an implementation guide. There is no reference architecture here, no vendor evaluation matrix, no mapping to a published framework's control families. Those documents exist, they are useful, and they are not this.

It is not a tutorial. We assume you know what a JWT is, what a service mesh does, what workload identity federation means, and why network location stopped being a meaningful security boundary somewhere around the second time your organization acquired a company.

It is not a compliance artifact. Nothing here will help you pass an audit faster, and some of it will make audits more uncomfortable, because it will force you to look at things that are currently invisible to auditors precisely because nobody has named them.

It is a handbook about engineering culture, systems design, and the discipline of building software where trust must be continuously earned rather than historically assumed.

The five-year framing

If you are planning a transformation on this scale, one honest expectation is worth setting now: the technology is the easy part.

The hard parts, in rough order of difficulty:

  • Establishing ownership for every identity in your estate, including the ones created by a contractor in 2019.
  • Making the secure path the fast path, so that engineers choose it under deadline pressure without needing to be virtuous.
  • Building the revocation machinery you never built, and discovering how much of your business quietly depends on credentials that cannot be rotated.
  • Convincing leadership that a program whose primary output is the absence of incidents deserves five years of funding.
  • Sustaining the discipline after the third reorg, when the architects who understood the design have moved on and the remaining team inherits a system whose reasoning was never written down.

That last one is why this document exists in the form it does. The reasoning must be written down. Not the configuration — the reasoning.

Let's begin where every honest assessment begins: with what your organization already believes it has finished.


2. Reality Check

The Five Sentences That End Most Security Reviews

Every architecture review we have sat in contains some subset of the following statements, delivered with the confidence of a closed question:

"We have MFA." "We're behind the VPN." "We use cloud IAM." "Everything is encrypted, at rest and in transit." "We have EDR on every endpoint."

Each of these is true. Each represents real engineering work and real money. And each, individually and collectively, is orthogonal to whether the system exhibits Zero Trust properties. Let's take them one at a time, not to dismiss them, but to be precise about what they actually establish.

"We have MFA"

MFA is an authentication event. Zero Trust is concerned with authorization state over time.

The distinction matters enormously and is almost universally elided. MFA answers the question: at the moment of login, did the human present two factors? It says nothing about the eleven hours that follow. It says nothing about the session token issued as a result, which now travels through your system as a bearer credential that any component holding it can replay. It says nothing about whether the device the human authenticated from was already compromised, in which case the attacker inherited the MFA rather than defeating it.

And critically, in most enterprises, MFA covers humans logging into applications. It covers approximately none of the machine-to-machine traffic, which is where the overwhelming majority of authorization decisions actually happen. Your payment service does not do MFA when it calls your ledger service. It presents a credential that was issued once and has been valid ever since.

The engineering question MFA does not answer: what is the confidence level of this identity right now, at this call, for this operation, given everything the system has observed since the login event?

"We're behind the VPN"

The VPN establishes that a packet originated from a device that completed a tunnel handshake. It is a transport-layer statement about location, repurposed as an application-layer statement about intent.

This is the original sin of enterprise network security: the conflation of where a request comes from with what a request is entitled to do. Once a request is inside the perimeter, the perimeter has no further opinions. The VPN concentrator does not know whether the request is a developer reading a dashboard or an attacker who phished that developer's credentials four hours ago and is now enumerating the internal service catalog at a leisurely pace, from the same IP, over the same tunnel, with the same session.

Worse, VPNs create an architectural gravity well. Because being "inside" confers access, everything wants to be inside. Contractors get VPN access. Partner integrations get site-to-site tunnels. The acquisition gets a network peering because full identity federation would have taken nine months. Each of these is a rational local decision that expands the definition of "trusted" until it means "anyone with a tunnel."

The engineering question the VPN does not answer: if the network provides no security guarantee, does every service still behave correctly? For most enterprises the honest answer is no — there are internal endpoints that authenticate nothing, because they were built assuming the network would.

"We use cloud IAM"

Cloud IAM is genuinely excellent technology. It is also, in most organizations, configured as a slightly more granular version of the thing it replaced — identity and access management inherited from a directory-era mental model and re-expressed in newer syntax. Cloud security posture, in practice, is mostly a readout of how carefully that translation was done.

Three failure patterns recur. The first is role sprawl with permission accretion: roles are created per team or per project, permissions are added when something breaks, and permissions are never removed, because removing them risks breaking something and produces no visible benefit. The result is a role landscape where the median role grants two orders of magnitude more than its holders use.

The second is the trust policy nobody reads. IAM's real power is in the assume-role graph — who can become whom, under what conditions. That graph is rarely drawn. Ask any large organization to produce a complete picture of which principals can, through some chain of role assumptions, arrive at administrative privilege in production. The exercise typically takes weeks and the answer is typically alarming.

The third is identity without ownership. Cloud IAM will happily tell you that a role exists and what it can do. It will not tell you who is accountable for its continued existence, whether the system that uses it still exists, or whether the human who created it still works here.

The engineering question cloud IAM does not answer by default: for every principal in this account, who owns it, what business function justifies it, and what would break if it were deleted tomorrow?

"Everything is encrypted"

Encryption protects data from parties who do not have the key. It has essentially nothing to say about parties who do.

Nearly every significant breach of the last decade involved an attacker operating with legitimate cryptographic access — a stolen credential, a compromised service identity, a session token lifted from a browser, an over-permissioned role assumed through a chain nobody had mapped. In none of these cases did encryption fail. In all of them it worked perfectly, faithfully protecting the data in transit from everyone except the attacker, who was inside the tunnel.

The encryption conversation is comfortable because it is a solved engineering problem with clear success criteria. The key management and access conversation is uncomfortable because it is a permanent organizational problem with no terminal state. Organizations gravitate toward the comfortable conversation.

The engineering question encryption does not answer: who can decrypt, under what conditions, with what justification, observed by whom, and for how long does that ability persist after the justification expires?

"We have EDR everywhere"

Endpoint detection tells you what happened on a device. It is observational, not structural. It improves your ability to notice a compromise; it does not change what the compromise can reach.

There is a subtler problem. Endpoint tooling implicitly reinforces the device-as-trust-anchor model: if the device is clean, the user is trusted. But device posture is a snapshot, and the interval between the snapshot and the request is where attacks live. More importantly, the workloads that matter most in a modern enterprise — ephemeral containers, serverless functions, CI runners, AI agents — are not endpoints in the sense EDR was built for. Your build pipeline, which can push code to production, is frequently the least monitored, most privileged, least identity-governed system you operate.

The engineering question EDR does not answer: given that a compromise will eventually happen, what is the blast radius, and did the architecture bound it or merely record it?

The compositional fallacy

Here is the underlying error, and it is worth naming precisely, because it recurs at every level of security thinking:

Security properties do not compose additively. Five strong controls arranged in series along one path do not secure the seven other paths. An attacker does not need to defeat your strongest control; they need to find the interaction between two controls where neither one is responsible for the gap.

A concrete and entirely typical example. An organization has: MFA on the identity provider, a VPN for internal access, scoped IAM roles, encryption throughout, and EDR on laptops. An attacker phishes a developer, defeating MFA through a real-time proxy. The stolen session gives access to the internal Git host — through the VPN, from the developer's own clean laptop. The developer's account can trigger CI. CI runs with a service identity that, for historical reasons, holds deployment rights to production. The service identity's credentials are long-lived, because rotating them once broke a deploy in 2021 and nobody has attempted it since. The attacker never touched an endpoint anomaly, never decrypted anything they weren't given the key to, and never used a privilege that wasn't already granted.

Every control worked. The system failed.

That is the compositional fallacy, and no product solves it, because the vulnerability does not live in any component. It lives in the relationships between components — which is to say, in the architecture. Which is to say, in engineering.


3. Trust as a System Property

We are going to avoid defining Zero Trust. Definitions of it are abundant, mutually consistent, and operationally useless — they describe a destination without describing the physics of the terrain.

Instead: a model of how trust actually moves through an engineering system. Treat trust as a resource with a lifecycle, subject to the same reasoning you would apply to memory, connections, or any other managed resource in a distributed system. Once you do, a set of familiar engineering intuitions becomes available — leak detection, ownership, lifetime management, garbage collection, budgeting — and they turn out to be exactly the right intuitions.

Trust is created

Every trust relationship in your system has an origin: a moment where an assertion was made and accepted. A human authenticated. A workload was issued an identity by its orchestrator. A certificate was signed. An API key was generated and pasted into a config. A partner was onboarded. A role was created "temporarily."

Creation events are where organizations invest almost all of their security effort, and it is easy to see why: they are discrete, they are visible, they are auditable, and they can be gated. Login flows get MFA. Certificate issuance gets a CA policy. New IAM roles get a review.

The problem is that creation is one event in a lifecycle that may last a decade, and it is the only part of the lifecycle most organizations have engineered.

Trust is consumed

Trust is spent every time it is presented to make something happen. Each API call, each database query, each deployment, each file read.

The critical property here: consumption is usually unmetered. Trust in most systems behaves like an unmetered utility — a credential valid for one operation is valid for ten thousand. This is why credential theft is so devastating and so cheap: the marginal cost of the ten-thousandth use is zero, and in most architectures the ten-thousandth use looks exactly like the first.

Metering consumption — not just logging it, but making the rate and pattern of consumption an input to future authorization decisions — is one of the highest-leverage engineering changes available, and one of the least frequently implemented.

Trust is transferred

This is where systems get genuinely difficult, and where most Zero Trust programs quietly stop.

A user calls the API gateway. The gateway calls the orders service. The orders service calls the inventory service, the pricing service, and the ledger. The ledger writes to the database and publishes an event. A consumer picks up that event and calls a third-party tax API.

Somewhere in that chain, the user's identity stops travelling and something else takes over — usually a service identity with static, broad permissions. Ask an engineering team where exactly that transition occurs and you will typically get a pause, then a guess, then a slack thread that lasts two days.

The transition point is the most security-relevant fact about your architecture, and it is almost never documented.

When trust is transferred, three things can happen to it:

  • Attenuation — the downstream call carries less authority than the upstream one. This is what you want, and it almost never happens by default.
  • Preservation — the downstream call carries exactly the original authority, no more. Achievable with token exchange and careful design.
  • Amplification — the downstream call carries more authority than the caller had. This is the default in nearly every enterprise system, and it is the mechanism behind the confused deputy problem: a low-privilege caller induces a high-privilege service to act on its behalf.

Every architecture review should ask, at every hop: does authority attenuate here, or amplify? The aggregate answer across your call graph is your real security posture.

Trust is delegated

Delegation is transfer with an added layer of indirection: acting on behalf of someone. OAuth grants, agent permissions, admin impersonation, automation configured with a human's credentials, the CI system that deploys "as" the team.

Delegation chains have a nasty property: they are rarely traversable after the fact. When something goes wrong, the audit log shows the service account. The service account was acting for the pipeline. The pipeline was triggered by a merge. The merge was approved by a human. Reconstructing that chain across four systems with four different log formats and three different identity representations is a forensics exercise measured in days.

If your architecture cannot answer "which human, if any, is ultimately responsible for this action" in a single query, you do not have delegation. You have laundering.

Trust is inherited

The most invisible mechanism of the set. A workload inherits the permissions of its node. A container inherits the credentials mounted into it. A new service inherits the Terraform module's defaults. A team inherits the group memberships of the team it was split from. An acquired company inherits network reachability the day the peering is established.

Inheritance is dangerous because it is silent and transitive. Nobody granted the permission; it arrived. And because nobody granted it, nobody owns it, and nobody will ever remove it.

The engineering discipline here is simple to state and hard to sustain: defaults are policy. The module default, the base image, the platform's standard role, the scaffolding template — these determine the security posture of every system built after them, forever, with far more force than any written standard. Spend your architectural energy accordingly.

Trust is measured — or isn't

Here is the asymmetry at the center of most enterprise security: trust is granted as a boolean and revoked as a project. This is also why least privilege is so often described as a principle rather than practiced as a measurement — a principle needs agreement, a measurement needs instrumentation, and security governance in most organizations has plenty of the first and almost none of the second.

Access decisions are binary at the moment of grant — allowed or denied. But the underlying reality is continuous: this identity, on this device, from this location, at this hour, performing this operation, at this rate, with this history, carries some confidence level. Most systems collapse that continuum to a bit, once, at the beginning, and then never revisit it.

The Continuous Trust Equation, stated as an engineering intuition rather than a formula:

Confidence at time t = (strength of the original assertion) × (decay since assertion) × (behavioral consistency since assertion) × (current posture of the identity's context) ÷ (sensitivity of the requested operation)

You will not compute this literally. The point is what it makes visible: confidence is a function of time, and its derivative is negative. Every system that treats an authentication event as permanently valid is implicitly asserting that decay is zero. That assertion is false in every real environment.

Trust decays

Which brings us to the framework this whole document keeps returning to.

Permission Half-Life: the period after which a granted permission is, on average, only half as justified as it was when granted.

The half-life differs sharply by permission type. An emergency break-glass admin grant has a half-life measured in hours — the justification evaporates when the incident closes. A developer's access to a specific service they actively maintain has a half-life measured in quarters. A service account's read access to a stable dataset might have a half-life of years.

Almost nobody assigns half-lives. Instead, every permission is granted with an implicit half-life of infinity, and then an annual access review attempts to correct the accumulated error in a single, exhausting sweep — a sweep whose outcome, in practice, is that ninety-five percent of permissions are recertified by a manager clicking "approve all" because the alternative is breaking something they don't understand.

The Authorization Decay Curve is the picture that follows: permission justification falling smoothly toward zero over time, while granted permission remains flat. The area between those two lines is your standing risk — access that exists without justification. Every organization has this area. Very few measure it, and the first time you do, the number is genuinely shocking.

Trust is revoked — badly

Ask an engineering team how long it takes, from decision to full effect, to remove all access for a compromised identity. Not disable the account — remove all access.

The honest answer usually involves: the IdP session (immediate), the issued OIDC token (valid until expiry, typically an hour, sometimes eight), cached authorization decisions in various services (unbounded), the personal access token they created for a script (until someone finds it), their SSH key on a legacy host (until someone greps for it), their membership in a group that grants access to a third-party SaaS that syncs nightly (up to 24 hours), and the API key they pasted into a partner's system during onboarding (indefinitely).

Revocation latency is a first-class architectural property, and it should have an SLO. Most organizations have never measured it, have no target for it, and would be unable to improve it without significant redesign. This is the single most reliable diagnostic we know of: an organization that cannot state its revocation latency has not engineered Zero Trust, regardless of what it has purchased.

The Trust Dependency Network

Assemble all of this and you get the object that actually describes your security posture: not a list of controls, but a graph.

Nodes are identities — human, workload, service, agent, partner, device. Edges are trust relationships, directed, each annotated with: what authority flows, how it was established, whether it attenuates or amplifies, its half-life, who owns it, and how quickly it can be severed.

Two properties of this graph matter more than anything in your control inventory:

Reachability. From any compromised node, what is the transitive closure of what an attacker reaches? Not what they're supposed to reach — what the edges permit. In most enterprises, a startling number of nodes have a path to production administrative capability, and the paths run through places nobody thinks of as privileged: the monitoring agent that needs read access everywhere, the backup service that needs write access everywhere, the CI runner that needs deploy access everywhere.

Severability. For any edge, how quickly and cheaply can it be cut? Edges you cannot cut are not security relationships; they are structural dependencies. A trust relationship that cannot be revoked without a business outage is a permanent grant with extra paperwork.

The rest of this document is, in one way or another, about drawing that graph, understanding it, and then engineering it deliberately rather than inheriting it accidentally.


4. The Trust Journey

One Request, Ten Decisions

A field walkthrough. No diagrams — the point is the reasoning, not the boxes.

A regional finance manager named Dana opens her laptop at 07:42 and approves a supplier payment of €340,000. Between her fingertip and the money leaving the account, the system makes ten distinct trust decisions. In most enterprises, two of them are real and eight are assumed.

Let's walk it.

Stage 1 — Identity

Dana authenticates. Password, then a passkey. The IdP issues a token.

What was actually established: at 07:42:11, an entity presented credentials bound to Dana's account and a device-bound authenticator.

What was not established: that the entity is Dana. Passkeys raise the cost of impersonation enormously — phishing-resistant binding is a genuine architectural improvement, not a marginal one — but the claim remains probabilistic. The engineering posture is not "we verified Dana," it is "we obtained a high-confidence assertion with specific properties and a specific decay profile."

The design question at this stage is not how do we authenticate? It is: what is the confidence score of this assertion, is it carried forward as a structured claim, and can downstream systems reason about it? Nearly always, the answer is that the confidence is discarded at the door. The token says sub: dana@, not sub: dana@, auth_method: passkey, auth_strength: high, auth_time: 07:42:11. Everything downstream is now blind to the quality of the assertion that started the chain, and blindness at stage 1 propagates through all nine remaining stages.

The Identity Continuity Model is the framework for this: an identity is not a login, it is a continuously maintained belief that must be re-evidenced as it travels. Every hop either carries evidence forward, or launders it into an unqualified assertion. Design each hop knowing which it does.

Stage 2 — Device

Dana's laptop is corporate-managed, compliant, patched as of yesterday.

The subtlety: posture is a cached observation, and every cached observation has staleness. Was compliance evaluated at boot? At login? Continuously? If the answer is "at enrollment," the device signal is closer to a historical artifact than a live control.

The harder question, rarely asked: what happens to authorization when device signal is unavailable? Dana is travelling; the posture agent cannot reach its backend. Does the system fail closed (Dana cannot approve the payment, and calls the help desk, and someone eventually adds an exception that becomes permanent) or fail open (device signal silently drops out of the decision and nobody notices)?

Fail-open exceptions are how controls die. Not through defeat — through accumulation of reasonable exemptions, each individually justified.

Stage 3 — Network

The request traverses the corporate network, or a hotel Wi-Fi, or a mobile hotspot.

The Zero Trust position is that network location should contribute nothing to the authorization decision. In practice, most organizations are somewhere on a spectrum, and the interesting engineering exercise is to find out exactly where. The test is straightforward and uncomfortable: take a single internal service and place it on the public internet with its existing authentication. If the team's reaction is "we can't, it doesn't authenticate properly" — you have located a load-bearing network assumption. Catalogue every one of them. That catalogue is your migration backlog.

Note that network position may still be a useful signal — an anomalous origin is evidence — as long as it is treated as an input to a confidence calculation, never as a grant of authority.

Stage 4 — Application

The payments application receives the request and evaluates: is Dana authorized to approve payments in this region, within this limit?

This is where the majority of real authorization logic lives, and where it is most frequently wrong — not because engineers are careless, but because business authorization rules are genuinely complex and tend to be encoded imperatively, in handlers, over years, by different people.

Three questions worth asking of any application's authorization layer:

  • Is the policy externalized or embedded? Embedded policy cannot be audited, tested independently, or reasoned about across services.
  • Is it default-deny? Including for routes added last Tuesday by someone who forgot the annotation.
  • Does it evaluate on every request, or once per session? Cached authorization is stale authorization, and staleness is the enemy of revocation.

Stage 5 — API

The payments application calls the ledger service.

This is the stage where most Zero Trust programs end. Everything that gets called API security from here on is really a question about what identity crosses the wire. Everything up to here was the user-facing path, where investment concentrates. Now we are in machine-to-machine territory, and the honest question is: what identity does this call carry?

The three common answers, in ascending order of maturity:

  1. A shared secret. The payments service holds a static API key. Any code in that service, and anything that reads its environment, can call the ledger with full authority. Blast radius: the entire service.
  2. A workload identity. The service authenticates with a short-lived, cryptographically attested identity issued by the platform. Better — the credential is bound and rotating — but the ledger still only knows which service is calling, not on whose behalf.
  3. A delegated, attenuated credential. The call carries a token exchanged from Dana's original assertion, scoped down to precisely this operation, valid for seconds. The ledger can enforce Dana's limits directly rather than trusting the payments service to have done so.

The gap between (2) and (3) is where the confused deputy lives. In model (2), if an attacker can induce the payments service to make a ledger call, the ledger will honor it — because the ledger trusts the service, and the service is the one asking.

This is the practical meaning of runtime security: not scanning artifacts before they ship, but evaluating, at the moment of the call, whether this particular action by this particular caller is justified right now.

The design principle: services should authenticate intent, not merely origin. Origin tells you which process is calling. Intent tells you what business action is being requested, for whom, under what authority. Only intent can be checked against a policy that means something.

Stage 6 — Workflow

The payment enters an approval workflow. Above €250,000, a second approver is required.

Workflow engines are, in our experience, the least-examined privileged systems in the enterprise. They are typically deployed with a single powerful identity, they orchestrate across trust boundaries by design, and their configuration is edited by business analysts through a UI that produces no meaningful audit trail and is not in version control.

Ask of any workflow engine:

  • Can the workflow definition be modified without code review?
  • Does the engine execute steps with its own privileges or with the requester's?
  • Can a workflow be triggered directly, bypassing its intended entry conditions?
  • Is a retry authorized the same way as an initial attempt? (Retry paths are a classic gap — the second attempt often skips the checks the first one passed.)

Stage 7 — Data

The ledger reads the supplier record and writes a transaction.

Data-layer trust is where the abstraction most often collapses. The application enforced that Dana can only approve for her region. The database connection has no such constraint — it is a single pooled connection with broad rights, shared across all users of the service. If there is an injection flaw, a logic error, or a compromised service, the data layer will faithfully serve everything, because from its perspective the request is legitimate.

Row-level security, per-tenant credentials, and query-level policy enforcement remain rare in enterprise systems, and the reason is honest: they are hard, they interact badly with connection pooling, and they impose real performance costs. But the architectural fact remains: if authorization is enforced only at the application layer, then the application layer is your entire security boundary, and every bug in it is a total compromise of the data behind it.

Stage 8 — Business rule

The payment is checked against sanctions lists, duplicate detection, supplier verification.

These are not usually thought of as security controls. They should be. They are the last line of defense that operates on semantics rather than identity — the only layer that can catch an action which is perfectly authorized and entirely wrong.

The Zero Trust framing: identity-based controls answer may this actor do this? Semantic controls answer should this action happen at all? A sophisticated attacker's goal is to reach a state where the answer to the first question is yes. The second question is the one they cannot satisfy by stealing credentials. Invest there.

Stage 9 — Audit

Every stage above emitted a log line, to a different system, in a different format, with a different identity representation.

The engineering test for audit quality is not volume; it is reconstructability. Given an outcome, can you reconstruct the complete decision chain — every identity, every delegation, every policy evaluation, every input — in a single query, within minutes?

If reconstruction takes days, your audit trail is a compliance artifact, not an operational capability. This distinction becomes acute during an incident, when the question "what else did this identity touch?" must be answered in minutes, not after a week of log correlation.

This is what the Operational Trust Ledger is for: a first-class, queryable record of trust events — grants, delegations, exchanges, escalations, revocations — kept as deliberately as a financial ledger, with the same expectation that it balances.

Stage 10 — Decision

The money moves.

Step back and count. Of the ten stages, how many made an active, contextual, revocable trust decision, and how many merely inherited a decision made upstream?

In a typical enterprise: stages 1 and 4 are real. Stage 2 is partial. Stages 3, 5, 6, 7 are inherited. Stage 8 is real but not identity-aware. Stage 9 is present but not reconstructable. Stage 10 is a consequence.

Two real decisions out of ten. That is the actual state of Zero Trust in most organizations that consider it implemented.

The transformation is not adding an eleventh control at the front. It is converting inherited stages into evaluated ones — and doing so without making the system so slow, brittle, or hostile that engineers route around it.


5. Design Notebook

Nine Questions Without Comfortable Answers

Working notes. Positions taken deliberately, so they can be disagreed with productively.

Should internal APIs trust each other?

No — but "trust" is the wrong axis. The useful question is: what should service A be able to induce service B to do, and does B verify that independently?

Mutual TLS between services is table stakes and solves the wrong problem: it establishes who is calling, which was rarely the ambiguity. The real problem is that B typically grants A a broad capability surface based on identity alone. If A is compromised, everything A could ever ask B to do is now available.

The engineering move is capability narrowing at the callee: B exposes not "the ledger API" to A, but "the specific operations A's business function requires," enforced by B, derived from a policy that is version-controlled and reviewed. This is more work than a network policy. It is also the difference between a compromised service being a foothold and a compromised service being a breach.

The uncomfortable corollary: this requires every service team to understand the business semantics of their callers. That is an organizational cost, and it is the real reason it doesn't happen.

Can automation bypass approval?

Automation should not bypass approval. It should be the thing that makes approval cheap enough to be universal.

The common pattern — humans require approval, automation does not — has the polarity exactly backwards. Automation acts faster, at greater scale, more repeatedly, and with less situational judgment than any human. A compromised pipeline is worse than a compromised admin in every dimension except one: it is less likely to be noticed, because its actions look like normal operation.

The design principle: the approval attaches to the change, not to the actor. A pipeline that deploys to production should be executing a change that was reviewed, in a form that cannot be modified between review and execution. The pipeline needs no standing privilege; it needs the ability to present a signed, reviewed artifact and receive a narrow, time-boxed capability to apply it.

This inverts the usual model. Instead of trusted actor performs arbitrary action, it becomes untrusted actor performs verified action. The second is far stronger and, counterintuitively, faster to operate — because you stop needing human gates on the actor once the artifact carries its own evidence.

Should administrators have permanent privileges?

No, and this is the least controversial position in this notebook and the least implemented.

The arguments for standing admin are always operational: emergencies, the 3 a.m. outage, the fear that the elevation system itself will be down when needed. These are legitimate and they have engineering answers — break-glass paths with independent availability, aggressive alerting, automatic expiry, mandatory post-hoc review.

What is not legitimate is the version where "just-in-time access" is implemented, and then the elevation request is approved automatically, in under a second, by a system that checks nothing except that the requester is in the admin group. This is standing privilege with a log line. It satisfies the audit and changes nothing about the attack.

The test: does the elevation ever fail? If your JIT system has never denied a request, it is not a control. It is telemetry.

Also worth stating: the goal is not to make admins uncomfortable. It is to shrink the window during which a compromised admin session is useful. Design for the compromise you cannot prevent, and the discomfort largely disappears — an approved four-hour elevation with clear scope is not meaningfully worse for the engineer than permanent access, and is dramatically better for the organization.

What happens after credentials leak?

This is the only question that reliably reveals whether an organization has engineered Zero Trust or purchased it.

The purchased answer: "we'd rotate the credential and investigate."

The engineered answer specifies: detection latency, revocation latency per credential type, the blast radius bounded by design, the reconstructability of everything the credential touched, and the mechanism ensuring the replacement credential is different in kind — shorter-lived, narrower, bound to a workload rather than a file.

The design implication is that leakage should be a routine, boring event, not a crisis. Achieving that means: credentials short-lived enough that most leaks expire before exploitation; credentials bound to context so that a stolen credential fails outside its intended environment; blast radius small enough that a single leak is a contained incident rather than an enterprise event.

Assume leakage. Design for the aftermath. Every architecture should be able to answer: if this credential were posted publicly right now, what would happen, and how long until it stopped mattering?

Should services authenticate humans, or intent?

Intent — and this is the most important architectural shift in this document.

Authenticating humans deep in the stack is impractical and, worse, misleading: it invites services to think they are making a decision about a person when they are actually making a decision about a token.

Authenticating intent means the credential presented to a service encodes the specific business action requested, its parameters, its originating authority, and its constraints. Not "Dana is calling" but "approve payment #8814 for €340,000 to supplier X, under Dana's authority, valid for 30 seconds, single use."

This has three consequences that justify the considerable effort:

  • Replay becomes worthless. A stolen intent-token authorizes one action that already happened.
  • Confused deputy becomes structurally difficult. The service cannot be induced to do something the token doesn't describe.
  • Audit becomes semantic. The log records what was intended, not just who connected.

The cost is real: token exchange infrastructure, latency, and a genuinely harder programming model. This is a five-year item, not a quarter item. Start with the highest-consequence flows — money movement, data export, production change — and let the pattern spread.

Should the security team own security?

No. The security team should own the system that makes security decisions legible; engineering teams own the decisions.

The centralized model fails at scale for a structural reason: the security team is never the bottleneck's owner. They can review, advise, and block, but they cannot be present for the thousands of daily decisions that determine posture. A team of forty cannot review the decisions of four thousand.

The workable model is the Security Ownership Graph: every identity, permission, trust relationship, and policy has a named owning team, and that ownership is queryable, enforced at creation time, and automatically escalated when it becomes stale (owner leaves, team dissolves, service is decommissioned). Central security owns the graph, the guardrails, the defaults, and the paved paths. Teams own their nodes.

The hardest part is not technical. It is that ownership must come with the authority to say no to your own product manager, which requires organizational backing that is frequently promised and rarely provided.

How much security can an engineering organization afford?

Here is the framework we find most useful in planning conversations: the Engineering Trust Budget.

Every organization has a finite budget of friction it can impose before engineers route around controls. This budget is real, it is measurable in developer surveys and in shadow-IT growth rates, and it is spent whether or not you account for it.

Bad security spends the budget on frequent, low-value friction: quarterly access reviews with no signal, mandatory training, approval steps for reversible low-consequence actions, tickets to get read access to a dashboard.

Good security spends the budget on rare, high-value friction: a hard stop before irreversible production data operations, a genuine second-person review for privilege escalation, a real approval for a new external data flow.

The discipline is to audit your friction spend the way you audit cloud spend. Which controls consume the most engineering hours per year? What is the security value of each? Most organizations discover their friction budget is dominated by controls with near-zero detection value, which is why the high-value controls get resented and eventually eroded.

Should we build or buy?

Buy the components. Build the composition. Never buy the composition.

Identity providers, secret managers, policy engines, certificate authorities, workload identity platforms — buy these. They are commodity, they are hard to build well, and the vendors are better at them than you.

The composition — how trust flows between your services, what your defaults are, where attenuation happens, how your paved paths work, what your revocation architecture looks like — is your architecture. This is what platform security actually is, and it is why mature DevSecOps programs converge on the same conclusion: the durable artifact is not the scanner in the pipeline, it is the paved path the pipeline defends. It cannot be bought because it is a statement about your system. Every vendor that claims to sell it is selling you a component plus a diagram of what your architecture would need to look like for the component to matter.

Is Zero Trust ever finished?

No, and any plan that implies otherwise should be treated as a warning sign.

Trust relationships are created continuously by ordinary engineering work. A new service, a new integration, a new hire, a new acquisition, a new AI agent — each adds nodes and edges. The graph grows faster than any review process can prune it.

The realistic goal is not a cleaned graph. It is a system where the graph is visible, where new edges are created through paved paths that make them attenuated and owned by default, and where the rate of unowned edge creation trends toward zero.

That reframing matters for how you fund the work. This is not a project with a completion date. It is a capability with an operating cost, like reliability. Nobody asks when SRE will be finished.


6. Six Myths, Dismantled

Not a checklist. Each myth is a belief that was once true, became false through architectural change, and persists because the systems built on it still work.

Myth 1 — "The internal network is safe"

Origin of truth: In 1998 this was nearly correct. The perimeter was physical, the endpoints were desktops in a building, and getting inside required getting inside.

How it became false: Remote work, cloud, SaaS, mobile, contractors, acquisitions, partner integrations, CI systems, and the simple fact that most compromises now begin with a legitimate credential rather than a network intrusion. An attacker with a phished session is inside the perimeter by definition, in the same instant they succeed.

Why it persists: Because thousands of internal services were built assuming it, and they still work. The belief is not maintained by argument; it is maintained by an installed base. Every unauthenticated internal endpoint is a small, load-bearing monument to the myth.

The engineering lesson: Network position is a signal, never a grant. The practical exercise: catalogue every service that would break if the network provided zero security guarantee. That list is not a risk register — it is a work queue, prioritized by consequence.

Myth 2 — "Admins need unlimited access"

Origin of truth: When systems were few and monolithic, effective administration genuinely required broad reach, and the tooling for scoped, temporary access did not exist.

How it became false: Modern platforms make scoped, temporary, audited elevation entirely practical. And the calculus changed: an admin account is now the highest-value target in the enterprise, and standing privilege converts a single phish into a total compromise.

Why it persists: Because removing it is felt immediately by influential, busy people, and the benefit is invisible. This is the classic asymmetry of preventive controls, and it is an organizational problem, not a technical one.

The engineering lesson: Separate capability from availability. Admins should retain the full capability to act and hold none of it standing. Then measure the thing that actually matters: standing privilege hours per month across the organization. It is a single number, it trends, it can be targeted, and unlike most security metrics it correlates directly with blast radius.

Myth 3 — "Security slows development"

Origin of truth: It usually does, in the form most organizations implement it — ticket queues, review boards, manual approvals, quarterly recertifications.

How it became false, or at least incomplete: The slowdown comes from how security is delivered, not from security itself. Controls delivered as platform capabilities — automatic workload identity, secrets injected at runtime, policy evaluated in CI with immediate feedback, scoped credentials provisioned in seconds — are frequently faster than the insecure alternative, because the insecure alternative involves a human somewhere.

The sharpest illustration: in organizations where getting a scoped IAM role takes three days and sharing a teammate's credential takes three minutes, engineers share credentials. Not because they are careless, but because they are responding rationally to the system you built. The insecure path is faster; you made it faster.

Why it persists: Because the security team's most visible output is often the ticket queue.

The engineering lesson: The secure path must be the fast path. Not equally fast — faster. This is a product requirement for your internal platform, it should have latency SLOs, and if the secure path is slower, the resulting behavior is your fault and not the engineers'.

Myth 4 — "MFA solves identity"

Origin of truth: MFA genuinely eliminates the largest single class of attack — credential stuffing and password reuse. It was and remains one of the highest-ROI controls ever deployed.

How it became false: Attackers adapted to session theft, token replay, consent phishing, real-time proxy phishing, MFA fatigue, and — most importantly — to the machine identities that MFA never covered at all.

Why it persists: Because MFA deployment is a project with a completion date, and completion dates are satisfying. "MFA coverage: 100%" is a metric you can put in a board deck. "Median credential lifetime across all identity types" is not, but it is the one that predicts your outcomes.

The engineering lesson: Authentication is an event; identity is a continuous assertion. Design for what happens after — session binding, token lifetime, continuous evaluation, and a revocation path that works in seconds. And extend the identity conversation to the ninety percent of principals in your estate that are not human.

Myth 5 — "Cloud is secure by default"

Origin of truth: Cloud providers do operate infrastructure more securely than nearly any enterprise data center. The underlying claim is true and important.

How it became false: The shared responsibility model draws a line, and everything above that line — identity configuration, network policy, data access, service permissions, key policy — is yours. Cloud made it dramatically easier to build securely and equally easier to build insecurely, at greater speed and larger scale, with a single misconfigured resource policy.

Why it persists: Because the provider's security is highly visible (certifications, attestations, marketing) and the customer's configuration is not.

The engineering lesson: Cloud shifts the security problem from infrastructure hardening to configuration governance and identity architecture. Cloud architecture decisions — account topology, network boundaries, the shape of the role graph — now carry more cloud security weight than any control deployed after the fact. The scarce skill is no longer patching; it is reasoning about permission graphs at scale. Staff accordingly — most organizations are still hiring for the previous problem.

Myth 6 — "Monitoring equals protection"

Origin of truth: Detection is genuinely essential, and organizations without it are blind.

How it became false: Detection is observational. It changes what you know, not what an attacker can reach. An organization with perfect visibility and unbounded blast radius will watch its own breach unfold in high resolution.

Why it persists: Because monitoring is purchasable, deployable, demonstrable, and produces dashboards. Architectural containment is a multi-year engineering program that produces no artifact anyone can show a board.

The engineering lesson: Detection tells you what happened. Architecture determines how much could happen. Spend on detection to bound your dwell time. Spend on architecture to bound your damage. Most organizations are heavily over-indexed on the first, and the imbalance is a budgeting artifact, not a considered decision.

The common structure

Notice the shape shared by all six. Each myth was true under an architecture that no longer exists. Each persists because systems built on the assumption still function. And each is maintained not by conviction but by inertia in the installed base.

This is why myth-busting as an educational exercise fails. Nobody in your organization actually believes the internal network is safe when asked directly. They simply operate a large number of systems that assume it. Beliefs are changed by argument; installed bases are changed by engineering.


7. Field Reports

Five Companies That Have Already Finished Zero Trust

Composite fictional organizations, drawn from patterns that recur with uncomfortable regularity. Each has done real work. Each has a hidden trust assumption large enough to invalidate it.


Field Report 01 — Meridian Labs (Series B startup, 90 engineers)

What they built. Meridian is genuinely modern. Everything runs on managed Kubernetes. Workload identity federation means no static cloud credentials anywhere. Mutual TLS is enforced by the mesh, default-on. SSO with hardware keys, no passwords. Infrastructure entirely in Terraform, reviewed on every change. Their CTO gave a well-received conference talk titled "Zero Trust from Day One."

Every claim in the talk was accurate.

What we found. The trust graph does not run through the runtime. It runs through the build.

A single GitHub Actions workflow, deploy-prod.yml, holds a federated identity with deployment rights to every production namespace. Its trust policy is scoped to the repository — but not to the branch, and not to the workflow file. Any workflow in that repository can assume the role. There are forty-one workflows in the repository. Eleven were written by engineers who no longer work there. Three run on pull_request_target, which executes with repository secrets on code proposed by an outside contributor.

Meridian's entire security posture reduces to: can anyone get a workflow file merged, or trigger an existing one with modified inputs? The answer involves branch protection rules that allow two engineers to self-approve each other's changes in a rotation that emerged organically because they are the only two who understand the deploy path.

The hidden assumption: the pipeline is part of the trusted infrastructure. It is not. It is a code execution service that runs arbitrary code from a repository, holding production credentials, with an access model designed for convenience during a period when the company had eight engineers.

The lesson: Runtime Zero Trust with an unexamined build path is a locked front door in a building with an open loading dock. Software supply chain security is not adjacent to Zero Trust; for cloud-native organizations it is frequently the dominant trust path, because it is the one place where "arbitrary code" and "production authority" legitimately meet.

What we'd do first: Scope the deployment identity to a specific workflow file on a specific protected branch. Require a signed artifact. Split build authority from deploy authority so no single identity can both produce and release.


Field Report 02 — Caldwell Regional Health (hospital network, 11 facilities)

What they built. Caldwell has invested seriously. Network segmentation between clinical and corporate. Privileged access management for administrators. Full audit logging of record access, with anomaly detection tuned over three years. MFA on the EHR. Their access review process is meticulous and their regulators are satisfied.

What we found. Two things, both structural.

First: break-glass has become normal operation. Emergency access — a clinician overriding access restrictions to view a record they aren't formally assigned to — was designed as an exception with mandatory post-hoc review. It is invoked roughly four thousand times a month. The review queue is nine months deep. Nobody reads it. The control that was supposed to make exceptions visible has, through volume, made them invisible. This did not happen through negligence; it happened because clinical workflows genuinely require access patterns that the formal model does not represent, and the exception path absorbed the difference.

Second: the medical device estate is outside the model entirely. Four hundred and twelve networked devices — infusion pumps, imaging systems, monitors — running vendor-controlled software, many unpatchable by contract, several requiring flat network reachability to a vendor's cloud. They are segmented into a VLAN, which is the sum total of the control. Within that VLAN, they trust each other and their management servers absolutely, and the management servers have paths to clinical systems.

The hidden assumption: segmentation is containment. A segment is a boundary with a fixed permeability set at design time. Everything inside it is one flat trust domain, and its size determines the blast radius of anything that gets in.

The lesson: When an exception path carries more traffic than the primary path, the exception is the architecture, and it needs to be engineered rather than tolerated. And unmanageable devices don't become manageable by being grouped — they need a proxy that can enforce policy on their behalf, because they cannot enforce it themselves.

What we'd do first: Redesign the clinical access model around what clinicians actually do, so break-glass returns to being rare. Place a policy-enforcing broker in front of the device management servers so device traffic is mediated rather than merely segregated.


Field Report 03 — Northbridge Financial (retail bank, 40 years of systems)

What they built. Northbridge has the most rigorous access governance we have reviewed. Formal roles, segregation of duties enforced in tooling, quarterly recertification with genuine teeth, four-eyes approval on production changes, a dedicated identity governance team of twenty-two people, and a documented control framework mapped to three regulatory regimes.

What we found. The governance covers the modern estate beautifully. It does not reach the core.

The mainframe transaction processor handles every account balance in the bank. Its security model is native, predates the governance platform by three decades, and is administered by a team of six through a mechanism that the identity governance system reads from — via a nightly export — but does not control. Recertification produces a report. The report is reconciled manually. The reconciliation has a backlog.

Beneath that, the integration layer: two hundred and eighty scheduled jobs moving data between core and modern systems, each with a service account created between 2003 and 2019. Ninety-four have no identified owner. Thirty-one have credentials that have never been rotated, and the operations team's position — stated plainly and, in our judgment, correctly — is that rotating them without a full dependency map risks a settlement failure.

And a detail that captures the whole situation: eight of those accounts share one password, because in 2011 a migration project ran short on time.

The hidden assumption: governance coverage equals architectural coverage. The governance platform reports 97% of identities under management. The 3% outside it can move money.

The lesson: Legacy systems don't opt out of your trust model; they become your trust model, because attackers optimize for the weakest path and the weakest path is where the money is. The framing that works with executives is not "modernize the mainframe" — that program has failed twice — but "place a mediation layer in front of it." All access through a broker that can enforce modern identity, issue short-lived credentials, and log semantically, even if the system behind it never changes.

What we'd do first: Ownership assignment for all 280 service accounts, with a hard rule that unowned accounts are disabled on a published date. Then a credential broker for the top twenty by privilege, which converts unrotatable static secrets into brokered short-lived ones without touching the core.


Field Report 04 — Halvorsen Industrial (manufacturing, 14 plants)

What they built. Halvorsen took the IT/OT boundary seriously. A properly designed DMZ between enterprise and plant networks, unidirectional gateways for historian data, no direct routing, and an identity program for the corporate side that is genuinely mature.

What we found. The boundary is real. It is also bypassed, in a way everyone knows about and nobody has classified as a security issue.

Fourteen plants, each with equipment from six vendors. Each vendor requires remote support access for warranty. Each has a different mechanism: three use a vendor-supplied jump host, two use a commercial remote-access tool installed on the engineering workstation, one uses a cellular modem attached directly to the PLC network, which exists because a maintenance contract required it in 2016 and no one has ever revisited it.

None of these appear in the network architecture diagram. All were procured by plant operations as part of equipment purchases. The security team learned of the cellular modem during our review.

The consequence: the enterprise-to-plant boundary is well engineered and largely irrelevant, because there are at least nine independent paths into plant networks that do not traverse it, controlled by external organizations, governed by procurement contracts rather than security policy.

The hidden assumption: the trust boundary you designed is the only one that exists. Trust relationships are created by anyone with purchasing authority, and equipment purchases carry security architecture as an unpriced attachment.

The lesson: Vendor access is trust delegation to an organization whose security posture you do not control and rarely assess. It must be inventoried as an identity relationship, not as a networking detail. The most effective intervention is usually procurement-side: no equipment purchase closes without declaring its remote access requirement, and all vendor access terminates in a brokered path you operate.

What we'd do first: A full inventory of every remote access path into every plant, built by interviewing plant engineers rather than reading diagrams. Then one mediated vendor access path, and a contractual requirement that all future support flows through it.


Field Report 05 — Ostrava AI (AI SaaS platform, 200 engineers)

What they built. Ostrava is sophisticated. Per-tenant encryption keys. Strong workload identity. Comprehensive policy-as-code with automated testing. Prompt injection defenses, output filtering, tenant isolation verified by continuous testing. They publish a well-regarded security architecture document.

What we found. Their trust model was designed for a product that determines outputs. Their product now takes actions.

Eighteen months ago the platform answered questions. Today it runs agentic workflows: reading customer systems through integrations, calling external APIs, writing to customer databases, executing multi-step tasks with limited human oversight. The identity model did not change. Agent actions execute under a per-tenant service identity holding the union of every capability any workflow in that tenant might need.

Which means: a customer's marketing automation agent operates with an identity that also holds their finance integration's write permissions. Not because anyone decided that; because both workflows run under the tenant's agent identity, and permissions accumulated as integrations were added.

Then the deeper problem. An agent's action is determined partly by data it processes — documents, emails, API responses, web content. That data is attacker-influenceable. So the effective authorization boundary is not what the customer authorized the agent to do; it is what an attacker who can place text in front of the agent can induce it to do, within the agent identity's permissions.

Their prompt injection defenses are among the best we've reviewed. They are also probabilistic, and they are the only thing standing between untrusted input and a broad set of real capabilities.

The hidden assumption: the agent's identity represents the customer's intent. It represents the customer's installation. Intent is per-action and must be established per-action.

The lesson: This is the frontier, and it is arriving faster than architecture is adapting. The structural fix is not better filtering — filtering is a mitigation, not a boundary. It is per-task capability issuance: an agent starting a task receives a narrow, time-boxed, task-scoped credential covering exactly what that task requires, derived from the request that initiated it. An injected instruction to do something outside the task fails at the authorization layer, deterministically, regardless of how convincing the injection was.

What we'd do first: Decompose the tenant agent identity by workflow. Then introduce task-scoped credential issuance for the highest-consequence capability class — anything that writes to a customer system or moves money.


What the five have in common

The pattern is consistent enough to state as a finding:

Every organization's Zero Trust implementation is strongest exactly where its security team's attention has historically been, and weakest exactly where trust relationships are created by someone other than the security team.

Meridian's security lives in runtime; its trust is created in CI. Caldwell's lives in access governance; its trust is created in clinical exception handling and procurement. Northbridge's lives in the modern estate; its trust is created in a 1990s mainframe. Halvorsen's lives in network architecture; its trust is created in purchasing. Ostrava's lives in the model layer; its trust is created in an agent framework that outran the identity design.

The diagnostic question for your own organization is therefore not "where are our controls?" It is: "who in this company can create a trust relationship without talking to us, and what does that path look like?"

Make the list. It is usually longer than expected and it usually includes procurement, HR onboarding, partner management, data science, and whoever owns the CI platform.


8. The Hidden Trust Inventory

Cataloguing Relationships, Not Assets

Asset inventories are a solved and largely unhelpful problem. You almost certainly have a CMDB. It is probably 80% accurate. It tells you what exists.

What it does not tell you is what trusts what — and that is the inventory that determines what an attacker can do. The following are the recurring entries in every hidden trust inventory we have compiled, with the specific mechanism by which each becomes security debt.

Shared credentials

Why they exist: Provisioning individual credentials was slower than sharing one. Every time.

Why they're debt: They destroy attribution permanently. Once n people hold a credential, no action taken with it can be attributed to a person, no departure can trigger revocation, and rotation requires coordinating n humans — which means it never happens. The debt compounds: each new sharer increases the rotation cost, making rotation less likely, extending the lifetime, increasing exposure.

The engineering fix that actually works: Not policy. Make individual provisioning faster than sharing. If a scoped credential is available in under a minute, sharing stops without needing to be forbidden.

Default permissions

Why they exist: Someone wrote a Terraform module, a Helm chart, a service template, or a base role, and chose defaults that worked for the first three use cases.

Why they're debt: Defaults propagate with the force of law and none of the visibility. A permissive default in a widely-used module grants more access across the enterprise than any individual decision ever will, and it is invisible in every access review because it looks like normal configuration.

The fix: Treat platform defaults as the highest-leverage security artifact you own. They deserve more review scrutiny than production changes, because their blast radius is every future service.

Implicit API trust

Why it exists: Service B was built to be called by service A, in an era when both were in the same network, and never had a reason to verify anything.

Why it's debt: It converts every compromise into a lateral movement opportunity, and it is invisible — there is no artifact representing "B trusts A," so there is nothing to review. It shows up only when someone maps actual call patterns and asks what enforcement exists at each edge.

The fix: Every service edge should have an explicit, version-controlled policy artifact, even if that artifact currently says "allow." An explicit allow is reviewable. An absence is not.

Permanent administrator roles

Why they exist: Emergencies, plus the entirely reasonable observation that elevation systems can fail.

Why they're debt: Standing privilege converts a phishing success into a total compromise. The debt is measurable: privilege-hours × number of holders × probability of compromise per hour.

The fix: JIT elevation with real evaluation, plus an independently-available break-glass path that pages loudly. And the metric: standing privilege hours per month, tracked and driven down.

Long-lived tokens

Why they exist: A partner's system doesn't support rotation. A script needs to run unattended. Rotation broke something once.

Why they're debt: Token lifetime is the duration of your worst-case exposure window. A five-year API key is a five-year commitment that no compromise will occur, made by whoever generated it, usually without realizing they were making it.

The fix: Two moves. First, mandatory expiry on issuance — the system does not permit non-expiring credentials, full stop. Second, for the systems that genuinely cannot rotate, a broker: the long-lived secret lives inside a controlled service that issues short-lived credentials to callers. You cannot always fix the endpoint; you can almost always mediate access to it.

Shadow integrations

Why they exist: A team needed data. The official path required a ticket, a review, and six weeks. An API key took ten minutes.

Why they're debt: They are trust relationships with external parties that exist entirely outside governance. They are also, importantly, a measurement of your friction budget overspend. The volume of shadow integration is a direct readout of how far your official path exceeds people's tolerance.

The fix: Amnesty and inventory first — make declaring one costless and non-punitive. Then fix the official path, because shadow integration is a symptom and enforcement alone will only drive it further underground.

Legacy service accounts

Why they exist: A system needed to run. Someone created an account. That was in 2014.

Why they're debt: No owner, no rotation, unclear scope, unclear dependency. They are the single most common initial foothold in enterprise compromise, and their permissions only ever grew, because every troubleshooting session ended with someone adding a permission and nobody ever removed one.

The fix: Ownership assignment with a forcing function: publish a date, disable unclaimed accounts on that date, in a low-risk environment first to build confidence. The archaeology is unavoidable, but it converges. The alternative — leaving them — does not.

Unreviewed automations

Why they exist: Someone automated a task. It worked. It has run every night since.

Why they're debt: They accumulate privilege and outlive their authors. Nobody remembers what they do. They frequently hold credentials that predate the current security model, and their failure modes are unknown because they have never failed.

The fix: Automations are software. They belong in version control, with an owner, a review, and a credential from the same system every other workload uses. If an automation cannot be described by a named engineer, it should be stopped and see who complains — a technique that is cruder than it should be and works better than it should.

Why this inventory is different

Notice what these have in common. Every entry is:

  • Created by ordinary engineering work, not by a security failure.
  • Locally rational at the moment of creation.
  • Invisible in asset-based inventories, because the asset is fine; the relationship is the problem.
  • Growing monotonically, because creation is easy and removal is risky.

That last property is the essential one. Trust relationships have asymmetric lifecycle economics: creating one has a small immediate benefit and a large deferred cost; removing one has a small deferred benefit and a large immediate risk. Left to ordinary incentives, the count only rises.

The Adaptive Verification Matrix is how we prioritize the resulting mess. Score each relationship on two axes — consequence if abused (what does it reach?) and verification strength (how confidently is it checked at use time?) — and work the quadrant where consequence is high and verification is weak. That quadrant is always smaller than the total inventory and always contains the paths that matter. Do not attempt to clean the whole graph; you will run out of political capital before you run out of edges.


9. Engineering Conversations

A Room With No Agreement

Transcript-style notes from an architecture forum. Six roles, six legitimate positions. No resolution, because the resolution is contextual and anyone who tells you otherwise is selling something.

Context: The platform team has proposed eliminating all standing production access. Elevation would be request-based, scoped, time-boxed, with peer approval for anything touching customer data.


DEVELOPER (Priya, payments team): I want to start with what this actually costs. Last quarter my team was paged 31 times. In maybe six of those, the fastest path to diagnosis was reading production state directly. If each of those becomes a four-minute elevation request that needs a peer approval at 3 a.m. — when my peer is asleep — you have added minutes to incidents that customers experience as downtime. I'm not against the principle. I'm against paying for it in MTTR without anyone acknowledging that's what we're doing.

PLATFORM ENGINEER (Marcus): That's fair and it's solvable. Read-only diagnostic access auto-approves in under ten seconds, no human in the loop. What requires approval is write access and anything returning customer PII. Ninety percent of your 31 pages need neither.

PRIYA: Ninety percent is your estimate. My estimate is different and I've been on the pager.

MARCUS: Then let's instrument it instead of arguing. Ship auto-approved read access first, log every elevation for a quarter, and let the data tell us what the remaining ten percent actually looks like.

SECURITY ENGINEER (Tomas): I'll take the read/write split, but I want to name the thing nobody's said. "Read-only" on a payments service means read-only access to every customer's financial data. That is not a low-consequence capability just because it doesn't mutate state. Most of the breaches I've responded to were exfiltration. Nobody wrote anything.

PRIYA: So what's the alternative — I debug blind?

TOMAS: The alternative is that diagnosis shouldn't require raw data access. If your observability were good enough — structured logs with values redacted, traces with enough context, dashboards that answer the common questions — you'd rarely need production reads. Every time an engineer needs raw data to debug, that's an observability gap, and we're paying for it with a permanent access grant.

PRIYA: That's a two-year investment you're describing as if it's a Tuesday.

TOMAS: It's a two-year investment either way. The only question is whether we start it.

CLOUD ARCHITECT (Wen): Can I raise the thing that will actually break this proposal? We have eleven environments across three cloud providers and two data centers. The elevation system you're describing exists in one of them. What happens in the others?

MARCUS: Phase two.

WEN: Phase two is where these programs die. If elevation covers 60% of the estate, engineers learn that the process is inconsistent, and they build habits around the exception. Then the exception becomes the norm, and in eighteen months we're back here with a system that has a good implementation nobody uses. I'd rather have a weaker control applied uniformly than a strong control applied to the environments that were easiest.

TOMAS: I'd rather have a strong control on the environment holding the customer data.

WEN: And the attacker will go to the other one. That's not a hypothetical, it's what they do.

PRODUCT MANAGER (Sofia): I want to ask a question that's going to sound cynical. What is this buying us, expressed as something I can trade against roadmap? Because I have a customer commitment that slips if the platform team spends a quarter on this, and I need to be able to explain the trade.

TOMAS: It reduces the blast radius of a compromised engineer account from "everything, indefinitely" to "one scope, for four hours."

SOFIA: What's the probability of a compromised engineer account?

TOMAS: Over five years, across 400 engineers, with credential phishing being what it is — high. I'd say more likely than not.

SOFIA: Then say that. Say "more likely than not, over five years." That's a sentence I can take to a steering committee. "Reduces blast radius" is not — it has no units and no comparison. Half of why security work loses these arguments is that it's argued in language that can't be weighed against anything.

CISO (Rahel): Sofia's right, and I'll go further. I've watched this exact program fail twice at other companies, and both times the failure mode was the same: we shipped the control, engineers found it slower than the old way, they built workarounds, and within a year the workaround was the access path. We ended up with more complexity and the same standing privilege, just distributed into places we couldn't see.

So my condition for supporting this isn't technical. It's this: the elevation path has to be faster than the thing it replaces, measured, with a published latency SLO. If p95 elevation time exceeds thirty seconds for the auto-approved tier, we treat it as a platform incident. Not a security metric — a platform reliability metric, owned by Marcus's team, on the same dashboard as their other SLOs.

MARCUS: That's a hard commitment.

RAHEL: It's the only version of this that survives contact with a deadline. And I'll take the other side of the deal: if you hit that SLO, security stops asking for exception approvals on the auto-approved tier entirely. No tickets, no reviews. The log is the control.

PRIYA: If that's real, I'll support it.

WEN: And the other environments?

RAHEL: We publish the date they're covered by, and if we miss it, that's an escalation to the exec team, not a quiet slip. The commitment isn't the design. The commitment is the date.


What this conversation demonstrates

Every participant is correct within their frame. Priya is right that MTTR is a real cost paid in customer experience. Tomas is right that read access to financial data is the exfiltration path. Wen is right that partial coverage is a specific and common failure mode. Sofia is right that unquantified security claims lose to quantified product claims, every time. Marcus is right that instrumentation beats argument. Rahel is right that the control must be faster than the alternative or it will be eroded.

The productive move in the room was not consensus. It was converting positions into commitments with dates and thresholds: an SLO, a measurement period, a coverage date, an escalation path, and a reciprocal concession from security in exchange for platform performance.

That is what a functioning security architecture forum produces. Not agreement — contracts.


10. Runtime Stories

What Containment Looks Like at 3 A.M.

Four incidents. Each told twice: what happens with inherited trust, and what happens when trust is engineered. The difference is never detection speed. It is always blast radius.


Story 1 — A service starts behaving differently

02:14. The inventory service begins issuing database queries at eleven times its normal rate, against tables it has never touched. A dependency updated three days ago contained a compromised transitive package.

Inherited trust: The inventory service holds a database credential with read access to the entire application schema — provisioned in 2019, when it was one of three services and the schema was shared. The queries succeed. The anomaly is caught by a query-rate alert 40 minutes later. By then, customer records and payment metadata have been read and exfiltrated over an outbound HTTPS connection that looks like every other outbound HTTPS connection.

Engineered trust: The service holds a short-lived credential scoped to three tables. The first out-of-scope query fails. The failure is a high-signal event — not a rate anomaly requiring a tuned threshold, but a deterministic policy violation with no legitimate explanation. Alert fires in seconds. Nothing was read. Egress policy would also have blocked the exfiltration destination, but that turns out not to matter.

The lesson: Scoped authority converts statistical detection into deterministic detection. Rate anomalies need tuning, produce false positives, and get ignored. Policy violations do not. The most valuable property of least privilege is not the access it prevents — it's the clean signal it produces when something goes wrong.


Story 2 — A third-party integration is compromised

09:30. A SaaS analytics vendor discloses a breach. Customer API credentials were exposed. Yours were among them.

Inherited trust: The integration was configured four years ago. It holds an API key with read access to the customer data warehouse — because the original scoping conversation ended with "read-only is fine" and read-only meant everything. The key does not expire. Nobody can say with confidence which datasets it has touched, because the access logs record the integration as one principal without per-query provenance. Response: rotate the key, then a two-week forensics exercise to determine exposure, followed by a disclosure decision made on incomplete information.

Engineered trust: The integration authenticates through a broker. Its credential is scoped to four specific datasets, expires hourly, and is bound to the vendor's registered egress identity. Response: revoke the client registration — one action, effective in under a minute. The access log answers "what did they read" in a single query. The blast radius was bounded at design time, so the incident is a Tuesday morning task rather than a crisis, and the disclosure decision is made on complete information.

The lesson: Third-party trust must be engineered with the assumption that the third party will be compromised, because at sufficient scale that assumption is not pessimism — it's arithmetic. The two properties that matter are narrow scope at grant time and fast, unilateral revocation. Contracts and security questionnaires provide neither.


Story 3 — A developer deploys privileged code

16:45 on a Friday. An engineer, fixing an urgent bug, includes a debugging change that disables an authorization check in a middleware component. It passes review — the reviewer is looking at the bug fix, and the change is four lines in a file nobody associates with security.

Inherited trust: The deployment succeeds. The authorization gap is live across all instances. It is discovered eleven days later, by a security researcher, through a bug bounty submission. During those eleven days, the endpoint was accessible without authorization to anyone who found it.

Engineered trust: Three things happen. First, policy-as-code lives outside the service and is evaluated at the gateway; the middleware change removes a redundant check, not the only one. Second, CI runs authorization contract tests — every endpoint must assert its required policy, and an endpoint that becomes unauthenticated fails the build. Third, deployment is progressive, and a canary comparison flags a change in the authorization decision distribution before the rollout completes.

The lesson: Defense in depth is really defense in independence. Layers only help if they fail for different reasons. A checklist reviewer and a careful engineer are correlated failure modes — both are humans reading the same diff on a Friday afternoon. Automated policy tests, externalized enforcement, and progressive rollout fail independently. Design your layers by asking not "how many are there?" but "what single event takes out more than one?"


Story 4 — An AI agent invokes an unauthorized workflow

11:20. A customer support agent — an LLM-driven system with tool access — processes an inbound ticket containing an attached document. Embedded in the document is text instructing the agent to export the customer list and email it to an external address. The agent complies. From its perspective it followed an instruction in its context; it has no reliable mechanism to distinguish instructions from data.

Inherited trust: The agent holds a service identity with the union of all capabilities its various workflows require: reading tickets, querying the CRM, sending email, updating records. All four are needed by some workflow, so all four are always available. The export succeeds. The email sends. Detection depends on outbound content inspection, which was tuned for a different threat.

Engineered trust: When the agent begins the task, it receives a task-scoped credential derived from the triggering event: read this ticket, query the CRM for this customer, reply to this thread. Bulk export is not in scope. Sending to an external recipient is not in scope. The injected instruction produces an authorization failure, deterministically, without any judgment about whether the instruction was malicious. The failure is logged as an attempted out-of-scope action — which is, incidentally, an excellent injection detector, and one that improves as attackers get better at evading content filters.

The lesson: This is the defining security problem of the agentic era, and it needs to be stated precisely: an AI agent's effective permissions are the permissions of everyone who can place text in its context. Prompt injection is not a content-filtering problem with an eventual solution. It is an authorization architecture problem, and it has an architectural answer: capability scoping per task, derived from the authenticated request that initiated the task, enforced outside the model.

Any agent with standing broad permissions is a confused deputy waiting for input. The model is not, and should not be, the security boundary.


The pattern across all four

In every story, detection was possible in both versions. The difference was never whether the organization found out.

The difference was:

  • Time to consequence — how much damage occurred before detection
  • Signal quality — deterministic policy failure versus statistical anomaly
  • Response cost — one revocation versus two weeks of forensics
  • Knowability — could you state, with confidence, what was reached?

None of these are improved by better monitoring. All are determined by architecture, and all are set months or years before the incident, by engineers who had no idea they were making a security decision.

This is the entire argument of this document, expressed operationally. The incident is not where security is decided. The incident is where architecture is graded.


11. Security Without Borders

Why Zero Trust Stops Being an Infrastructure Concern

If trust is a system property, then the system is not the infrastructure. It is the whole business platform. Ten places where trust decisions get made by people who have never attended a security review:

Product design. Every product decision that grants persistent access is a security decision. "Stay signed in" is a session lifetime policy. "Share via link" is an authorization model. "Connect your account" is a delegation grant, and the consent screen is the only place the user will ever evaluate it. Product teams routinely make these calls to reduce friction, and they are correct that friction costs conversion — which is exactly why the decision needs to be made jointly rather than defaulted.

User experience. A security control the user cannot understand is a control they will defeat. Consent screens that list twelve permissions in vendor terminology produce reflexive approval. Re-authentication prompts that appear at random produce MFA fatigue. The design goal is not more prompts; it is fewer prompts, at moments of genuine consequence, with enough context to make a real decision. Prompt frequency and prompt effectiveness are inversely related, and most enterprises are far past the optimum.

Data governance. Classification is authorization input. If the system does not know a dataset is sensitive, no policy engine can protect it differently. Classification that exists as a spreadsheet is documentation; classification that is attached to the data and readable by the policy layer is a control.

AI systems. Covered at length above, and worth restating as a principle: every model with tool access is an actor whose instructions come partly from untrusted sources. It needs an identity, scoped capabilities, and an audit trail — the same as any other actor, with the additional property that its behavior is not fully specifiable in advance.

Automation. Workflow platforms, RPA, integration middleware, scheduled jobs. Typically privileged, typically outside code review, typically edited by non-engineers through UIs. This is where the most powerful ungoverned identities in the enterprise live.

Observability. Monitoring agents legitimately need broad read access, which makes them ideal lateral movement paths and ideal exfiltration channels. Your telemetry pipeline sees everything and, in most organizations, is trusted absolutely by everything. Treat it as the privileged system it is.

Application security. Traditional application security focused on defects — injection, deserialization, memory safety — and that work remains necessary. But the majority of severe findings in modern assessments are authorization flaws: a tenant boundary that leaks, an endpoint that forgot its policy, an object reference that trusts its input. Software security and authorization design have converged, and teams that still run them as separate disciplines find the gap between them at the worst possible time.

Developer platforms. The internal platform determines the default security posture of every service built on it, forever. Platform engineering is security engineering, whether or not anyone in the org chart says so.

Knowledge management. Wikis and doc systems contain architecture diagrams, runbooks, connection strings, and — reliably — credentials pasted into a page in 2018 by someone who meant to remove them. Search access to internal documentation is frequently the most valuable reconnaissance capability in the enterprise, and it is almost never scoped.

Vendor management. Procurement creates trust relationships with the same effect as an IAM grant and none of the review. Halvorsen's cellular modem arrived through a purchase order. The intervention point is contract templates and onboarding checklists, not architecture diagrams.

Customer portals. The place where external identity meets internal systems, usually built by a team focused on usability, often with an authorization model that evolved rather than being designed. Multi-tenant authorization bugs are among the most common and most severe findings in any external assessment.

The consequence: Zero Trust cannot be delivered by a security organization, because the majority of trust relationships in a modern enterprise are created outside it. What a security organization can deliver is the paved path — making the secure option the default, the fastest, and the easiest — plus the visibility to see relationships created elsewhere, and the ownership graph that ensures every one of them has a name attached.


12. Decision Journal

Short reflections. Each earned the hard way.

Every permission eventually becomes technical debt. Permissions are granted against a context — a project, a role, a system — and contexts change faster than permissions do. A permission that is not periodically re-justified is not a control; it is a historical record of an organizational state that no longer exists.

Convenience always requests permanent trust. Every request for standing access is a request to convert a recurring small cost into a one-time grant. That trade is often locally correct and always globally expensive, because the recurring cost was the thing keeping the grant honest.

Identity without ownership becomes noise. An identity nobody owns cannot be reviewed, rotated, scoped, or deleted. It will appear in every report and be actioned in none. Ownership is not metadata; it is the precondition for every other control working at all.

The fastest attack is the one that follows existing trust. Sophisticated attackers rarely break controls. They inherit them — using legitimate credentials, on legitimate paths, performing legitimate operations, in a sequence nobody anticipated. Your trust graph is their attack plan, and they will often understand it better than you do, because they have a reason to map it.

Architecture decides security long before attackers arrive. By the time an incident occurs, the outcome has largely been determined by decisions made months or years earlier about scope, lifetime, attenuation, and revocation. The incident does not test your response. It reports your architecture.

Controls that are never triggered are not controls. If your elevation system has never denied a request, your policy engine has never blocked a call, and your review has never rejected an access — you have built telemetry and labelled it enforcement.

Revocation speed is the truest measure of maturity. Everything else can be simulated. Revocation cannot: it either works in seconds or it doesn't, and the number is the same whether or not anyone is watching.

The secure path must be the fast path, or the fast path becomes the architecture. Engineers under deadline pressure are not making moral choices. They are following gradients. Set the gradient.

You cannot review your way out of a bad default. One default change is worth ten thousand review comments, and the review comments will run out before the services do.

Security debt, like all debt, is paid in a lump sum at the worst possible moment. The interest is invisible. The principal is due during an incident.


13. Future Snapshot: 2035

When Humans Are No Longer the Primary Actors

A projection. Confidently wrong in the details, probably right in the shape.

By 2035, the median enterprise transaction is initiated by software, authorized by software, executed by software, and reviewed by software. A human is in the loop for perhaps two percent of consequential actions — the exceptions, the novel cases, the things the system flags as outside its confidence envelope.

This is not speculative; it is the current trajectory extended. What changes about trust when it happens?

Identity population inverts, then inverts again. Today most enterprises have roughly ten to fifty machine identities per human. By 2035 the ratio is thousands to one, and — critically — most of those identities are ephemeral, existing for the duration of a single task. Identity infrastructure built around durable principals with quarterly reviews becomes structurally unable to cope. The unit of identity management shifts from the account to the issuance policy: you no longer govern identities, you govern the rules by which identities are minted.

Authorization moves from role to intent, by necessity. Roles describe what a durable actor may do. When actors last four seconds, roles are meaningless overhead. What replaces them is authorization derived from the provenance chain of the request: which authenticated human or contract initiated this, what business purpose was declared, what constraints were attached, how many delegation hops have occurred, and how much authority attenuated at each. Every credential carries its own lineage.

Agent-to-agent negotiation becomes a trust protocol problem. When your procurement agent negotiates with a supplier's fulfillment agent, several questions need machine-answerable answers: how does each verify the other represents the claimed organization; how is the resulting agreement bound to an accountable entity; what happens when one agent is compromised or simply wrong; who is liable. These are the questions certificate authorities and payment networks answered for earlier eras, and they will be answered again, probably by a small number of federated attestation networks that are boring, load-bearing, and largely invisible.

Human approval becomes a scarce, high-value signal. When approvals are rare, each one carries enormous weight — which makes the approval mechanism the highest-value attack target in the enterprise. Expect approval infrastructure to become as hardened as key management is today: dedicated devices, cryptographic binding of the approval to the exact action, independent display of what is being approved. The failure mode to design against is the human approving a summary that does not match the transaction.

Revocation becomes real-time or becomes useless. With autonomous systems acting at machine speed, an hour of revocation latency is an eternity. Expect revocation to become a push-based, sub-second capability with cryptographic proof of freshness, and expect the systems that cannot participate to be quarantined behind brokers that can.

Semantic controls become the primary defense. When identity is ephemeral and authorization is intent-based, the remaining question is whether the action itself makes sense: is this payment consistent with this supplier relationship, is this data movement consistent with this business purpose, is this rate of activity plausible. Identity controls answer may this happen. Semantic controls answer should this happen. Against an attacker who has fully compromised an agent and is operating within its legitimate authority, only the second question has any power.

What does not change: every one of these mechanisms is engineering. There will be a large market for autonomous-agent security products in 2035, and buying them will produce exactly what buying Zero Trust products produced: components installed into architectures that determine whether they matter.

The one thing worth doing now: the organizations that handle 2035 well will be the ones that, in the mid-2020s, built the capability to issue narrow, short-lived, purpose-bound credentials on demand, and revoke them instantly. That capability is useful today for services and pipelines. It is the foundational primitive for everything above. Build it for your current problems and you will have built it for the next ones.


14. Executive Brief

For Boards and Executive Leadership

No technical language. One page you can read before the meeting.

The claim in one sentence: Zero Trust investments fail when funded as security projects and succeed when funded as engineering transformation, because the thing being purchased is not a product but a property of how the company builds software.

Why the projects fail. A security project has a defined scope, a completion date, and a deliverable. It buys and deploys something. But the risk it is meant to address is created continuously, by the ordinary work of the engineering organization — every new system, integration, vendor, and hire creates new access relationships. A project cannot address a process. Within eighteen months of the project completing, the organization has generated a new estate of unreviewed access, and the tools purchased are managing a shrinking fraction of the actual risk.

The four failure signatures, in the order they appear:

  1. The program is owned by security alone. Most access relationships are created by engineering, procurement, HR, and product. A program that only has authority over the security function can govern a minority of its subject matter.
  2. Success is measured by deployment, not by risk. "Ninety percent coverage" of a tool says nothing about whether the remaining ten percent contains the systems that matter. It usually does, because the hard systems were deferred.
  3. The controls are slower than the alternatives. Employees under deadline pressure route around slow controls. This is not a discipline problem and cannot be solved by training. If the compliant path is slower, non-compliance is the predictable output of the system you funded.
  4. The program has an end date. The risk does not.

What to fund instead. Fund the capability to answer four questions continuously, and treat the answers as operating metrics rather than project milestones:

  • Who has access to what, and who is accountable for each grant? If ownership cannot be produced on demand, nothing else works.
  • How long does it take to remove all access for a compromised identity? Measured, with a target. This single number is the most reliable indicator of program health we know of, and it is not improvable by purchasing.
  • How much unjustified standing access exists? Access that persists past the business need that created it. This should trend down.
  • Is the secure path faster than the alternative? Ask engineers. Their answer predicts whether your controls will hold.

What to ask when someone presents a Zero Trust plan. Three questions:

Who outside the security team is accountable for delivering part of this? If nobody, the plan will govern a fraction of the risk.

What does the program produce in years three through five? If the answer is "maintenance," it was scoped as a project.

Which existing engineering processes get faster because of this? If none, adoption will erode.

The expected return. Not the absence of incidents — that promise is never true, and any plan built on it will be discredited by the first breach. The return is bounded consequence: incidents that remain contained, are understood in hours rather than weeks, are disclosed accurately rather than defensively, and do not become enterprise events. In an environment where compromise is a statistical certainty over any five-year window, the difference between a contained incident and an enterprise event is the entire value of the program.

The realistic timeline. Eighteen months to visibility and foundational capability. Three years to meaningful reduction in standing access and a revocation capability that works. Five years for the engineering culture to have absorbed it — at which point the practices are simply how the company builds, and the program stops being a program.

Fund it like reliability, not like a purchase. Nobody asks when the reliability work will be finished.

One last note on ownership. The single strongest predictor of success in the programs we have watched is not budget, tooling, or headcount. It is whether engineering leadership treats identity management as their responsibility rather than the security team's. Where it is owned by engineering and supported by security, it works. Where it is owned by security and tolerated by engineering, it produces reports.


15. Closing Reflection

From an architect, twenty years in.

The first Zero Trust program I worked on was a failure, and it took me several years to understand why.

We did the work properly by the standards of the time. We built a policy engine, deployed identity-aware proxies, mapped applications, wrote a strategy document I was proud of. Eighteen months in, we could point to real accomplishments: applications behind proxies, MFA everywhere, network segments reduced.

Then someone in operations, during an unrelated conversation, mentioned that the batch processing system connected to production through a set of credentials that had never been rotated because rotating them required coordinating with a vendor whose contract had lapsed. Nobody had raised it because nobody thought of it as an access issue. It was a scheduling issue. It lived in a runbook, not in an architecture diagram.

I remember the specific feeling — not alarm, but a kind of vertigo. We had spent eighteen months carefully engineering the paths we could see, and the paths we could see were the ones that had already been described by someone who thought in terms of architecture. Everything else remained exactly as it had been, invisible not because it was hidden but because it had never been represented anywhere we were looking.

What I learned, slowly, is that security work fails at the boundary of representation. Not at the boundary of effort or competence — at the boundary of what the organization has managed to write down in a form that can be reasoned about. The batch job's credentials were not a secret. Forty people knew about them. They simply existed in a category — operations, scheduling, vendor management — that our model had no way to hold.

This is why I have come to distrust security work that begins with controls, and to trust security work that begins with making the invisible representable. Draw the trust graph before you improve it. Name the ownership before you enforce the policy. Measure the revocation latency before you promise to reduce it. The discipline is not in the enforcement; the enforcement is comparatively easy. The discipline is in insisting that every trust relationship in the organization exists somewhere as an object that can be queried, owned, reviewed, and severed — including the ones created by people who do not think of themselves as making security decisions.

The other thing I have learned is more personal. I spent the early part of my career believing security was about resistance: making things harder, saying no with sufficient authority, being the person who held the line. It made me effective in a narrow way and ineffective in every way that mattered over a five-year horizon, because organizations route around resistance the way water routes around a rock. What actually changed outcomes was building things engineers wanted to use — a credential broker that was faster than copying a secret, an elevation path quicker than filing a ticket, a paved deployment path more pleasant than the alternative. Every one of those did more for our security posture than every policy I ever wrote.

Trust, in the end, is not a thing you withhold. It is a thing you construct, deliberately, with known properties: a scope, a lifetime, an owner, an attenuation rule, a revocation path, and a record. Constructed that way, trust is not a risk. It is infrastructure — as testable, as versionable, as reviewable, and as maintainable as anything else your teams build.

We have spent decades learning to engineer software with rigor: version control, code review, testing, observability, incremental delivery, blameless post-mortems. We built that discipline because we learned, expensively, that software written without it does not survive contact with reality.

Trust deserves the same treatment. It is at least as complex, changes at least as often, and fails at least as expensively. It has simply never been given the same care, because it was never recognized as something being built.

It is. Every day, in every commit, in every integration, in every hire, in every purchase order. The only question is whether it is being built deliberately.

Security becomes sustainable only when trust is designed with the same discipline as software.

Recent posts

September 4, 2026
Saga Compensation Testing: The Rollback No One Checks
September 4, 2026
Post-Acquisition Technical Integration: The First 100 Days
September 4, 2026
Why Coding Interviews Don't Predict Software Quality