What are Security Policies?
Security policies are guardrails that protect sensitive data flowing through AI tools in your organization. Two guardrails ship today — PII and Secrets — and they detect personally identifiable information, API keys, passwords, connection strings and cryptographic keys before that content reaches a model. Dashboard: Policies → Data (gateway.getunbound.ai/policies/data-policies)The Data section is enabled per organization. If you don’t see it under Policies, contact support.
Available Guardrails
PII Detection
PII detection is switched on per organization. If the create-policy form offers only Secrets, contact support to enable it.
- Block — Reject the request entirely
- Audit — Log the detection but allow the request
Identifier types are being opened up for policy configuration one at a time. Credit Card Number and Email Address are available today, with more to follow — the create-policy form always shows the current set. A policy acts only on the types you select.
Secrets Detection
Identifies credentials in prompts across three categories — API Key (including OAuth access tokens and AWS keys), Database Connection String and Cryptographic Key. Unlike PII, Secrets covers all three categories unless you narrow it. Each detection is recorded against the policy, and can be set to block or audit.Enforcement message
A guardrail set to Block carries an Enforcement Message — up to 500 characters, shown to the developer in place of the default wording at the moment they are stopped. It reaches Claude Code, Codex, Cursor, GitHub Copilot and Pi (Beta) when a prompt is submitted, and Augment Code, which has no prompt event, on MCP tool calls where tool-input checking is on for your organization. An Audit guardrail has no message.Setting Up Security Policies
- Go to Policies → Data in the Unbound dashboard
- Click Create Policy
- Enable the guardrails you want (PII, Secrets) and set an action for each
- Optionally scope the policy to specific user groups
- Save your configuration
Security policies are evaluated on each request as it’s made. When a guardrail is set to Block, the request is stopped before its content reaches the LLM provider.
When more than one guardrail policy applies
Security policies merge rather than compete. Every policy that reaches a developer contributes, and for each guardrail the most restrictive action wins — Block beats Audit. So a team policy auditing Secrets and an org-wide policy blocking Secrets resolve to Block for anyone in that team. Audit contributions are kept separately and all of them apply, so a request can be recorded against several audit policies at once.Priority does not decide which action wins. On a Cost policy it picks the single winner; on a security policy the most restrictive action wins whatever the priority numbers say. It is not ignored entirely, though: where two policies set the same action on the same guardrail, the one with the lower priority number supplies that guardrail’s threshold, selected identifier types and enforcement message, and ties go to the policy created first.
Applying to Users
By default, a security policy with no user groups applies to everyone in your organization. To restrict a policy to specific teams, assign it to one or more user groups during creation or editing.Managing via CLI
List and manage security policies from the terminal:CLI Policy Management
Create and manage security policies from the terminal
Analytics
Review guardrail hits and security events in the dashboard
Account Access
Developers sign into Claude Code, Codex and Cursor with accounts of their own choosing. Your organization buys seats and signs terms against those plans, but a personal account runs the same tool under consumer terms you never negotiated. An Account Access policy closes that gap: you name the accounts you sanction, and a session signed in with anything else is refused. Dashboard: Policies → Usage → Account AccessWhat you restrict
Switch on each tool you want to gate, then give up to three allow-lists:
Three rules govern those lists, and all three catch people out:
- An empty list places no restriction on that axis. Leave Plans empty and the policy doesn’t care which plan the account is on.
- Organization IDs and email domains are alternatives — an account is accepted when either matches.
- Ticking every named plan is not the same as leaving Plans empty. An account that reports no plan at all is still refused unless the list is empty.
When more than one policy applies
- A tool is gated if any applicable policy switches it on.
- The account must satisfy every applicable policy. One refusal refuses the request, whatever another policy would have allowed.
- A policy that restricts nothing permits everyone and never causes a refusal.
Claude Cowork follows Claude Code. Cowork is the desktop surface of Claude Code and has no switch of its own — it uses the Claude Code settings, and they may apply to only some Cowork sessions. Sanction Cowork with Organization IDs. A Cowork session reports its organization but no plan or email, so a listed organization is accepted only while Plans is empty — a Plans list refuses an account that reports no plan.
Blocked attempts
Every refusal is recorded, so a developer who is stopped is visible to you rather than silent. Open the policy from Policies → Usage → Account Access to review its refusals. Each row carries when it happened, the tool, the Unbound user whose key was used, the account that was refused — its organization ID, email, email domain and plan — the device, and the reason. Reasons are: Organization not approved, Domain not allowed, Plan not allowed, Policy from another org, and Policy check failed.Accounts in use
Separately from any policy, Unbound records every account a developer signs a coding tool into, so you can see what is in use before you decide what to sanction. Find it under Analytics → Usage → Account Usage: the email domains in play across your organization, and a searchable table of accounts with a column each for the user, the tool, the account, its plan and when it was first seen.Account Access is in Beta and may not be enabled for your organization. Admins create and change these policies; Analytics Viewers can read them and their blocked attempts. Each blocked attempt also fires the
account_access.blocked webhook. There is no Slack alert or export for a blocked attempt.
