All posts

Segregation of Duties for Inference

When a single service account can both submit prompts and retrieve model outputs, a compromised credential instantly grants unrestricted inference capability, exposing proprietary data and violating compliance budgets. The financial impact of an unapproved model run or a data‑leak incident can dwarf the cost of the tooling needed to prevent it. Segregation of duties for inference means that the person who designs a prompt, the system that executes the model, and the reviewer who validates the r

Free White Paper

DPoP (Demonstration of Proof-of-Possession): The Complete Guide

Architecture patterns, implementation strategies, and security best practices. Delivered to your inbox.

Free. No spam. Unsubscribe anytime.

When a single service account can both submit prompts and retrieve model outputs, a compromised credential instantly grants unrestricted inference capability, exposing proprietary data and violating compliance budgets. The financial impact of an unapproved model run or a data‑leak incident can dwarf the cost of the tooling needed to prevent it.

Segregation of duties for inference means that the person who designs a prompt, the system that executes the model, and the reviewer who validates the result are all distinct actors. In practice, many teams rely on shared API keys, static credentials, or blanket IAM policies that give every engineer full read‑write access to the inference endpoint. Those shortcuts eliminate friction but they also erase any trace of who asked what, when, and why.

What the current setup usually looks like

Typical deployments place a model behind a public HTTP endpoint. Engineers obtain a token from an identity provider, embed it in their client code, and call the endpoint directly. The token proves identity, but the request bypasses any policy engine. The request reaches the model host unchanged, the response streams back, and no central component records the interaction. Because the gateway is missing, there is no place to enforce approval, mask sensitive fields, or replay the session for audit.

This arrangement satisfies the setup requirement – the identity provider knows who is making the call – but it leaves the critical enforcement gap wide open. Without a data‑path control point, the organization cannot guarantee that a junior engineer’s inference request is reviewed, that a high‑value model output is redacted, or that every call appears in an audit log.

How hoop.dev provides the missing data‑path

hoop.dev sits between the identity layer and the inference service, acting as an identity‑aware proxy. It verifies the OIDC or SAML token, extracts group membership, and then applies policy before the request ever touches the model. Because hoop.dev is the only place the traffic passes, it can enforce every segregation‑of‑duties control you need.

Continue reading? Get the full guide.

DPoP (Demonstration of Proof-of-Possession): Architecture Patterns & Best Practices

Free. No spam. Unsubscribe anytime.
  • Just‑in‑time approval: high‑risk inference requests trigger a workflow that requires a senior reviewer to approve the prompt before the model runs.
  • Inline masking: responses that contain personally identifiable information or proprietary data are redacted in real time, ensuring downstream systems never see raw values.
  • Session recording: every request and response is captured, enabling replay, forensic analysis, and evidence generation for auditors.
  • Role‑based routing: engineers, data scientists, and auditors are mapped to distinct roles; each role sees only the actions it is permitted to perform.

All of these enforcement outcomes are possible only because hoop.dev occupies the data path. If the gateway were removed, the same policies could not be applied, and the segregation of duties guarantees would disappear.

Practical steps to enforce segregation of duties

  1. Define clear role boundaries – for example, Prompt Creator, Model Executor, and Result Auditor. Assign each role to the appropriate group in your identity provider.
  2. Configure hoop.dev policies that map groups to actions. Require approval for any request that exceeds a predefined cost threshold or accesses a sensitive dataset.
  3. Enable inline masking for fields that contain confidential customer identifiers. hoop.dev will automatically scrub those values before they leave the gateway.
  4. Activate session recording. The recorded audit logs give you a complete trail that demonstrates compliance with segregation‑of‑duties requirements.
  5. Test the workflow with a low‑risk prompt to verify that the approval step, masking, and logging behave as expected before rolling out to production.

For detailed guidance on getting started with hoop.dev, see the getting‑started guide. The learn section provides deeper explanations of each enforcement feature.

FAQ

Q: How is segregation of duties different from simple authentication?
A: Authentication proves who you are; segregation of duties controls what you can do after you are authenticated. hoop.dev adds a policy layer that enforces role‑based limits, approvals, and masking on every inference request.

Q: Can hoop.dev enforce per‑request approvals for high‑value model runs?
A: Yes. Policies can require a senior reviewer to explicitly approve a request before hoop.dev forwards it to the inference service.

Q: What evidence does hoop.dev generate for auditors?
A: hoop.dev records each session, including the identity of the requester, the approved policy decision, any masked fields, and the full request/response payload. These audit logs serve as verifiable evidence of segregation of duties compliance.

Ready to see the code in action? Explore the open‑source repository on GitHub and start building a segregation‑of‑duties‑first inference pipeline today.

Open source

Save the open-source gateway for agent data access

Hoop is MIT-licensed infrastructure for controlling how AI agents reach production data. Star hoophq/hoop so you can inspect it, deploy it, or share it when your team starts governing agent access.

Star and save the repo →More posts