Securing Claude with AiriaNewEnterprise
Route, govern, and audit every way Claude reaches enterprise data (browser, the Claude desktop app, developer tools, and Cowork/agents) through one set of Airia policies.
Claude reaches enterprise data through four distinct surfaces — the web browser, native apps, developer tools, and Cowork/agents. Each exposes a different interception hook, so each needs a different control point. This guide walks the build for all four, plus how to push every control down to the fleet via MDM.
The goal: define your DLP detectors, guardrails, and agent constraints once, then enforce them consistently at whichever layer each surface exposes.
The four surfaces
You shouldn't write four sets of rules for four surfaces. Define the policy once; apply it at each surface's interception point.
| # | Surface | Examples | Airia control point | Mode |
|---|---|---|---|---|
| 01 | Web browser | claude.ai in Chrome / Edge / Safari | Browser extension | Inline · pre-submit |
| 02a | Claude desktop app | Chat, Cowork, and Code in the Claude app | AI Gateway (Third-Party Inference) | Inline · wire-level |
| 02b | Claude mobile | Claude iOS / Android | Compliance API + OpenTelemetry | Out-of-band |
| 03 | Developer tools | Claude Code, IDE plugins, SDKs | AI Gateway (LLM proxy) | Inline · wire-level |
| 04 | Cowork & agents | Claude Cowork, agent integrations | AI Gateway (routed) + MCP Gateway | Inline · runtime |
The sections below map onto these surfaces: §1 covers surfaces 02a + 03 + 04 (inference), §2 covers surface 01, §3 covers the tool side, §4 is the unifier that forces them onto the gateways from the device, and §5 covers surface 02b (mobile) out-of-band.
1 · AI Gateway — route the Claude app and Claude Code through Airia
Claude Code and the Claude desktop app both support a custom API base URL. Point them at the Airia AI Gateway and every prompt, completion, and tool call passes through Airia on the wire: DLP, prompt-injection defense, model allowlist, budgets, audit.
In the desktop app this covers all three of its surfaces: Chat, Cowork, and Code, so everyday chat is governed on the same terms as developer traffic.
Chat · Cowork · Code → Airia AI Gateway → Anthropic Claude
↓ DLP · Prompt-injection · Agent constraints · Routing · AuditA · Build the gateway (Airia side)
Claude_Dev_Tools).Model access — choose where Claude models come from. This choice decides who pays for tokens; see Choose how Claude usage is billed below.
- Airia Model Library → Browse models: pick Anthropic models served with the shared Airia key.
- Bring Your Own Keys → Use my accounts → Anthropic: under AI Service Authentication, choose Use Customer's Anthropic Key (select an Anthropic credential; create one under Settings → Credentials if needed) or OAuth Passthrough.
claude-opus-4-8, claude-sonnet-4-6). Leave it empty to allow all. Include claude-haiku-4-5 if users run Claude Desktop, which uses a Haiku model for background tasks such as thread naming. Then click Add to gateway and Create gateway.agk-… key carries a User label. Per-user keys are what make the Gateway Monitoring User column attribute traffic correctly. Click Save Configuration.Two credentials, two jobs. The agk-… gateway key lives in the client and authenticates the user to Airia. The upstream credential (Airia's Anthropic key, your own Anthropic credential, or the user's own Claude sign-in with OAuth Passthrough) authenticates the request to Anthropic, and that is what gets billed.
Choose how Claude usage is billed
| Model access choice | Who pays for tokens | What the client sends |
|---|---|---|
| Airia Model Library (shared Airia key) | Airia handles billing, charged to your Airia account | The user's agk-… key as the API key |
| Bring Your Own Keys → Use Customer's Anthropic Key | Your organization's Anthropic account, billed by Anthropic | The user's agk-… key as the API key |
| Bring Your Own Keys → OAuth Passthrough | Each user's own Claude subscription; your Airia balance is not debited | The user's Claude sign-in, plus the agk-… key in an x-airia-key header |
Choose OAuth Passthrough when your developers already sign in to Claude Code with their own Claude plan and you want Airia governance on that traffic without a second API bill. Each developer stays signed in to Claude Code (/login), and the client sets only the x-airia-key header:
{
"env": {
"ANTHROPIC_BASE_URL": "https://<your-gateway-url>/anthropic",
"ANTHROPIC_CUSTOM_HEADERS": "x-airia-key: <agk-user-key>"
}
}With OAuth Passthrough, leave ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, and apiKeyHelper unset in every settings file, so Claude Code sends the user's own sign-in.
Pair the desktop app setup in §B with a key-based configuration. OAuth Passthrough uses each developer's Claude sign-in, which Claude Code sends with every request. The desktop app setup in §B authenticates with the agk-… key alone, so connect it to a configuration that uses the Airia Model Library or Use Customer's Anthropic Key. If Claude Code uses OAuth Passthrough, create a separate configuration for the desktop app. Each configuration issues its own agk-… keys: use the desktop configuration's key in §B, and the OAuth Passthrough configuration's key in Claude Code's x-airia-key header.
B · Wire the client — the Claude desktop app
Prerequisite: Claude desktop app version 1.13576.0 or newer, which adds the Allow Chat control, and a gateway configuration that uses the Airia Model Library or Use Customer's Anthropic Key (see Choose how Claude usage is billed).
Help → Troubleshooting → Enable Developer Mode. A Developer menu appears.Fill the connection fields:
| Field | Value |
|---|---|
| Configuration | Gateway |
| Gateway Base URL | your Gateway URL + /anthropic — e.g. https://gateway.airia.ai/anthropic (see §C) |
| Gateway API Key | the user's agk-… key |
| Gateway Auth Scheme | x-api-key |
<your name> · Gateway.Turn on the surfaces your users need. The app gates Chat, Cowork, and Code separately, in the same Third-Party Inference screen:
| Surface | Control | Default |
|---|---|---|
| Chat: quick questions and drafting | Allow Chat | Turn it on |
| Cowork: longer multi-step tasks | Allow Cowork | On |
| Code: Claude Code in the app | Allow Code | On |
Enable Allow Chat so Chat routes through the gateway. Chat appears as Home in the left rail. At least one surface must stay enabled.
What this gets you. Routing inference through the gateway replaces the app's default connection to Anthropic with your Airia gateway. Users keep working in the same app, across Chat, Cowork, and Code. Every request now shows in Gateway Monitoring, and you can layer DLP guardrails and agent constraints (tool block/audit) on the same traffic. Set constraint Scope = Gateway; All Agents only catches Airia pipeline traffic, not the Claude app or Claude Code.
Personal Claude content doesn't carry over in this mode. Third-Party Inference means the app has no Anthropic account signed in, so a user's personal skills, chat history, memory, projects, and connectors from their Claude account don't carry over, across all three surfaces. Skills still work in this mode: provision the ones your users need as files pushed by MDM. Let users know before you roll this out.
C · Find your gateway base URL
/anthropic to the copied URL. For example, https://gateway.airia.ai becomes https://gateway.airia.ai/anthropic.Use this …/anthropic value everywhere a Claude client asks for a base URL: Gateway Base URL in Claude Desktop and ANTHROPIC_BASE_URL in Claude Code. Claude Code also accepts the value with a trailing slash (…/anthropic/), which is the form the Automate Setup script writes. In Claude Desktop, enter it without the trailing slash.
D · Push it down to the fleet (MDM)
Two surfaces, two managed-config mechanisms — deploy whichever your users run, or both.
Build the Third-Party Inference config in-app, then export the managed profile — .mobileconfig (macOS) or .reg (Windows) — and push via Jamf / Intune / Group Policy.
- A managed profile renders the in-app config read-only — the "lock" the env-var drop lacks.
- Push the profile before the app to prevent first-launch claude.ai sign-ins.
- Allowlist the app by signing identity, not file path.
- The profile carries the surface toggles too. Include Allow Chat so everyday chat is governed rather than pushed back to the browser.
Authoritative MDM reference: claude.com/docs/cowork/3p/installation
2 · Browser extension — govern claude.ai in the browser
The Claude desktop app now routes Chat, Cowork, and Code through the gateway, but users can still open claude.ai in a browser tab, and that surface is not routable through the AI Gateway. The Airia Browser Extension is the control point: it's the one place Airia can intervene before the prompt leaves the device. It checks each prompt against your guardrail before the prompt leaves the device, and applies your domain rules to every AI site.
A · Check prompts before they're sent
Apply a guardrail to the Browser Extension and the extension checks each prompt against it before it's sent. The check runs on ChatGPT, Claude, Gemini, and Perplexity. Every other AI site is governed by the domain rules in step B.
Start the guardrail's filters in Audit so findings are recorded in Audit → Violations without interrupting anyone, then move individual filters to Block once you've reviewed them.
B · Set domain rules for every AI site
Go to Discover → Connect and click the Browser Extension tile to open the Browser Extension Policies. Each policy applies to the users and groups on its Assignment tab. Set a behavior per domain on the Domain Rules tab:
| Behavior | Effect |
|---|---|
| Block | User cannot reach the domain — block page shown. |
| Warn | Warning banner; user can acknowledge and proceed (logged). |
| Monitor | Silent — no user-visible change, usage logged. |
| Redirect | Reroute e.g. chatgpt.com → your sanctioned claude.ai deployment. |
To send prompt bodies to Airia for analysis alongside your gateway traffic, turn on request body capture on the policy's Data Capture Settings tab. The extension redacts sensitive fields on the device before the body is sent.
C · Push the extension to devices
The extension is deployed like any managed browser extension — force-installed so users can't remove it:
ExtensionInstallForcelist, Edge ExtensionInstallForcelist — to the Airia extension ID + update URL.pollingIntervalMinutes (default 5) — so rule changes propagate without redeploying.The email address is a per-user value, so push it through a user-scoped policy rather than the device-wide one. On Windows, write it for each signed-in user, including people who sign in with an on-premises Active Directory account on hybrid-joined PCs.
For full force-install and managed-storage configuration steps across Chrome, Edge, Firefox, and JAMF Pro (macOS), see the Browser Extension MDM Deployment Guide.
D · Monitor claude.ai usage
Every request the extension sees on a matching domain emits a Shadow AI event — domain, method, actionTaken (MONITORED / WARNED / BLOCKED / REDIRECTED), redacted body, browser, user. Events from one tab session share a batchId. Surfaced in the Activity Monitor and the Shadow-AI events feed, alongside gateway violations — one feed across surfaces.
3 · MCP Gateway — govern the tool side
Routing inference through the AI Gateway doesn't govern the tools Claude calls. The MCP Gateway aggregates many MCP servers behind a single authenticated URL, manages all downstream credentials centrally, and gives IT one address to allowlist instead of dozens of local configs with plaintext keys.
Claude Code · Cowork · Cursor → Airia MCP Gateway (one OAuth URL)
↓ manages all downstream auth
[GitHub] [Atlassian] [Slack] [Snowflake] [Airia-hosted & remote servers]A · Set it up
/mcp, or /radar when Use Radar is on; turn on Radar for more than ~50 tools to get on-demand tool discovery.B · Push it down to clients
Distribute the gateway URL into managed client configs via the same MDM file drop as §1 — one MCP entry replaces every local server.
Add the MCP server entry pointing at the gateway URL to the managed client config. Users authenticate once via OAuth on first connect; Airia handles every downstream credential after that.
Where enforcement happens. Agent constraints and content guardrails apply at the AI Gateway — every tool call's full context (which tool, what query, which user) is visible there. The MCP Gateway handles routing, credential management, and scans tool definitions for prompt injection before they enter the model context.
4 · Endpoint agent — force both gateways from the device
Pushing settings.json / config.toml per client works, but it's per-app and users with file write access can override it. The Airia endpoint agent (airiad) is the device-level unifier: deploy it once via MDM, and in enforce mode it rewrites both the LLM-client base URLs and the MCP server entries on the workstation to point at your Airia gateways — automatically, on every check-in.
A · Deploy via MDM
.mobileconfig + airiad.pkg (macOS Apple Silicon today).B · Observe vs Enforce
Discovery only. The agent inventories the MCP servers and LLM clients configured on each device and reports them — no changes to developer machines. Start here; review what would be rewritten before flipping.
This is what closes the loop. Enforce mode makes the device route inference through the AI Gateway and tools through the MCP Gateway with no per-user setup — and it catches local clients an MDM file drop would miss. Alternative / complement: chain outbound AI traffic into the gateway at the network/SASE layer (Zscaler / Prisma / Netskope / Cloudflare) — no software on the endpoint. Customers already running SASE often prefer that path.
5 · Mobile & unenrolled devices — see what you can't proxy
Claude iOS / Android, and any desktop app you haven't enrolled in Third-Party Inference, do not honor a custom base URL. There is no inline interception hook short of TLS-inspecting SASE. So the play here is different: you can't block at the wire, so make every interaction visible, classify it, and remediate after the fact. Out-of-band: minutes, not days, but the detection (and deletion) is real.
For the desktop app this is a coverage question, not a product limit: an enrolled device routes Chat, Cowork, and Code through the gateway (§1). Use this section for the devices your MDM hasn't reached, and for mobile, where no enrollment path exists.
Claude iOS · Android · unenrolled desktop → Anthropic
↓ telemetry (out-of-band)
Airia → classify · detect · remediate (delete chat · alert · escalate)A · Two ingestion paths — pick by Claude tier
| Path | Tier | Covers | What you get |
|---|---|---|---|
| Compliance API (pull) | Claude Enterprise | claude.ai web + native apps | Streams every prompt + response to Airia → SIEM / data lake. Supports automated chat deletion — Airia can revoke a violating conversation from the user's history. |
| OpenTelemetry (push) | Claude Teams (& where Compliance API isn't available) | Claude Code + Cowork | OTLP collectors give meaningful visibility into Teams-tier usage. Less rich than the Compliance API, but works without enterprise support. |
Both feed the same Airia pipeline — capture → detect (PII patterns, "Confidential" markings, regulated data classes) → remediate (delete violating chat, notify the user, escalate to the AI governance committee). Configure both from one place: Audit → Usage → Claude Monitoring.
The same Claude Monitoring page also ingests OpenAI Codex CLI telemetry; see Monitoring Codex with Airia.
B · Turn it on
read:compliance_activities / _user_data / _org_data), then adds it in Airia as an Anthropic compliance credential.secureCode / secureCowork / secureClaudeAi and save.Deploy the push config for Code / Cowork (MDM, alongside §1):
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "http/json",
"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT": "<tenant>/v1/ClaudeCodeOtelIngest/ingest",
"OTEL_EXPORTER_OTLP_HEADERS": "X-API-Key=<otel-key>",
"OTEL_LOG_USER_PROMPTS": "1",
"OTEL_LOG_RAW_API_BODIES": "1"
}
}Cowork: set the same OTLP endpoint + X-API-Key header under claude.ai/admin-settings/cowork → Monitoring.
Honest caveats. This is observation, not prevention — pair it with the inline controls (§1–§4) for surfaces that can be proxied. OTEL_LOG_RAW_API_BODIES ships full prompt/response bodies — high signal, high sensitivity; clear it with compliance. If the Compliance API can't be enabled (no Enterprise / no Primary-Owner access), fall back to the browser extension (§2) for the claude.ai surface.
Closing the gaps
The build above covers all four surfaces. A few cross-cutting items still close real bypass paths.
- ① Block direct egress (critical). The gateway only enforces if users can't reach Anthropic directly. Block
api.anthropic.comat the firewall / SASE layer — otherwise a developer unsets the env var and bypasses everything. A managed config file is the floor, not the ceiling. - ② The Bash blindspot. Agent constraints intercept tool calls at the gateway — but Bash commands Claude Code runs locally never traverse it. Mitigate with Claude Code permission modes +
~/.claude/settings.jsonallowlist hooks. The on-device agent (§4) closes this at the OS layer. - ③ Content DLP on claude.ai. The browser extension is domain-scoped. For real prompt-content visibility on claude.ai, turn on
captureRequestBodyand/or the Compliance API — that's where content-level DLP actually runs, post-submit. - ④ Personal content in third-party mode. Provision the skills your users need as MDM-pushed files (see §1 B).
- ⑤ One policy library + weekly audit. Define DLP detectors and guardrails once and apply across all surfaces. Then audit the gateway feed weekly — any active developer with zero gateway traffic in a week is on PTO or bypassing.
The full-stack enforcement recipe: AI Gateway (Airia key, your own Anthropic key, or OAuth Passthrough for Claude Code) + MCP Gateway + MDM-pushed managed profiles + endpoint agent in enforce mode (or SASE proxy-chaining) + egress block to api.anthropic.com + Browser Extension Shadow-AI policy + Compliance API / OTel for mobile + agent constraints scoped to Gateway + weekly feed audit. Each layer closes a different bypass.