How to Control LLM Access Across Teams
A single provider API key grants identical permissions to everyone holding it, which means a support team, a research team, and a contractor all reach the same models, the same tools, and the same data. Controlling LLM access across teams requires a layer that authenticates the caller, decides which models and tools that caller may reach, and records the decision. Bifrost, the open-source AI gateway built in Go by Maxim AI, enforces this at the request path rather than in application code. This guide walks through the five controls that make team-level access work in production: scoped credentials, identity sync, permission and visibility separation, tool governance, and audit.
What Controlling LLM Access Across Teams Requires
LLM access control is the practice of authenticating every model request to a known identity, then authorizing that identity against a policy that defines which providers, models, and tools it may use. It differs from ordinary API authentication because the resources being authorized are probabilistic and expensive, and because agentic systems reach beyond models into external tools.
Four distinct layers have to be in place:
- Identity: knowing which user or service issued the request, ideally sourced from the same directory that governs the rest of your systems
- Entitlement: a credential that carries the permitted providers, models, and tools for its holder
- Authorization: rules for what an operator may do in the control plane, kept separate from what they may see
- Audit: a durable record of who changed which policy and when, suitable for a compliance review
Teams that skip any one of these end up enforcing policy socially rather than technically. The Bifrost governance resources describe how these layers compose into a single policy per consumer.
Why Shared Provider Keys Fail at Team Boundaries
Provider credentials were designed for an application, not an organization. Once several teams share one key, the failure modes are structural rather than procedural:
- No differentiation: every holder can call every model the key can reach, including the most expensive ones
- No revocation granularity: disabling a compromised key disables every team using it
- No tool boundary: an agent built by one team can call any tool the shared credential reaches
- No attribution: the provider dashboard reports one total, so a policy violation cannot be traced to an owner
- Manual lifecycle: contractors and departing employees keep working access until someone remembers to rotate the key
Issuing one provider key per team addresses the first two problems and creates new ones, because routing, failover, and shared rate limit headroom now fragment across keys. The LLM Gateway Buyer's Guide covers why access control is usually the capability teams underweight during evaluation.
Scoping Model and Provider Access With Virtual Keys
Virtual keys are the primary governance entity in the Bifrost AI gateway. Applications authenticate with a virtual key instead of a raw provider credential, and the key carries the access policy for whoever holds it. A virtual key attaches to exactly one team or one customer, and those attachments are mutually exclusive, so a request maps unambiguously to one owner.
Each virtual key supports the controls that define a team's blast radius:
- Model and provider filtering: restrict a key to named providers and an explicit model allow-list
- Key restrictions: limit a virtual key to specific upstream provider API keys, so a team's traffic can be pinned to a particular account
- Expiry: set a key to never expire, use a preset from 30 minutes to 7 days, or pick a custom date and time
- Active or inactive status: disable a key instantly without deleting it or disturbing other teams
- Budgets and rate limits: cap consumption per key, with independent limits at the team and customer levels above it
The expiry and status controls matter most for contractors and short-lived projects, where the risk is not misuse during the engagement but access that quietly outlives it.
Syncing Teams and Roles From Your Identity Provider
Manually maintained team lists drift from reality within weeks. The open-source Bifrost gateway connects to a corporate identity provider so team membership and roles come from the directory that HR and IT already maintain.
User provisioning in the enterprise tier covers single sign-on through OAuth 2.0 and OpenID Connect with JWKS-based JWT validation, automatic role assignment from custom claims, app roles, or group-to-role mappings, and team synchronization that maps identity provider groups onto Bifrost teams. Business units map from directory attributes, and bulk imports preview the filter before committing.
Lifecycle handling is what makes the sync trustworthy rather than a one-time import:
- Background reconciliation runs every 24 hours for imported users
- Session refresh checks run every 15 minutes to confirm users remain active with the identity provider
- Inbound SCIM 2.0 lets the identity provider push user and group changes in real time through the
/scim/v2API
Okta, Microsoft Entra, Keycloak, Zitadel, and Google Workspace are all supported, using the same configuration surface with provider-specific setup for the OAuth client and claims.
Separating What Users Can Do From What They Can See
Most access models conflate permission with visibility, which is why a developer with legitimate edit rights can often browse every other team's configuration. The Bifrost platform splits these into two mechanisms that compose.
Role-based access control governs which operations a user may perform. Three system roles cover common patterns: Admin with full access across all resources, Developer with create and edit rights on technical resources plus read access to logs and cluster state, and Viewer with read-only access. System roles cannot be deleted but their permissions can be adjusted, and custom roles handle structures the defaults miss, such as auditor, QA, or compliance access.
Data access control then scopes the result set of those operations to the rows a user is entitled to see. Each role carries one of three scopes:
- Own data: members see only rows they created or own, including their assigned virtual keys and the prompts they authored
- Team data: members additionally see rows created by anyone on the teams they belong to
- All data: no row filtering, which is the default for system roles such as Admin
The combination is what produces real isolation: a developer on one team holds edit permissions but cannot see another team's virtual keys, prompts, or routing rules. Scope is set on the role rather than per user, and rows created before adoption stay visible by default so enabling it on an existing install does not silently hide data. These mechanisms sit alongside the budget and routing controls described in the governance capability overview.
Governing Tool Access and Proving It Afterward
Agentic systems extend the access question past models to the tools an agent can invoke. In the Bifrost gateway, MCP tool filtering attaches tool permissions to the same virtual key that carries model permissions, using a strict allow-list built from the key's configuration.
The default is deny-by-default: a virtual key with no MCP configuration has no tools available at all, and tools must be added explicitly. Per client, teams can select named tools, use a wildcard to permit everything from that client, or leave the list empty to block it. Inactive and expired virtual keys are rejected at tool execution time with a 403 regardless of their tool configuration, which closes the gap between revoking a key and stopping an agent already mid-workflow. The Model Context Protocol is the interface being governed here, so the same policy applies to any compliant tool server.
Two capabilities keep this manageable as the organization grows:
- Access profiles define a reusable policy template covering the provider list, model allow-list, budgets, rate limits, and MCP tool access. Assigning a profile creates a per-user copy and auto-issues a write-protected virtual key, so users cannot weaken their own policy, and marking a profile as a role default provisions new members automatically.
- Audit logs record who changed what and when, can be signed with an HMAC key for verification, support filtering by action, outcome, and date range, and export as JSON, JSON Lines, or Syslog with optional archival to object storage for long-term retention.
Start Controlling LLM Access With Bifrost
Controlling LLM access across teams comes down to five decisions: issue scoped virtual keys instead of sharing provider credentials, source team membership from your identity provider, separate operator permissions from data visibility, attach tool permissions to the same credential as model permissions, and keep a signed record of policy changes. The Bifrost gateway layer implements all five at the request path, so policy holds regardless of which application or agent issues the call. Teams in regulated environments can review deployment and compliance options on the Bifrost Enterprise page.
To see how virtual keys, identity sync, and tool governance would map onto your team structure, book a demo with the Bifrost team.