Перейти к основному содержанию
Когда агент захвачен — prompt-инъекция, отравленный результат инструмента, зацикленный прогон — то, что он реально может сделать, ограничено ровно одной вещью: тем, что было разрешено его API-ключу. Ключ без лимитов и без политики превращает одного скомпрометированного агента в инцидент на всё рабочее пространство. Эта страница — проход усиления, который вы прогоняете против каждого ключа, прежде чем он отгрузится, и снова по ритму после. Она намеренно коротка: один чек-лист, один разобранный пример, затем ссылки на глубину для каждого поля. О ментальной модели за этим начните с Области и ключей; о справочнике поле-за-полем см. обзор ключей.

1. Чек-лист минимальных полномочий

Проведите каждый ключ — новый или существующий — через эти шесть шлагбаумов в редакторе ключа (/console/token). Установка любого из них требует роли Developer или выше; две плоскости политик (§5–6) пишутся отдельно и привязываются здесь.
Задайте model_limits ровно тем списком, который нужен этому агенту (и включите model_limits_enabled). Вызов к любой модели вне списка отклоняется, прежде чем покинет шлюз, так что захваченный агент не может эскалировать к более дорогой или способной модели. Проверка: короток ли список, насколько позволяет задача — в идеале одна модель? Глубина: Лимиты моделей.
Задайте allow_ips адресами источника или CIDR, откуда агент реально вызывает. Утёкший ключ, предъявленный откуда-либо ещё, отклоняется на уровне аутентификации. Пусто означает, что разрешены все IP. Проверка: для агента с фиксированным хостом или запланированного непуст ли список и ограничен ли он этим egress? Глубина: Список разрешённых IP.
Задайте credit_limit_usd потолком, который агент никогда не должен пересекать за время жизни. Шлюз применяет его против расходов ключа. 0 означает без ограничения — зацикленный прогон может опустошить весь ваш баланс. Проверка: лимит — это реальный бюджет, а не 0? Глубина: Квота, лимит и срок действия.
Задайте expired_time абсолютным сроком действия — конец спринта, деплоя или прогона CI. -1 означает никогда не истекает. Короткоживущий ключ не может зависнуть как забытая поверхность атаки. Проверка: у эфемерного или подрядчикового ключа есть реальный срок действия, а не -1? Глубина: Истекающие ключи.
Прикрепите guardrail через guardrail_id, чтобы текст запроса (и, где поддерживается, ответа) проверялся на PII, секреты и намерение инъекции, прежде чем достигнет модели. Проверка: у ключа, обрабатывающего чувствительные промпты, привязан guardrail или он наследует default рабочего пространства? См. §5.
Прикрепите политику firewall через firewall_policy_id, чтобы каждый вызов инструмента, диспетч MCP и egress, который выпускает этот ключ, вычислялся против списка разрешённого того, что агенту легитимно нужно. Проверка: у агента, вызывающего инструменты, привязана политика firewall или он наследует default рабочего пространства? См. §6.
Поля выше — единственные настраиваемые клиентом рычаги на ключе — задайте их все в консоли; ничто здесь не требует изменения кода агента. Чтение ключа обратно показывает его маскированным; открытый текст показывается один раз при создании. См. Маскирование ключей.

2. Что / как часто / где

Три вопроса превращают чек-лист из разовой рутины в позицию.

Что

Шесть шлагбаумов выше, по порядку: model_limitsallow_ipscredit_limit_usdexpired_timeguardrail_idfirewall_policy_id.

Как часто

На каждом ключе при создании и на повторяющемся пересмотре — когда область агента меняется, когда вы ротируете ключ и по фиксированному ритму для долгоживущих ключей.

Где

В редакторе ключа консоли (/console/token), как Developer+. Две политики пишутся в своих собственных консолях, затем привязываются на ключе.

3. Один конкретный ключ минимальных полномочий

Запланированный агент, который суммаризирует тикеты поддержки с одной дешёвой моделью, с одного хоста, нуждается почти в нулевых полномочиях. Полностью усиленный ключ:
ПолеЗначениеПочему
model_limitsодна модель суммаризациине может эскалировать к frontier-модели
allow_ipsegress-CIDR планировщикаутёкший ключ бесполезен в другом месте
credit_limit_usdнедельный потолокзацикленный прогон не может опустошить баланс
expired_timeконец деплояавтоистекает, не может зависнуть
guardrail_idguardrail с маскированием PIIтекст запроса проверяется
firewall_policy_idразрешает только его инструментыникаких неожиданных вызовов инструментов
Если этот агент захвачен, он всё равно может вызвать только одну модель, только из одного диапазона IP, только до своего лимита и только инструменты, которые позволяет его политика firewall. Остальное рабочее пространство нетронуто — и аудиторский след firewall показывает ровно то, на что он был уполномочен.
Ключ без model_limits, без allow_ips, с credit_limit_usd: 0, expired_time: -1 и без привязки политики имеет максимум полномочий. Если он утечёт, держатель получает всё ваше рабочее пространство. Относитесь к этой комбинации как к находке, а не к default’у — см. безлимитные vs ограниченные.

4. Вызов ретрансляции /v1 vs консоль

Чек-лист настраивается в консоли с вашей сессией (пользователь Developer+). Ваш агент никогда не трогает эти маршруты конфигурации — он предъявляет свой ограниченный ключ ретрансляции (sk-orca-…) на вызовах инференса /v1/*, и лимиты и привязанные политики выше применяются на каждом.
# The agent's runtime call — the relay key, scoped by the checklist above.
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{"role": "user", "content": "Summarize this ticket..."}]
  }'
Если model_limits ключа не включает openai/gpt-4o-mini, этот вызов отклоняется, прежде чем покинет шлюз. Если IP вызывающего не в allow_ips, он отклоняется на уровне аутентификации. Код агента остаётся тем же; ключ решает радиус поражения.

5. Шлагбаум 5 — привязанный guardrail

guardrail_id привязывает к ключу именованную упорядоченную политику содержимого в рамках рабочего пространства. Разрешение — это явный guardrail ключа (если он существует и включён), иначе default рабочего пространства, иначе никакой.
Guardrails — это строгий выключатель, когда отключены: отключённый или удалённый guardrail_id означает, что ключ получает никакого guardrail — он не откатывается к default рабочего пространства. Это противоположно плоскости firewall (§6), так что убедитесь, что привязанный guardrail включён, а не просто прикреплён.
Правила guardrail выполняются до модели (входная стадия) и, где поддерживается, на ответе (выходная стадия) с действиями block, mask или flag. Пресет PII Shield, например, маскирует PII в запросе до того, как он вообще достигнет модели. Пишите и прикрепляйте guardrails как Developer+ — см. Guardrails и Привязку политик.

6. Шлагбаум 6 — привязанная политика firewall + область шлюза

firewall_policy_id привязывает политику вызовов инструментов в рамках рабочего пространства. Она управляет действиями, которые совершает агент — рекламируемые инструменты, выданные моделью tool_calls, диспетчи MCP и исходящий egress — против упорядоченного списка правил, чьи вердикты — allow, audit, deny, sanitize, pending_approval или cap_cost.
Плоскость firewall разрешается иначе, чем guardrails: отключённая привязанная политика firewall откатывается к default рабочего пространства, она не выключает применение. Так что привязать политику и отключить её возвращает ключ к default рабочего пространства — он никогда не остаётся тихо без защиты.
Самый быстрый способ задать обе плоскости сразу — это уровень автономии — один переключатель, который атомарно настраивает позицию firewall и guardrail вашего рабочего пространства (tight / balanced / permissive), с отменой в один клик. См. Firewall §8.
is_firewall_gateway — это отдельный вид ключа — выпускается только для маршрутов Firewall MCP и evaluate-hook (/api/v1/firewall/*), никогда для инференса. Обычный ключ получает 403 на этих маршрутах, а ключ шлюза на пути инференса переограничен. Включение флага и чтение открытого текста ключа шлюза требуют Admin+. Один ключ, одно назначение.

7. После чек-листа

Базовый уровень Secure Agents

Рекомендуемая стартовая позиция — один переключатель автономии, затем донастройка из реального трафика.

Привязка политик

Как guardrail_id и firewall_policy_id прикрепляются и разрешаются.

Избыточные полномочия

Угроза, для сдерживания которой создан этот чек-лист.

Утёкший ключ

Что делать в момент, когда ограниченный ключ раскрыт.
Чем уже каждый ключ, тем меньше радиус поражения, если какой-либо один агент скомпрометирован — и тем яснее запись того, на что каждый агент был уполномочен. Прогоняйте чек-лист минимальных полномочий на каждом ключе и продолжайте его прогонять.