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.

#SurfaceExamplesAiria control pointMode
01Web browserclaude.ai in Chrome / Edge / SafariBrowser extensionInline · pre-submit
02aClaude desktop appChat, Cowork, and Code in the Claude appAI Gateway (Third-Party Inference)Inline · wire-level
02bClaude mobileClaude iOS / AndroidCompliance API + OpenTelemetryOut-of-band
03Developer toolsClaude Code, IDE plugins, SDKsAI Gateway (LLM proxy)Inline · wire-level
04Cowork & agentsClaude Cowork, agent integrationsAI Gateway (routed) + MCP GatewayInline · 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 · Audit

A · Build the gateway (Airia side)

Secure → Gateway → AI Gateway → Add configuration. Name it for the vertical, not a customer (e.g. 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.
Allowed Models (Bring Your Own Keys) — list the models users may call (e.g. 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.
Access & Keys tab → Add Users (users or groups), then Create new Key for each developer so every 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 choiceWho pays for tokensWhat the client sends
Airia Model Library (shared Airia key)Airia handles billing, charged to your Airia accountThe user's agk-… key as the API key
Bring Your Own Keys → Use Customer's Anthropic KeyYour organization's Anthropic account, billed by AnthropicThe user's agk-… key as the API key
Bring Your Own Keys → OAuth PassthroughEach user's own Claude subscription; your Airia balance is not debitedThe 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).

Enable Developer mode: Help → Troubleshooting → Enable Developer Mode. A Developer menu appears.
Developer → Open Third-Party Inference → Connection.

Fill the connection fields:

FieldValue
ConfigurationGateway
Gateway Base URLyour Gateway URL + /anthropic — e.g. https://gateway.airia.ai/anthropic (see §C)
Gateway API Keythe user's agk-… key
Gateway Auth Schemex-api-key
Apply Changes → Save & Restart. After the app restarts, the account chip at the bottom-left should now read <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:

SurfaceControlDefault
Chat: quick questions and draftingAllow ChatTurn it on
Cowork: longer multi-step tasksAllow CoworkOn
Code: Claude Code in the appAllow CodeOn

Enable Allow Chat so Chat routes through the gateway. Chat appears as Home in the left rail. At least one surface must stay enabled.

Verify in Gateway → Analytics → Gateway Monitoring: your "ping" appears with user attribution and model. Send one from each surface you enabled; each produces its own row.

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

Go to Secure → Gateway → AI Gateway.
Click Gateway URL at the top of the page to copy your tenant's gateway endpoint. If your gateway serves more than one region, Gateway URL opens a list with the primary Gateway endpoint and each regional URL; copy the one for your users' region.
Append /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.

Go to Secure → Runtime Security → Guardrails and open the guardrail you use for your gateways, or click + Create New Guardrail.
Under Target and Scope, check Apply to Browser Extension and choose the users it applies to.
Click Apply Guardrail.

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:

BehaviorEffect
BlockUser cannot reach the domain — block page shown.
WarnWarning banner; user can acknowledge and proceed (logged).
MonitorSilent — no user-visible change, usage logged.
RedirectReroute 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:

In your MDM / Group Policy, set the browser's force-install list — Chrome ExtensionInstallForcelist, Edge ExtensionInstallForcelist — to the Airia extension ID + update URL.
Push the extension's managed configuration alongside it: the provisioning key from Discover → Connect → Browser Extension, so the extension connects without asking users to sign in, and each user's email address, so events are attributed to the right person.
Deploy that browser policy via Jamf / Intune / Kandji / GPO to the target device groups.
On next browser launch the extension installs silently and polls Airia for its policy every 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

Server Management — enable which MCP servers are available to your org.
Gateway List → Create Gateway — name it, select the apps to include, set Visibility = Tenant for a shared gateway.
Configure tools — provide credentials per app (Tenant credential level for shared service accounts, Personal for per-user OAuth like Microsoft Graph), Test Connection, then select which tools to expose.
Save — copy the gateway URL from Client Setup or Copy URL on the gateway's card. It ends in /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

Discover → Connect → pick Intune / Kandji / Jamf. Airia mints a tenant-scoped API key and bakes it into a .mobileconfig + airiad.pkg (macOS Apple Silicon today).
Upload the profile + installer to your MDM, scope to the device group. Devices pick it up on next check-in (15 min–few hrs).
Discovery findings land in SPM → Endpoints — a third discovery surface alongside the browser extension and cloud SPM connectors.

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

PathTierCoversWhat you get
Compliance API (pull)Claude Enterpriseclaude.ai web + native appsStreams 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 + CoworkOTLP 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

Mint a tenant OTel API key in Claude Monitoring (used by the Code / Cowork push).
For Claude.ai / native (Enterprise): on claude.ai a Primary Owner creates a Compliance Access Key (Compliance API enabled; scopes read:compliance_activities / _user_data / _org_data), then adds it in Airia as an Anthropic compliance credential.
Set which surfaces to secure — toggle 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.

Verify — captured prompts/events populate the Claude Monitoring dashboard (Sessions / Unique Users) once clients send traffic.

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.com at 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.json allowlist 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 captureRequestBody and/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.

Was this page helpful?

On this page