Перейти к основному содержанию
Ключ без ограничения источника — это чистая bearer-учётка: кто держит строку, тот может предъявить её откуда угодно. Поле allow_ips превращает ключ в API-ключ с IP-белым списком — он работает только при предъявлении с адреса источника, который вы внесли в список. Утёкший ключ, воспроизведённый с машины злоумышленника, резидентного прокси или скомпрометированного CI-раннера, отклоняется ещё до того, как коснётся модели. Это половина least agency, отвечающая за привязку к источнику (см. least agency): model_limits ограничивает, к каким моделям может дотянуться ключ, а allow_ips ограничивает, откуда ключ может быть предъявлен.

1. Что делает allow_ips

allow_ips содержит список адресов источника или CIDR-диапазонов. На каждом запросе OrcaRouter сравнивает IP источника вызывающего с этим списком:
  • Совпадение → запрос переходит к проверкам лимита моделей, квоты и политики.
  • Нет совпадения → запрос отклоняется на уровне аутентификации с HTTP 403 (access_denied), до любого вызова вышестоящей модели.
  • Пустой список → нет ограничения; ключ принимается с любого адреса.
Проверка — первый шлагбаум, который проходит ключ, наряду с валидностью ключа — она выполняется до guardrails, до firewall, до тарификации. Не указанный в списке источник никогда не достигает ваших политик или вашего баланса.
Пустой allow_ips означает все IP разрешены, а не ни одного. Оставить поле пустым — это неограниченный default. Закрепите ключ, чтобы поле начало что-то делать.

2. Принимаемые форматы

Каждая запись — один IP или CIDR-диапазон. Смешивайте оба свободно; по одной записи на строку.

Одиночный адрес

203.0.113.7 — ровно один хост. Лучше всего для сервера с фиксированным IP или NAT-шлюза со стабильным адресом egress.

CIDR-диапазон

203.0.113.0/24 — целый блок. Лучше всего для облачной подсети, пула VPN или autoscaling-группы за одним egress-CIDR.
Голый IP совпадает с тем одним адресом; CIDR совпадает с каждым адресом в блоке. Разбираются и литералы IPv4, и IPv6.
Закрепляйте за самым узким диапазоном, который всё ещё покрывает каждого легитимного вызывающего. Один хост (/32) теснее, чем /24; /24 теснее, чем «откуда угодно». Каждый сбрасываемый бит расширяет множество мест, где утёкший ключ всё ещё работает.

3. Задайте это в консоли

Задайте allow_ips в редакторе ключа на /console/token. Создание или редактирование ключа требует роли Developer или выше.
  1. Откройте Console → API Keys и создайте или отредактируйте ключ.
  2. В редакторе ключа введите свои доверенные адреса в поле IP allow-list — по одному IP или CIDR на строку.
  3. Сохраните. Ограничение применяется на следующем запросе, который делает ключ — без передеплоя, без изменений в коде агента.
Проверьте реальный адрес источника, который видит шлюз, прежде чем запирать ключ. Если ваш агент сидит за NAT, балансировщиком нагрузки или egress-прокси, адрес, который наблюдает OrcaRouter, — это тот egress-хоп, а не приватный IP агента. Внесите в список адрес egress и протестируйте из развёрнутого окружения, прежде чем отгружать.

4. Один конкретный пример: запланированный агент

Запланированная задача, суммаризирующая тикеты, выполняется только из одной облачной подсети. Закрепите её ключ за этой подсетью, чтобы учётка была бесполезна где-либо ещё.
ПолеЗначениеЭффект
allow_ips203.0.113.0/24только egress-блок планировщика может предъявить этот ключ
model_limitsодна модель суммаризациине может эскалировать к frontier-модели
credit_limit_usdнедельный потолокзацикленный прогон не может опустошить баланс
Сам вызов ретрансляции не меняется — он по-прежнему использует ключ sk-orca-… как bearer-токен:
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..."}]
  }'
Предъявленный изнутри 203.0.113.0/24, вызов проходит. Воспроизведите ровно тот же запрос с любого другого адреса, и шлюз вернёт:
{
  "error": {
    "message": "您的 IP 不在令牌允许访问的列表中 (request id: ...)",
    "type": "orcarouter_api_error",
    "code": "access_denied"
  }
}
Модель никогда не вызывается, квота не тратится, а отклонение логируется.
allow_ips настраивается целиком через редактор ключа в консоли — действие Developer-или-выше на сессии вашего рабочего пространства. Самообслуживания через ключ ретрансляции для него нет: ключ не может расширить собственный список разрешённых источников.

5. Что список разрешённых IP содержит и чего не содержит

API-ключ с IP-белым списком ограничивает, откуда работает ключ — один срез радиуса поражения. Он сочетается с другими полями области, а не заменяет их.
Учётка, эксфильтрированная из логов, git-коммита или взломанного ноутбука, — мёртвый груз, если только злоумышленник не может также источать трафик из вашего внесённого в список диапазона. Это основная работа поля — см. утёкший ключ для полного реагирования на инцидент.
Если компрометация и есть внесённый в список хост — отравленная зависимость, работающая на вашем собственном сервере, — проверка IP источника проходит. Сочетайте allow_ips с model_limits, лимитом расходов и политикой firewall, чтобы компрометация из доверенного источника всё равно была ограничена.
Привязка к IP не делает ключ короткоживущим. Сочетайте её с абсолютным сроком действия и графиком ротации, чтобы ключ и переставал работать из новых мест, и в итоге переставал работать вообще.

6. Операционные заметки

Если у ваших вызывающих нет стабильного адреса источника (serverless с ротирующимся egress, мобильные клиенты, широкие офисные сети) — привязка к IP неверный контроль: вы либо запрёте реальный трафик, либо расширите диапазон до бессмысленности. Опирайтесь на model_limits, лимиты расходов, срок действия и привязки политик вместо этого.
Редактирование allow_ips вступает в силу на следующем запросе — нет задержки распространения, которую нужно пережидать. Когда вы добавляете регион или мигрируете подсеть, сначала обновите ключ, подтвердите, что новый диапазон работает, затем уберите старый.
allow_ips живёт на отдельном ключе, так что у каждого агента может быть своя привязка к источнику. Ключ планировщика может закрепиться за пакетной подсетью, пока интерактивный ключ разрешает более широкий офисный диапазон — оба в одном рабочем пространстве.

7. Дальнейшие шаги

Объект токена

Каждое поле на ключе, включая allow_ips, в одном справочнике.

Лимиты моделей

Ограничьте, к каким моделям может дотянуться ключ — вторая половина привязки источник + область.

Утёкший ключ

Что делать в момент, когда ключ раскрыт.

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

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