Private AI teams often talk about safety as if it starts and ends with where the weights live.
That is too narrow.
If a model route can be reached through an HTTP port, a reverse proxy, a browser app, a cluster Service, or a tunneling tool, then the route has become an access-controlled resource whether the model runs in a public cloud or on a local GPU in your own rack.
That is why private AI needs an auth contract.
An auth contract is the release record that binds bind address, exposure path, caller identity, allowed origins, authorization method, proxy behavior, route logging, and access scope into one visible operating boundary.
This is not the same thing as a residency contract. Residency answers where the route runs and where data lives. An auth contract answers who can reach the route, under what conditions, through which gateway, and with what proof that the caller should be trusted.
Why this matters now
The current primary-source docs already show that local inference is an access surface, not just a model process.
vLLM's current serve docs expose --host, --port, --allowed-origins, --api-key, SSL certificate options, --root-path, and custom middleware hooks. The same docs say that if --api-key is provided, the server requires one of those keys in the header. vLLM's current engine-arguments docs also say --allowed-local-media-path lets API requests read local images or videos from directories on the server filesystem and explicitly calls that a security risk that should only be enabled in trusted environments.
Ollama's current FAQ says Ollama binds 127.0.0.1 port 11434 by default, can be exposed on the network with OLLAMA_HOST, can sit behind a proxy such as Nginx, and allows additional browser origins through OLLAMA_ORIGINS.
Kubernetes' current Service docs say a Service exposes an application behind a single outward-facing endpoint. Its current NetworkPolicy docs say policies can control traffic flow within the cluster and between Pods and the outside world, and that Pods are non-isolated for egress by default until a matching egress policy applies. NIST SP 800-207 says zero trust assumes there is no implicit trust granted based solely on physical or network location and that authentication and authorization are discrete functions performed before a session to an enterprise resource is established.
Put together, those sources describe the same shift. The minute a private model is reachable beyond one local shell, it becomes an enterprise resource that needs explicit access rules.
The docs already show why auth belongs in the route contract
1. The serving stack exposes authentication and origin policy as first-class settings
vLLM does not treat access control as an afterthought. Its current serving docs expose host and port settings, CORS-related origin controls, API key requirements, SSL paths, reverse-proxy root-path configuration, and middleware hooks.
That is a strong signal from the product itself. Caller identity and transport boundaries are part of route behavior.
If one environment uses only loopback access, another is reachable on a shared subnet, and a third sits behind a reverse proxy with header-based auth, those are not the same private AI route just because the model name is unchanged.
2. Local defaults are protective, but they are not the whole policy
Ollama's current FAQ is clear that it binds 127.0.0.1 port 11434 by default. That is a useful safety default. The same FAQ also explains how to change the bind address with OLLAMA_HOST, how to expose the service through a proxy, and how to allow extra browser origins with OLLAMA_ORIGINS.
That means "it runs locally" is only true until someone broadens reachability. Once the route is exposed to another host, a browser app, or a tunnel, the organization needs an explicit record of which callers are expected and which ones are not.
3. Network location is not identity
NIST SP 800-207 says zero trust assumes no implicit trust based solely on network location and that authentication and authorization happen before a session to an enterprise resource is established.
That maps directly onto private AI. A model endpoint on an internal subnet is still an enterprise resource. Being inside the VPC, office network, VPN, or lab VLAN does not by itself answer who should be allowed to call the route, whether browser-based tools may reach it, or how the organization distinguishes operators from automation.

4. Exposure path changes the trust surface
Kubernetes' current Service docs describe a Service as the mechanism that exposes an application behind a single outward-facing endpoint. That is helpful for reliable connectivity, but it also means private AI teams can move a route from process-local to cluster-visible or externally reachable without changing the model itself.
The route therefore needs a named exposure contract. Is it cluster-internal only? Reachable through a gateway? Reachable from browser-based internal tools? Reachable from external vendors? "Runs on our own hardware" does not answer any of those questions.
5. Default-allow networking is not an access strategy
Kubernetes' current NetworkPolicy docs say policies can govern traffic both inside the cluster and between Pods and the outside world. They also say Pods are non-isolated for egress by default and become isolated for egress only when a matching policy applies.
That matters because many teams assume private AI is safe once inbound exposure looks limited. In practice, route trust also depends on which destinations the service may call, which proxy or media URLs it may fetch, and whether external integrations are deliberately allowed or simply reachable by default.
6. The model server may be trusted to touch more than text
vLLM's engine-arguments docs go a step further. They say enabling --allowed-local-media-path allows API requests to read local images or videos from directories on the server filesystem, and they explicitly call that a security risk suitable only for trusted environments.
That is a strong reminder that auth is not only about who can call the route. It is also about what a caller can cause the route to access once admitted.
What breaks when the auth contract is missing
1. Local demos become quietly shared services
A route starts on loopback, then someone adds a proxy, a tunnel, or a broader bind address so a teammate can test it. Soon multiple tools can reach the endpoint, but nobody has written down who those callers are supposed to be.
2. Browser convenience outruns browser policy
The team enables extra origins so an internal web UI can call the model. Later a second app, extension, or copied frontend appears. Because the origin policy was treated as a convenience tweak instead of a governed boundary, reachability spreads faster than review.
3. Internal network placement gets mistaken for authorization
The route is "inside the cluster" or "behind VPN," so teams assume that is enough. NIST's zero-trust framing says it is not. Internal location does not prove the caller, the device, the intended use, or the scope of what should happen next.
4. Proxy changes create untracked behavior differences
One environment reaches the route directly. Another goes through a reverse proxy that injects headers, rewrites paths, or terminates TLS. A third uses a cluster gateway. The endpoint name stays the same, but the auth and audit behavior changes.
5. Sensitive server-side capabilities are exposed by accident
If a route can read local media paths, pull remote media, or sit on a subnet with broad egress, then a caller may be able to do far more than just request text generation. Without an auth contract, those powers stay implicit.
6. Incident review cannot explain who could reach what
After a questionable request, operators need to know which bind address was active, which proxy path accepted traffic, which origins were allowed, whether API keys were enforced, and which logs captured the request. Without that record, the route is hard to investigate and harder to trust.
What an auth contract should include
1. Exposure boundary
State whether the route is loopback-only, host-local, subnet-reachable, cluster-internal, gateway-published, or internet-reachable through an approved front door.
2. Bind and proxy settings
Record the exact bind address, port, reverse-proxy path, TLS termination point, and any root-path or host-header assumptions the route depends on.
3. Caller identity method
Define how callers prove identity. That may be an API key, gateway auth, mTLS, workload identity, or another approved method. The important part is that the route does not rely on mere network placement.
4. Origin policy
List which browser origins, internal apps, or extension origins may call the route and which ones are denied. Treat CORS and origin allowlists as part of the product boundary, not frontend trivia.
5. Capability scope
Document what the route is allowed to do once called. Can it read only prompt text, or may it also fetch remote media, read approved local media directories, or reach external tools over the network?
6. Egress and fetch rules
Keep a visible record of which destinations the service may contact, whether NetworkPolicies or equivalent controls enforce that policy, and how exceptions are reviewed.
7. Logging and correlation
Define where request logs live, which proxy and server logs can be correlated, whether request IDs are preserved, and how auth failures are observed without over-retaining sensitive content.
8. Rotation and revocation
If the route uses keys, tokens, or gateway credentials, record how they rotate, how they are revoked, and what evidence proves the old path is no longer accepted.
Questions buyers and operators should ask
- Who can reach this route right now, and through which exact endpoint or proxy?
- Is network location being used as a substitute for real caller identity?
- What origins, internal apps, or browser tools are allowed to call the route?
- Can this route fetch remote media or read local files, and under what guardrails?
- Which network policies or gateway rules restrict outbound and inbound traffic?
- Can the team prove auth settings, proxy behavior, and access logs for the exact route in production?
If those answers are fuzzy, the organization may have a local model, but it does not yet have a controlled private AI endpoint.
The commercial takeaway
Private AI maturity is moving beyond weights, GPUs, and OpenAI-compatible APIs.
The next security step is admitting that a local model becomes a real enterprise resource the moment it is reachable over HTTP. Bind address, origin policy, proxy path, API authentication, and network isolation all change what the route is and who can trust it.
That is how a private AI deployment stops being a useful lab service and becomes a governed production route.
If the organization cannot name who may call the route, how that caller proves identity, and what the route may reach or read after admission, it does not fully control the route.
Related reads
- Private AI Needs a Residency Contract: Why Zero-Retention APIs, VPC Paths, and Local GPUs Are Different Products
- Private AI Needs a Working-Directory Contract: Why Local Agents Turn the Filesystem Into a Governance Boundary
- Private AI Needs a Gated-Model Access Contract: Why Open Weights Still Depend on Identity, Approval, and Tokens
- Enterprise AI Needs a Sandbox Contract: Why Tool-Using Models Change the Trust Boundary
