170| `password` | Нет | Учётные данные базы данных. Установите здесь, а не в `postgres_url`, чтобы учётные данные оставались вне URL. Принимает любые символы и имеет приоритет над учётными данными URL. |170| `password` | Нет | Учётные данные базы данных. Установите здесь, а не в `postgres_url`, чтобы учётные данные оставались вне URL. Принимает любые символы и имеет приоритет над учётными данными URL. |
171| `max_connections` | Нет | Размер пула соединений Postgres на реплику. По умолчанию `5`, что консервативно и дружелюбно к общим базам данных. С включёнными [лимитами расходов](#admin) горячий путь выполняет несколько операций на запрос вывода, поэтому повысьте его для выделенной базы данных под нагрузкой и держите реплики × это ниже `max_connections` базы данных. |171| `max_connections` | Нет | Размер пула соединений Postgres на реплику. По умолчанию `5`, что консервативно и дружелюбно к общим базам данных. С включёнными [лимитами расходов](#admin) горячий путь выполняет несколько операций на запрос вывода, поэтому повысьте его для выделенной базы данных под нагрузкой и держите реплики × это ниже `max_connections` базы данных. |
172| `connect_timeout_seconds` | Нет | Секунды, которые gateway ждёт, когда открывает соединение Postgres. Целое число от `1` до `60`, по умолчанию `5`. Повысьте, если попытки соединения истекают по времени, когда новый экземпляр gateway запускается. Требует Claude Code v2.1.274 или позже на сервере gateway. Более ранние версии отказываются запускаться, когда ключ установлен. |172| `connect_timeout_seconds` | Нет | Секунды, которые gateway ждёт, когда открывает соединение Postgres. Целое число от `1` до `60`, по умолчанию `5`. Повысьте, если попытки соединения истекают по времени, когда новый экземпляр gateway запускается. Требует Claude Code v2.1.274 или позже на сервере gateway. Более ранние версии отказываются запускаться, когда ключ установлен. |
173| `readiness_grace_seconds` | Нет | Сколько секунд `/readyz` продолжает сообщать о готовности после того, как Postgres перестаёт отвечать. Целое число от `0` до `3600`, по умолчанию `0`. См. [Поведение при сбое](/docs/ru/claude-apps-gateway-deploy#outage-behavior) для того, как выбрать значение. Требует Claude Code v2.1.282 или позже на сервере gateway. Более ранние версии отказываются запускаться, когда ключ установлен. |
173 174
174Для локальной разработки укажите `postgres_url` на одноразовый контейнер Postgres, например `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`.175Для локальной разработки укажите `postgres_url` на одноразовый контейнер Postgres, например `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`.
175 176
187 188
188Несколько upstream одного поставщика должны установить отличный `name:`.189Несколько upstream одного поставщика должны установить отличный `name:`.
189 190
190Клиенты Bedrock, Claude Platform on AWS, Agent Platform и Foundry создаются один раз при запуске, и их SDK обновляют учётные данные внутри, поэтому ротация облачных учётных данных не требует перезагрузки. Статические ключи API Anthropic и носители читаются при запуске; см. [Anthropic API](#anthropic-api).191Клиенты Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform и Microsoft Foundry создаются один раз при запуске, и их SDK обновляют учётные данные внутри, поэтому ротация облачных учётных данных не требует перезагрузки. Статические ключи API Anthropic и носители читаются при запуске; см. [Anthropic API](#anthropic-api).
191 192
192<h4 id="upstream-error-messages">193<h4 id="upstream-error-messages">
193 Сообщения об ошибках upstream194 Сообщения об ошибках upstream
313| Где-либо ещё | Передайте учётные данные через переменные env `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` и `AWS_SESSION_TOKEN`, или установите их явно в `auth:` с расширением `${VAR}` |314| Где-либо ещё | Передайте учётные данные через переменные env `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` и `AWS_SESSION_TOKEN`, или установите их явно в `auth:` с расширением `${VAR}` |
314| Регион | `region:` — это регион конечной точки API. Профили вывода между регионами маршрутизируют по географии (США, ЕС, APAC) независимо от того, какой вы выберете. Для регионов, не входящих в США, или ARN с выделенной пропускной способностью добавьте блок [`models:`](#models) с правильными ID для каждого upstream. |315| Регион | `region:` — это регион конечной точки API. Профили вывода между регионами маршрутизируют по географии (США, ЕС, APAC) независимо от того, какой вы выберете. Для регионов, не входящих в США, или ARN с выделенной пропускной способностью добавьте блок [`models:`](#models) с правильными ID для каждого upstream. |
315 316
317<h5 id="apply-an-amazon-bedrock-guardrail">
318 Применить guardrail Amazon Bedrock
319</h5>
320
321Чтобы применить guardrail Amazon Bedrock к каждому запросу вывода, который gateway отправляет через upstream Bedrock, добавьте блок `guardrail` к этому upstream. Требует Claude Code v2.1.281 или позже на сервере gateway.
322
323```yaml theme={null}
324upstreams:
325 - provider: bedrock
326 region: us-east-1
327 auth: {}
328 guardrail:
329 id: gr-abc123 # ID guardrail или полный ARN
330 version: "1" # номер опубликованной версии или DRAFT
331 # сохраняйте кавычки: голое 1 не удаётся при загрузке
332```
333
334<Warning>
335 Gateway не поддерживает входные теги guardrail. Он не добавляет теги содержимого guard к подсказкам, поэтому фильтр guardrail, который Amazon Bedrock применяет только к помеченному входу, не запускается на трафике через gateway. Для того, какие фильтры зависят от входных тегов, см. [входные теги](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-tagging.html) в документации Amazon Bedrock.
336</Warning>
337
338Также предоставьте `bedrock:ApplyGuardrail` на guardrail основному принципалу, который подписывает запросы этого upstream: основному принципалу AWS gateway, или с [`assume_role`](#bedrock-in-another-aws-account) роли, названной в `role_arn`.
339
340Установите `guardrail` на каждом upstream `bedrock` или ни на одном. Gateway отказывается запускаться на смеси, потому что [переход](#multiple-upstreams) иначе может отправить запрос на upstream Bedrock, который не имеет guardrail.
341
342Guardrail охватывает только upstream Bedrock. Если вы перечислите другого поставщика в `upstreams`, gateway отправляет запросы этому поставщику без guardrail.
343
344Когда запрос `/v1/messages`, чьё тело несёт поле `amazon-bedrock-*`, такое как `amazon-bedrock-guardrailConfig`, достигает upstream Bedrock, который имеет установленный `guardrail`, gateway ответит 400 вместо пересылки его.
345
346<a id="bedrock-in-another-aws-account" />
347
348<h5 id="bedrock-in-another-aws-account">
349 Bedrock в другой учётной записи AWS
350</h5>
351
352Установите `assume_role` на upstream Bedrock и gateway использует собственную идентификацию AWS только для вызова `sts:AssumeRole` на роль, которую вы называете, которая может быть в другой учётной записи AWS от gateway. Каждый запрос Bedrock из этого upstream подписывается с одночасовыми учётными данными, которые STS возвращает, поэтому долгоживущий ключ доступа не пересекает учётные записи.
353
354Требует gateway, работающий Claude Code v2.1.281 или позже. Более ранний gateway отказывается запускаться, когда находит ключ.
355
356```yaml theme={null}
357upstreams:
358 - name: bedrock-isolated
359 provider: bedrock
360 region: us-east-1
361 auth: {} # собственная роль gateway: она только вызывает STS
362 assume_role:
363 role_arn: arn:aws:iam::222222222222:role/claude-gateway-bedrock
364 # external_id: ${BEDROCK_ROLE_EXTERNAL_ID} # когда политика доверия роли требует одного
365```
366
367Блок `assume_role` принимает три ключа:
368
369| Ключ | Значение |
370| - | - |
371| `role_arn` | Роль IAM, которую gateway предполагает, как `arn:aws:iam::` или `arn:aws-us-gov:iam::` ARN. Дайте ей [разрешения Bedrock](#amazon-bedrock), которые нужны этому upstream, `bedrock:CountTokens` включено, плюс `bedrock:ApplyGuardrail` когда upstream устанавливает `guardrail`. |
372| `external_id` | Опционально. Отправляется как внешний ID на каждый вызов `sts:AssumeRole`. Установите его, когда политика доверия роли требует одного, и заключите в кавычки, если это все цифры. |
373| `session_name` | Опционально. `email` или `sub` дают каждому разработчику свой сеанс: см. [Атрибуция затрат на разработчика AWS](#per-developer-aws-cost-attribution). Не установлено, каждый запрос использует один сеанс с именем `claude-apps-gateway`. |
374
375Политика доверия роли называет собственный основной принципал gateway, такой как его IRSA или роль задачи ECS. Этот основной принципал нуждается в `sts:AssumeRole` на роль и никаком разрешении Bedrock самого. Удалите `Condition`, если вы не установите `external_id`.
376
377```json theme={null}
378{
379 "Version": "2012-10-17",
380 "Statement": [{
381 "Effect": "Allow",
382 "Principal": { "AWS": "arn:aws:iam::111111111111:role/claude-gateway" },
383 "Action": "sts:AssumeRole",
384 "Condition": { "StringEquals": { "sts:ExternalId": "your-external-id" } }
385 }]
386}
387```
388
389* Если STS отказывает или недостижим, gateway не отправляет запрос с собственными учётными данными upstream. Он логирует ошибку STS с тем, что проверить, затем пробует следующий upstream, который вы перечислили. [Сообщения об ошибках upstream](#upstream-error-messages) охватывает то, что клиент получает, когда ни один upstream не успевает. Более поздний upstream без `assume_role` будет служить запросу с собственными учётными данными, поэтому перечислите один только если это то, что вы хотите.
390* Gateway вызывает региональную конечную точку STS `sts.<region>.amazonaws.com`, которую его сеть должна достичь. Для конечной точки FIPS установите `AWS_USE_FIPS_ENDPOINT=true` в окружении gateway, а не `use_fips_endpoint` в файле конфигурации AWS.
391* `assume_role` применяется к `provider: bedrock` только и нуждается в учётных данных источника SigV4: gateway отказывается запускаться, когда это установлено рядом с `aws_bearer_token`.
392* Каждый разработчик, которого gateway допускает, может использовать этот upstream; [`managed`](#managed) управляет тем, какие разработчики могут использовать какие модели. Чтобы держать модель, служащую через роль, от также служения из другой учётной записи, дайте ей пользовательский id, чья карта `upstream_model` имеет только имя этого upstream. Для такого id gateway пропускает каждый другой upstream, поэтому ни запрос, ни подсчёт токенов для отказанного запроса не могут переходить на другую учётную запись. Встроенные имена моделей всё ещё пробуются на каждом upstream по порядку, этот включен, и запрос, который достигает его, подписывается с той же ролью, поэтому перечислите этот upstream в последнюю очередь, если его учётная запись должна также служить им.
393
394Этот пример дает одной модели пользовательский id, который только изолированный upstream служит:
395
396```yaml theme={null}
397models:
398 - id: claude-opus-restricted # пользовательский id, не встроенное имя модели
399 upstream_model:
400 bedrock-isolated: us.anthropic.claude-opus-4-8 # единственный upstream, который служит ему
401```
402
403<a id="per-developer-aws-cost-attribution" />
404
405<h5 id="per-developer-aws-cost-attribution">
406 Атрибуция затрат на разработчика AWS
407</h5>
408
409По умолчанию gateway подписывает каждый запрос Bedrock с одними учётными данными, поэтому AWS видит запросы всех разработчиков под одним основным принципалом IAM. Добавьте `session_name: email` к [`assume_role`](#bedrock-in-another-aws-account) и gateway вызывает `sts:AssumeRole` один раз на разработчика в час, с именем сеанса, установленным на электронную почту этого разработчика, и подписывает их запросы с возвращёнными учётными данными, поэтому запросы каждого разработчика достигают AWS под их собственным сеансом предполагаемой роли. Роль может быть в собственной учётной записи gateway.
410
411Требует gateway, работающий Claude Code v2.1.281 или позже. [Атрибуция затрат на AWS](/docs/ru/claude-apps-gateway-on-aws#cost-attribution) охватывает роль IAM и где AWS billing показывает сеансы.
412
413```yaml theme={null}
414upstreams:
415 - provider: bedrock
416 region: us-east-1
417 auth: {} # собственная роль gateway: она только вызывает STS
418 assume_role:
419 role_arn: arn:aws:iam::123456789012:role/claude-gateway-bedrock-user
420 session_name: email # или sub
421```
422
423`session_name` выбирает, какое проверенное утверждение становится AWS `RoleSessionName`: `email` или `sub`. Gateway пишет любой символ, отличный от букв ASCII, цифр и `_+,.@-`, как `=XX` hex на UTF-8 байт, и сокращает результат длиннее 64 символов до префикса плюс хеш, поэтому имя сеанса каждого разработчика остаётся действительным и уникальным. Запрос от разработчика, чей токен не несёт утверждение, не отправляется через этот upstream, и журнал оператора говорит переключиться на `sub` или установить [`oidc.email_claim`](#oidc).
424
425Активный разработчик стоит один вызов STS в час на реплику gateway, и одновременные первые запросы делят один вызов.
426
427Gateway также делает один вызов своего собственного на этой роли: подсчёт токенов для запроса, который клиент отказал, поэтому [лимиты расходов](/docs/ru/claude-apps-gateway-spend-limits) остаются точными. Этот подсчёт и его [одноразовый резервный запрос](#amazon-bedrock) подписаны общим сеансом `claude-apps-gateway`, поэтому AWS атрибутирует резервный к `claude-apps-gateway`, а не к разработчику.
428
429Для строгой атрибуции на разработчика установите `assume_role` с `session_name` на каждом upstream Bedrock, который вы перечислите. Upstream без него подписывает запросы, которые он служит, с собственными учётными данными.
430
316<h4 id="claude-platform-on-aws">431<h4 id="claude-platform-on-aws">
317 Claude Platform on AWS432 Claude Platform on AWS
318</h4>433</h4>
512| Рычаг | Как |627| Рычаг | Как |
513| - | - |628| - | - |
514| Разные регионы | Один upstream Bedrock на регион, каждый со своим `region:`. С [`auto_include_builtin_models: true`](#models) профили вывода между регионами маршрутизируют автоматически; для развёртываний, закреплённых на регион, используйте блок `models:`. |629| Разные регионы | Один upstream Bedrock на регион, каждый со своим `region:`. С [`auto_include_builtin_models: true`](#models) профили вывода между регионами маршрутизируют автоматически; для развёртываний, закреплённых на регион, используйте блок `models:`. |
515| Разные учётные записи | Один upstream Bedrock на учётную запись, каждый со своими учётными данными в `auth:`. Цепочка по умолчанию (`auth: {}`) использует идентификатор пода; для второй учётной записи установите явные учётные данные или токен-носитель. |630| Разные учётные записи | Один upstream Bedrock на учётную запись. Цепочка по умолчанию (`auth: {}`) использует идентификатор пода; для второй учётной записи добавьте [`assume_role`](#bedrock-in-another-aws-account) для достижения её с короткоживущими учётными данными, или установите явные учётные данные или токен-носитель в `auth:`. |
516| Выделенная пропускная способность | Сопоставьте модель с ARN выделенной пропускной способности в `models:` для имени этого upstream. Другие upstream сохраняют ID по требованию, поэтому пропускная способность PT исчерпывается перед переходом. |631| Выделенная пропускная способность | Сопоставьте модель с ARN выделенной пропускной способности в `models:` для имени этого upstream. Другие upstream сохраняют ID по требованию, поэтому пропускная способность PT исчерпывается перед переходом. |
517| Конечные точки VPC / FIPS | Установите `base_url:` на upstream на URL вашей конечной точки VPC или FIPS |632| Конечные точки VPC / FIPS | Установите `base_url:` на upstream на URL вашей конечной точки VPC или FIPS |
518| Маршрутизация, ограниченная моделью | Только пользовательская модель `id`, которая не является встроенной моделью Claude, пропускает upstream, отсутствующие из её карты `upstream_model:`. Gateway пробует встроенные модели на каждом upstream по порядку и использует ID по умолчанию поставщика, где карта не имеет записи, поэтому для встроенных моделей карта изменяет, какой ID получает upstream, а не пробуется ли он; upstream, который отклоняет ID, следует тем же [правилам переходов](#upstreams), что и любая другая ошибка upstream. |633| Маршрутизация, ограниченная моделью | Только пользовательская модель `id`, которая не является встроенной моделью Claude, пропускает upstream, отсутствующие из её карты `upstream_model:`. Gateway пробует встроенные модели на каждом upstream по порядку и использует ID по умолчанию поставщика, где карта не имеет записи, поэтому для встроенных моделей карта изменяет, какой ID получает upstream, а не пробуется ли он; upstream, который отклоняет ID, следует тем же [правилам переходов](#upstreams), что и любая другая ошибка upstream. |
522CLI применяет одинаковое управление функциями к gateway независимо от того, какой upstream служит данному запросу, поэтому переход не отправляет поле тела, которое upstream отклонил бы.637CLI применяет одинаковое управление функциями к gateway независимо от того, какой upstream служит данному запросу, поэтому переход не отправляет поле тела, которое upstream отклонил бы.
523 638
524<h2 id="optional-sections">639<h2 id="optional-sections">
525 Опциональные разделы640 Дополнительные разделы
526</h2>641</h2>
527 642
528<h3 id="admin">643<h3 id="admin">
529 `admin`644 `admin`
530</h3>645</h3>
531 646
532Опциональный. Включает `/v1/organizations/spend_limits`, который отражает публичный Admin API Anthropic, и применение расходов для каждого разработчика на `/v1/messages`. См. [Лимиты расходов](/docs/ru/claude-apps-gateway-spend-limits) для того, как устанавливаются и применяются ограничения; этот раздел охватывает ключи `gateway.yaml`, которые включают функцию и настраивают её.647Опционально. Включает `/v1/organizations/spend_limits`, который отражает публичный Admin API Anthropic, и принудительное ограничение расходов на разработчика на `/v1/messages`. Смотрите [Spend limits](/docs/ru/claude-apps-gateway-spend-limits), чтобы узнать, как устанавливаются и применяются ограничения; этот раздел охватывает ключи `gateway.yaml`, которые включают функцию и настраивают её.
533 648
534```yaml theme={null}649```yaml theme={null}
535admin:650admin:
536 # Именованные статические ключи API для конечных точек администратора, отправляемые как x-api-key.651 # Именованные статические API ключи для конечных точек администратора, отправляемые как x-api-key.
537 # ID появляется в журнале аудита как admin-key:<id>, поэтому каждый ключ652 # Идентификатор появляется в журнале аудита как admin-key:<id>, поэтому каждый ключ
538 # атрибутируется. Массив для ротации: добавьте новый ключ, перекатите клиентов,653 # можно отследить. Массив для ротации: добавьте новый ключ, обновите клиентов,
539 # удалите старый.654 # удалите старый.
540 write_keys:655 write_keys:
541 - { id: terraform, key: "${GATEWAY_ADMIN_WRITE_KEY_TF}" }656 - { id: terraform, key: "${GATEWAY_ADMIN_WRITE_KEY_TF}" }
542 - { id: ci, key: "${GATEWAY_ADMIN_WRITE_KEY_CI}" }657 - { id: ci, key: "${GATEWAY_ADMIN_WRITE_KEY_CI}" }
543 read_keys:658 read_keys:
544 - { id: reporting, key: "${GATEWAY_ADMIN_READ_KEY}" }659 - { id: reporting, key: "${GATEWAY_ADMIN_READ_KEY}" }
545 # Группы IdP, предоставленные полному администратору через обычный JWT gateway (без ключа API).660 # Группы IdP с полным доступом администратора через обычный JWT шлюза (без API ключа).
546 admin_groups: [platform-finops]661 admin_groups: [platform-finops]
547 blocked_message: request an increase at https://go.example.com/claude-limits662 blocked_message: request an increase at https://go.example.com/claude-limits
548```663```
549 664
550| Поле | Обязательно | Описание |665| Поле | Обязательно | Описание |
551| - | - | - |666| - | - | - |
552| `write_keys` | Нет | Массив `{id, key}`. `x-api-key`, соответствующий одному из них, может перечислять, устанавливать и удалять лимиты расходов. Значения ключей должны быть не менее 32 символов; `id` должны быть уникальны в `read_keys` и `write_keys`. |667| `write_keys` | Нет | Массив `{id, key}`. `x-api-key`, соответствующий одному из них, может перечислять, устанавливать и удалять ограничения расходов. Значения ключей должны быть не менее 32 символов; `id` должны быть уникальны в `read_keys` и `write_keys`. |
553| `read_keys` | Нет | Массив `{id, key}`. Только для чтения: каждая конечная точка `GET`, включая перечисление ограничений, получение одного по ID и чтение [`/effective`](/docs/ru/claude-apps-gateway-spend-limits#%2Feffective) и [`/audit`](/docs/ru/claude-apps-gateway-spend-limits#%2Faudit). |668| `read_keys` | Нет | Массив `{id, key}`. Только для чтения: каждая конечная точка `GET`, включая перечисление ограничений, получение одного по ID и чтение [`/effective`](/docs/ru/claude-apps-gateway-spend-limits#%2Feffective) и [`/audit`](/docs/ru/claude-apps-gateway-spend-limits#%2Faudit). |
554| `admin_groups` | Нет | Имена групп IdP. JWT gateway, чьё утверждение `groups` включает одну из них, имеет полный доступ администратора, чтение и запись, и аудиты как `oidc:<sub>`. Используйте это для человеческих администраторов; используйте ключи API для машин. Пустая запись в этом списке останавливает gateway при загрузке. См. [Значения matcher, которые останавливают gateway при загрузке](#matcher-values-that-stop-the-gateway-at-boot). |669| `admin_groups` | Нет | Имена групп IdP. JWT шлюза, чей claim `groups` включает одну из них, имеет полный доступ администратора, чтение и запись, и аудит как `oidc:<sub>`. Используйте это для администраторов-людей; используйте API ключи для машин. Пустая запись в этом списке останавливает шлюз при загрузке. Смотрите [Значения сопоставления, которые останавливают шлюз при загрузке](#matcher-values-that-stop-the-gateway-at-boot). |
555| `blocked_message` | Нет | Добавлено дословно к `429 billing_error`, который видит заблокированный разработчик. Напишите всю инструкцию, такую как URL или канал Slack. Если не установлено, gateway отправляет только сообщение по умолчанию. См. [Как работает применение](/docs/ru/claude-apps-gateway-spend-limits#how-enforcement-works). |670| `blocked_message` | Нет | Добавляется дословно к `429 billing_error`, который видит заблокированный разработчик. Напишите полную инструкцию, такую как URL или канал Slack. Если не установлено, шлюз отправляет только сообщение по умолчанию. Смотрите [Как работает принудительное ограничение](/docs/ru/claude-apps-gateway-spend-limits#how-enforcement-works). |
556| `audit_retention_days` | Нет | По умолчанию `365`. Старые строки `admin_audit` удаляются. |671| `audit_retention_days` | Нет | По умолчанию `365`. Более старые строки `admin_audit` удаляются. |
557| `spend_retention_months` | Нет | По умолчанию `13`. Строки счётчика `spend` старше этого удаляются. По умолчанию сохраняется полный год плюс текущий частичный месяц для отчётности год к году. |672| `spend_retention_months` | Нет | По умолчанию `13`. Строки счётчика `spend` старше этого удаляются. По умолчанию сохраняется полный год плюс текущий неполный месяц для отчётности год к году. |
558| `identity_retention_days` | Нет | По умолчанию `90`. TTL последнего просмотра для строк `principal_emails`, которые содержат электронную почту каждого разработчика, отображаемое имя и группы (PII). Намеренно короче, чем сохранение расходов, поэтому отозванная идентификация стареет, пока её анонимные счётчики расходов остаются. |673| `identity_retention_days` | Нет | По умолчанию `90`. TTL последнего просмотра для строк `principal_emails`, которые содержат электронную почту каждого разработчика, отображаемое имя и группы (PII). Намеренно короче, чем сохранение расходов, поэтому отозванная идентичность устаревает, пока её анонимные счётчики расходов остаются. |
559| `group_limit_mode` | Нет | `min` (по умолчанию) или `max`. Когда разработчик находится в нескольких группах с ограничениями, `min` применяет наиболее ограничивающее и `max` наименее. Используется как применением, так и `/effective`. |674| `group_limit_mode` | Нет | `min` (по умолчанию) или `max`. Когда разработчик находится в нескольких группах с ограничениями, `min` применяет наиболее ограничивающее, а `max` — наименее ограничивающее. Используется как при принудительном ограничении, так и при `/effective`. |
560 675
561<h3 id="enforcement">676<h3 id="enforcement">
562 `enforcement`677 `enforcement`
563</h3>678</h3>
564 679
565Блок `enforcement` управляет тем, как проверки лимитов расходов ведут себя, когда хранилище недоступно.680Блок `enforcement` контролирует поведение проверок ограничения расходов, когда хранилище недоступно.
566 681
567| Поле | Обязательно | Описание |682| Поле | Обязательно | Описание |
568| - | - | - |683| - | - | - |
569| `fail_closed_on_error` | Нет | По умолчанию `false`. При сбое Postgres применение лимитов расходов пропускает запросы (fail-open), поэтому вывод продолжает работать. Установите `true`, чтобы вместо этого блокировать их (fail-closed): разработчики, превысившие лимит, блокируются, но так же и все остальные, если хранилище недоступно. Требует блока [`admin:`](#admin): применение расходов работает только, когда `admin` настроен, и gateway отказывается запускаться, если вы установите это `true` без него. |684| `fail_closed_on_error` | Нет | По умолчанию `false`. Принудительное ограничение расходов открывается при сбое Postgres, поэтому вывод остаётся доступным. Установите `true`, чтобы закрыться: разработчики, превысившие лимит, блокируются, но также блокируется всё остальное, если хранилище недоступно. Требует блока [`admin:`](#admin): принудительное ограничение расходов работает только при настройке `admin`, и шлюз отказывается запускаться, если вы установите это `true` без него. |
570 685
571<h3 id="pricing">686<h3 id="pricing">
572 `pricing`687 `pricing`
574 689
575Блок `pricing` сообщает счётчику расходов, что нужно взимать вместо цены USD по прайс-листу, поэтому ограничения и [`/effective`](/docs/ru/claude-apps-gateway-spend-limits#%2Feffective) отражают ваши договорные ставки. Суммы остаются в USD и остаются оценкой, а не счётом. Два предварительных условия:690Блок `pricing` сообщает счётчику расходов, что нужно взимать вместо цены USD по прайс-листу, поэтому ограничения и [`/effective`](/docs/ru/claude-apps-gateway-spend-limits#%2Feffective) отражают ваши договорные ставки. Суммы остаются в USD и остаются оценкой, а не счётом. Два предварительных условия:
576 691
577* Claude Code v2.1.227 или позже на сервере gateway. Более ранние версии отклоняют неизвестный ключ при загрузке.692* Claude Code v2.1.227 или позже на сервере шлюза. Более ранние версии отклоняют неизвестный ключ при загрузке.
578* Блок [`admin:`](#admin) или, в v2.1.268 или позже, блок [`managed:`](#managed) с по крайней мере одной политикой. Gateway отказывается запускаться с установленным `pricing` и без одного из этих блоков, потому что ничто не будет его читать.693* Блок [`admin:`](#admin) или, в v2.1.268 или позже, блок [`managed:`](#managed) с хотя бы одной политикой. Шлюз отказывается запускаться с установленным `pricing` и без одного из этих блоков, потому что ничто не будет его читать.
579 694
580```yaml theme={null}695```yaml theme={null}
581pricing:696pricing:
591 706
592| Поле | Обязательно | Описание |707| Поле | Обязательно | Описание |
593| - | - | - |708| - | - | - |
594| `multiplier` | Нет | По умолчанию `1`. Счётчик умножает каждую измеренную сумму на это, будь то по прайс-листу или переопределённая, поэтому `0.85` выставляет счёт на 85% цены. Должно быть больше 0 и не более 10, и значение выше 1 — это [повышение цены](#mark-prices-up). |709| `multiplier` | Нет | По умолчанию `1`. Счётчик умножает каждую измеренную сумму на это значение, независимо от того, указана ли цена по прайс-листу или переопределена, поэтому `0.85` выставляет счёт на 85% цены. Должно быть больше 0 и не более 10, и значение выше 1 — это [надбавка](#mark-prices-up). |
595| `overrides` | Нет | Строки `{upstream, model, input, output, cache_read, cache_write}` в USD за миллион токенов. Все четыре ставки обязательны. Каждая должна быть больше 0 и не более 10000. |710| `overrides` | Нет | Строки `{upstream, model, input, output, cache_read, cache_write}` в USD за миллион токенов. Все четыре ставки обязательны. Каждая должна быть больше 0 и не более 10000. |
596 711
597Как счётчик соответствует строке переопределения:712Как счётчик сопоставляет строку переопределения:
598 713
599* Строка заменяет цену по прайс-листу для запросов, которые `upstream`, [`upstreams[].name`](#upstreams), обслуживает для `model`. Это включает более высокую ставку [быстрого режима](/docs/ru/fast-mode#understand-the-cost-tradeoff), поэтому запросы быстрого и стандартного режимов измеряются по одним и тем же четырём ставкам.714* Строка заменяет цену по прайс-листу для запросов, которые `upstream`, [`upstreams[].name`](#upstreams), обслуживает для `model`. Это включает более высокую ставку [быстрого режима](/docs/ru/fast-mode#understand-the-cost-tradeoff), поэтому запросы быстрого и стандартного режимов измеряются с одинаковыми четырьмя ставками.
600* Встроенный ID, такой как `claude-sonnet-4-6`, соответствующий [`models[].id`](#models), охватывает каждую датированную форму, региональную форму Amazon Bedrock или форму Google Cloud Agent Platform, которую счётчик оценивает как эту модель. Любая другая строка, такая как псевдоним или ARN профиля вывода, соответствует ID, который отправил клиент, или строке, отправленной upstream, без учёта регистра.715* Встроенный ID, такой как `claude-sonnet-4-6`, сопоставляемый как [`models[].id`](#models), охватывает каждую датированную форму, региональную форму Amazon Bedrock или форму Google Cloud's Agent Platform, которую счётчик оценивает как эту модель. Любая другая строка, такая как псевдоним или ARN профиля вывода, сопоставляется с ID, который отправил клиент, или строкой, отправленной вверх по потоку, без учёта регистра.
601* Где строки перекрываются, счётчик выбирает наиболее специфичную строку, а не первую строку: строку, чей `model` — это точная строка модели, отправленная upstream, затем строку, соответствующую точному ID, который отправил клиент, затем строку, называющую встроенную модель.716* Где строки перекрываются, счётчик выбирает наиболее специфичную строку, а не первую: строку, чей `model` — это точная строка модели, отправленная вверх по потоку, затем строку, соответствующую точному ID, отправленному клиентом, затем строку, называющую встроенную модель.
602* Неизвестное имя upstream приводит к сбою при загрузке, как и две строки для одного upstream, которые называют одну и ту же модель, включая два написания одной встроенной модели. Gateway предупреждает при загрузке о строке, которую ни одна запрашиваемая модель не может использовать.717* Неизвестное имя upstream вызывает сбой при загрузке, как и две строки для одного upstream, которые называют одну и ту же модель, включая два написания одной встроенной модели. Шлюз предупреждает при загрузке о строке, которую не может использовать ни одна запрашиваемая модель.
603* Запросы веб-поиска остаются по цене \$0.01 по прайс-листу; множитель всё ещё применяется к ним.718* Запросы веб-поиска остаются на цене по прайс-листу \$0.01; множитель всё ещё применяется к ним.
604 719
605Для ставок по регионам дайте каждому региону свой именованный upstream и одну строку на upstream.720Для ставок по регионам дайте каждому региону свой именованный upstream и одну строку на upstream.
606 721
607<h4 id="mark-prices-up">722<h4 id="mark-prices-up">
608 Повышение цены723 Надбавка к ценам
609</h4>724</h4>
610 725
611С v2.1.271 или позже на сервере gateway вы можете установить `multiplier` выше 1, до 10, чтобы взимать больше, чем взимает поставщик, например внутреннюю ставку возмещения расходов. Этот пример взимает каждый запрос на 120% цены:726С v2.1.271 или позже на сервере шлюза вы можете установить `multiplier` выше 1, до 10, чтобы взимать больше, чем взимает поставщик, например внутреннюю ставку возмещения. Этот пример взимает каждый запрос на 120% цены:
612 727
613```yaml theme={null}728```yaml theme={null}
614pricing:729pricing:
615 multiplier: 1.2730 multiplier: 1.2
616```731```
617 732
618С блоком [`admin:`](#admin) повышение также применяется к лимитам расходов. Счётчик считает 120% цены, поэтому разработчики достигают своих ограничений быстрее. Gateway регистрирует предупреждение при загрузке, которое говорит об этом.733С блоком [`admin:`](#admin) надбавка также применяется к ограничениям расходов. Счётчик считает 120% цены, поэтому разработчики достигают своих ограничений быстрее. Шлюз регистрирует предупреждение при загрузке, которое это говорит.
619 734
620Множитель не изменяет то, что взимает поставщик upstream за запросы.735Множитель не изменяет то, что взимает поставщик upstream за запросы.
621 736
622Если gateway также [отправляет ставки подписанным клиентам](#send-the-rates-to-signed-in-clients), разработчикам нужен Claude Code v2.1.271 или позже, чтобы видеть повышение. Более ранние клиенты игнорируют `multiplier` выше 1 и показывают затраты без него.737Если шлюз также [отправляет ставки подписанным клиентам](#send-the-rates-to-signed-in-clients), разработчикам нужен Claude Code v2.1.271 или позже, чтобы увидеть надбавку. Более ранние клиенты игнорируют `multiplier` выше 1 и показывают затраты без него.
623 738
624Сервер gateway ранее v2.1.271 отказывается запускаться, если вы установите `multiplier` выше 1.739Сервер шлюза ранее v2.1.271 отказывается запускаться, если вы установите `multiplier` выше 1.
625 740
626<h4 id="send-the-rates-to-signed-in-clients">741<h4 id="send-the-rates-to-signed-in-clients">
627 Отправка ставок подписанным клиентам742 Отправка ставок подписанным клиентам
628</h4>743</h4>
629 744
630С v2.1.268 или позже на сервере gateway, gateway также помещает ставки из `pricing` в политики [`managed`](#managed), которые он обслуживает, как управляемый параметр [`modelPricing`](/docs/ru/settings-reference#modelpricing). Разработчики, соответствующие политике, затем видят ставки `pricing` для первого upstream, который обслуживает каждый ID модели в `/usage`, строке состояния и OpenTelemetry. Разработчик, который не соответствует ни одной политике, не получает управляемые параметры, поэтому его цифры остаются по цене по прайс-листу. Клиенты применяют параметр в Claude Code v2.1.242 или позже.745С v2.1.268 или позже на сервере шлюза шлюз также помещает ставки из `pricing` в политики [`managed`](#managed), которые он обслуживает, как управляемую настройку [`modelPricing`](/docs/ru/settings-reference#modelpricing). Разработчики, соответствующие политике, затем видят ставки `pricing` для первого upstream, который обслуживает каждый ID модели в `/usage`, строке состояния и OpenTelemetry. Разработчик, который не соответствует ни одной политике, не получает управляемые настройки, поэтому его цифры остаются по цене по прайс-листу. Клиенты применяют настройку в Claude Code v2.1.242 или позже.
631 746
632* Что добавляет gateway: если блок `cli` политики уже не устанавливает `modelPricing`, gateway добавляет `multiplier` и, для каждого ID модели, который клиент может запросить, строку переопределения первого upstream, который обслуживает этот ID. Ставка, которую только failover upstream взимает, остаётся на gateway.747* Что добавляет шлюз: если блок `cli` политики уже не устанавливает `modelPricing`, шлюз добавляет `multiplier` и, для каждого ID модели, который может запросить клиент, строку переопределения первого upstream, который обслуживает этот ID. Ставка, которую взимает только failover upstream, остаётся на шлюзе.
633* Исключить одну политику: установите `modelPricing` на `{}` в блоке `cli` этой политики, и её разработчики остаются по цене по прайс-листу.748* Исключить одну политику: установите `modelPricing` на `{}` в блоке `cli` этой политики, и её разработчики остаются по цене по прайс-листу.
634* Сохранить собственные ставки политики: политика, чей блок `cli` устанавливает `modelPricing` со своим собственным `multiplier` или `overrides`, сохраняет этот `modelPricing` целиком, и gateway не добавляет свои ставки к нему.749* Сохранить собственные ставки политики: политика, чей блок `cli` устанавливает `modelPricing` с собственным `multiplier` или `overrides`, сохраняет этот `modelPricing` целиком, и шлюз не добавляет к нему свои ставки.
635 750
636<h3 id="models">751<h3 id="models">
637 `models`752 `models`
638</h3>753</h3>
639 754
640Блок `models` — это опциональный кураторский список моделей администратором, обслуживаемый в `/v1/models` и используемый для перевода ID моделей для каждого upstream. Требуется для регионов Bedrock, не входящих в США, ARN выделенной пропускной способности Amazon Bedrock и имён развёртываний Microsoft Foundry.755Блок `models` — это опциональный список моделей, курируемый администратором, обслуживаемый в `/v1/models` и используемый для перевода ID моделей на upstream. Это требуется для регионов Amazon Bedrock, не входящих в США, ARN с выделенной пропускной способностью Amazon Bedrock и имён развёртывания Microsoft Foundry.
641 756
642```yaml theme={null}757```yaml theme={null}
643auto_include_builtin_models: true # false: выставляйте только список ниже758auto_include_builtin_models: true # false: expose only the list below
644models:759models:
645 - id: claude-opus-4-8760 - id: claude-opus-4-8
646 label: Claude Opus 4.8761 label: Claude Opus 4.8
647 # description: опциональный текст, показываемый в клиентах, которые его выставляют762 # description: optional text shown in clients that surface it
648 upstream_model:763 upstream_model:
649 anthropic: claude-opus-4-8764 anthropic: claude-opus-4-8
650 bedrock: us.anthropic.claude-opus-4-8 # или ARN профиля вывода765 bedrock: us.anthropic.claude-opus-4-8 # or an inference-profile ARN
651 foundry: your-opus-deployment-name766 foundry: your-opus-deployment-name
652```767```
653 768
654Каждый ключ под `upstream_model` должен соответствовать `name` настроенного upstream, который по умолчанию является именем поставщика. Ключ, который не соответствует ни одному upstream, приводит к сбою при загрузке, поэтому опустите строки для поставщиков, которых вы не используете.769Каждый ключ под `upstream_model` должен соответствовать `name` настроенного upstream, который по умолчанию является именем поставщика. Ключ, который не соответствует ни одному upstream, вызывает сбой при загрузке, поэтому опустите строки для поставщиков, которых вы не используете.
655 770
656<h3 id="managed">771<h3 id="managed">
657 `managed`772 `managed`
658</h3>773</h3>
659 774
660Блок `managed` определяет политики доступа на основе ролей, ключённые на группы IdP или домен электронной почты. Политики оцениваются по порядку; первое совпадение выбирается, затем объединяется на базу `match: {}` catch-all. Они обслуживаются для каждого пользователя в `GET /managed/settings` с кешированием ETag/304.775Блок `managed` определяет политики доступа на основе ролей, ключевые по группам IdP или домену электронной почты. Политики оцениваются по порядку; выбирается первое совпадение, затем объединяется с базовым `match: {}` catch-all. Они обслуживаются для каждого пользователя в `GET /managed/settings` с кешированием ETag/304.
661 776
662```yaml theme={null}777```yaml theme={null}
663managed:778managed:
664 policies:779 policies:
665 # Конкретные группы в первую очередь.780 # Specific groups first.
666 - match: { groups: [eng-contractors] }781 - match: { groups: [eng-contractors] }
667 cli:782 cli:
668 availableModels: [claude-sonnet-4-6]783 availableModels: [claude-sonnet-4-6]
669 permissions: { deny: ["WebFetch", "WebSearch"] }784 permissions: { deny: ["WebFetch", "WebSearch"] }
670 # Catch-all по умолчанию в последнюю очередь: соответствует каждому аутентифицированному пользователю.785 # Default catch-all last: matches everyone who authenticated.
671 - match: {}786 - match: {}
672 cli:787 cli:
673 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]788 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]
674```789```
675 790
676Catch-all `match: {}`, обычно указываемый в последнюю очередь, рассматривается как базовый слой. Каждая другая политика наследует любой ключ, который она не устанавливает, из catch-all, поэтому записи для каждой роли должны только перечислять то, что отличается от организационного значения по умолчанию. Правила слияния зависят от типа ключа:791Catch-all `match: {}`, обычно указываемый последним, рассматривается как базовый слой. Каждая другая политика наследует любой ключ, который она не устанавливает, из catch-all, поэтому записи для каждой роли должны только перечислять то, что отличается от организационного значения по умолчанию. Правила объединения зависят от типа ключа:
677 792
678* **Списки разрешений**: `availableModels` и `permissions.allow`. Список конкретной политики полностью заменяет базовый.793* **Списки разрешений**: `availableModels` и `permissions.allow`. Список конкретной политики полностью заменяет базовый.
679* **Списки запретов и массивы hooks**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces` и каждый массив типа события `hooks`. Они берут объединение базового и политики, поэтому организационный запрет или hook аудита не может быть случайно удалён переопределением для каждой роли.794* **Списки запретов и массивы hooks**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces` и каждый массив типа события `hooks`. Они берут объединение базового и политики, поэтому организационный запрет или hook аудита не может быть случайно удалён переопределением для каждой роли.
680* **Ключи типа Record**: `env`, `modelOverrides` и `skillOverrides`. Эти поверхностные слияния, поэтому блок `env` для каждой роли переопределяет ключи, которые он устанавливает, и наследует остальное из базового.795* **Ключи типа Record**: `env`, `modelOverrides` и `skillOverrides`. Они выполняют поверхностное объединение, поэтому блок `env` для каждой роли переопределяет ключи, которые он устанавливает, и наследует остальное из базового.
681 796
682`availableModels` также применяется на стороне сервера в `/v1/messages`, поэтому запрещённая модель возвращает `400` независимо от того, что отправляет клиент.797`availableModels` также применяется на стороне сервера в `/v1/messages`, поэтому запрещённая модель возвращает `400` независимо от того, что отправляет клиент.
683 798
684Gateway проверяет значение `model` перед тем, как передать запрос, поэтому неправильное значение никогда не достигает upstream. Он отклоняет запрос с `400` в двух случаях:799Шлюз проверяет само значение `model` перед тем, как передать запрос upstream, поэтому неправильное значение никогда не достигает upstream. Он отклоняет запрос с `400` в двух случаях:
685 800
686* Когда значение отсутствует или пусто, gateway отклоняет запрос с сообщением `model is required`. Эта проверка требует gateway, работающего на Claude Code v2.1.228 или позже.801* Когда значение отсутствует или пусто, шлюз отклоняет запрос с сообщением `model is required`. Эта проверка требует шлюза, работающего на Claude Code v2.1.228 или позже.
687* Когда значение присутствует, но не является строкой, gateway отклоняет запрос с сообщением `model must be a string`. Требует gateway, работающего на Claude Code v2.1.221 или позже.802* Когда значение присутствует, но не является строкой, шлюз отклоняет запрос с сообщением `model must be a string`. Требует шлюза, работающего на Claude Code v2.1.221 или позже.
688 803
689| Matcher | Поведение |804| Сопоставление | Поведение |
690| - | - |805| - | - |
691| `match: {}` | Соответствует каждому аутентифицированному пользователю. Начните с одного из них и добавьте политики, ограниченные группой, выше позже. |806| `match: {}` | Соответствует каждому аутентифицированному пользователю. Начните с одного из них и добавьте политики для каждой группы выше позже. |
692| `match: { groups: [a, b] }` | Соответствует, если утверждение `groups` JWT содержит любую из перечисленных групп. Чувствительно к регистру: группы должны соответствовать точному регистру IdP. |807| `match: { groups: [a, b] }` | Соответствует, если claim `groups` JWT содержит любую из перечисленных групп. С учётом регистра: группы должны соответствовать точному регистру IdP. |
693| `match: { email_domain: example.com }` | Соответствует части после последнего `@` в утверждении `email` JWT, без учёта регистра. Принимает один домен на политику. |808| `match: { email_domain: example.com }` | Соответствует части после последнего `@` в claim `email` JWT, без учёта регистра. Принимает один домен на политику. |
694| `match: { groups: [a], email_domain: example.com }` | Оба условия должны соответствовать |809| `match: { groups: [a], email_domain: example.com }` | Оба условия должны совпадать |
695 810
696Аутентифицированный пользователь, который не соответствует ни одной политике, получает значения по умолчанию gateway, что означает каждую модель в каталоге и никаких управляемых параметров. Добавьте catch-all `match: {}` в последнюю очередь, если вы хотите гарантированную политику по умолчанию.811Аутентифицированный пользователь, который не соответствует ни одной политике, получает значения по умолчанию шлюза, что означает каждую модель в каталоге и никаких управляемых настроек. Добавьте catch-all `match: {}` последним, если вы хотите гарантированную политику по умолчанию.
697 812
698<Note>813<Note>
699 Gateway не ведёт собственный каталог пользователей. Он авторизует каждый запрос из токена IdP пользователя, читая членство в группе из утверждения `groups` токена и оценивая политики против него. Нет реестра для перечисления и нет учётных записей для предварительного создания, и поэтому нет конечной точки SCIM, потому что нечего синхронизировать в SCIM.814 Шлюз не ведёт собственный каталог пользователей. Он авторизует каждый запрос из токена IdP пользователя, читая членство в группе из claim `groups` токена и оценивая политики против него. Нет реестра для перечисления и нет учётных записей для предварительного создания, и поэтому нет конечной точки SCIM, потому что нечего синхронизировать в SCIM.
700 815
701 Запустите управление жизненным циклом пользователя и группы в источнике истины, который является собственной подготовкой SCIM вашего IdP или выделенной платформой управления идентификацией. Членство и отзыв, управляемые там, автоматически поступают в gateway через токен. Если вы хотите подготовку SCIM самих учётных записей Claude, это возможность [Claude for Enterprise](/docs/ru/admin-setup).816 Запустите управление жизненным циклом пользователя и группы в источнике истины, который является собственной подготовкой SCIM вашего IdP или выделенной платформой управления идентификацией. Членство и отзыв, управляемые там, автоматически поступают в шлюз через токен. Если вы хотите подготовку SCIM самих учётных записей Claude, это возможность [Claude for Enterprise](/docs/ru/admin-setup).
702 817
703 Применяются два часов распространения:818 Применяются два часов распространения:
704 819
705 * **Содержимое политики**: редактирование политики и переразвёртывание достигает подключённых клиентов при их следующем опросе управляемых параметров, в течение часа, кроме [изменений, которые применяются только при следующем запуске](/docs/ru/server-managed-settings#fetch-and-caching-behavior)820 * **Содержание политики**: редактирование политики и переразвёртывание достигает подключённых клиентов при их следующем опросе управляемых настроек, в течение часа, кроме [изменений, которые применяются только при следующем запуске](/docs/ru/server-managed-settings#fetch-and-caching-behavior)
706 * **Членство в группе**: изменение членства пользователя в группе изменяет, какая политика соответствует им. Это вступает в силу при следующем переминте сеанса, означая следующее молчаливое обновление, ограниченное `session.ttl_hours`.821 * **Членство в группе**: изменение членства пользователя в группе изменяет, какая политика ему соответствует. Это вступает в силу при следующем переизготовлении сеанса, то есть при следующем молчаливом обновлении, ограниченном `session.ttl_hours`.
707</Note>822</Note>
708 823
709<h4 id="matcher-values-that-stop-the-gateway-at-boot">824<h4 id="matcher-values-that-stop-the-gateway-at-boot">
710 Значения matcher, которые останавливают gateway при загрузке825 Значения сопоставления, которые останавливают шлюз при загрузке
711</h4>826</h4>
712 827
713При загрузке gateway проверяет блок `match` каждой политики и список [`admin_groups`](#admin). Любое из этих значений останавливает gateway с ошибкой, которая называет поле:828При загрузке шлюз проверяет блок `match` каждой политики и список [`admin_groups`](#admin). Любое из этих значений останавливает шлюз с ошибкой, которая называет поле:
714 829
715* Пустой список `groups`830* Пустой список `groups`
716* Пустая запись в `groups` или в `admin_groups`831* Пустая запись в `groups` или в `admin_groups`
717* Пустой `email_domain`832* Пустой `email_domain`
718* `email_domain`, который содержит `@`, пробел или запятую. Gateway обрезает значение и удаляет один ведущий `@` перед этой проверкой. Напишите один голый домен, такой как `example.com`.833* `email_domain`, содержащий `@`, пробел или запятую. Шлюз обрезает значение и удаляет один ведущий `@` перед этой проверкой. Напишите один простой домен, такой как `example.com`.
719 834
720До v2.1.232 gateway запускался с этими значениями. Каждое значение имело этот эффект:835До v2.1.232 шлюз запускался с этими значениями. Каждое значение имело этот эффект:
721 836
722* Пустой `email_domain`: gateway пропускал проверку домена, поэтому политика с пустым `email_domain` и без списка `groups` соответствовала каждому аутентифицированному пользователю837* Пустой `email_domain`: шлюз пропустил проверку домена, поэтому политика с пустым `email_domain` и без списка `groups` соответствовала каждому аутентифицированному пользователю
723* Пустой список `groups`: политика не соответствовала никому838* Пустой список `groups`: политика не соответствовала никому
724* `email_domain`, содержащий `@`, пробел или запятую: политика не соответствовала никому839* `email_domain`, содержащий `@`, пробел или запятую: политика не соответствовала никому
725* Пустая запись в `groups` или в `admin_groups`: запись соответствовала пользователю только, когда утверждение `groups` IdP этого пользователя также содержало пустую запись. В `admin_groups` это совпадение предоставляло доступ администратора. Если ваш список `admin_groups` никогда не содержал пустую запись, никто не получал доступ администратора таким образом.840* Пустая запись в `groups` или в `admin_groups`: запись соответствовала пользователю только когда claim `groups` IdP этого пользователя также содержал пустую запись. В `admin_groups` это совпадение предоставляло доступ администратора. Если ваш список `admin_groups` никогда не содержал пустую запись, никто не получал доступ администратора таким образом.
726 841
727<h4 id="what-goes-in-cli">842<h4 id="what-goes-in-cli">
728 Что входит в `cli`843 Что входит в `cli`
729</h4>844</h4>
730 845
731Каждое значение `cli` — это полный документ Claude Code `managed-settings.json`, та же схема, которую вы развернули бы через MDM или `/etc/claude-code/managed-settings.json`, выраженная здесь как YAML. CLI применяет доставленный документ на управляемом уровне, выше параметров пользователя и проекта, вместо управляемых параметров сервера. Он поэтому игнорирует параметры [ограниченные источниками политики на уровне ОС](/docs/ru/server-managed-settings#current-limitations), такие как `policyHelper` и `wslInheritsWindowsSettings`.846Каждое значение `cli` — это полный документ Claude Code `managed-settings.json`, та же схема, которую вы развернули бы через MDM или `/etc/claude-code/managed-settings.json`, выраженная здесь как YAML. CLI применяет доставленный документ на управляемом уровне, выше пользовательских и проектных настроек, вместо управляемых на сервере настроек. Поэтому он игнорирует настройки [ограниченные источниками политики на уровне ОС](/docs/ru/server-managed-settings#current-limitations), такие как `policyHelper` и `wslInheritsWindowsSettings`.
732 847
733Gateway проверяет каждый документ по схеме параметров CLI при загрузке, поэтому нераспознанный ключ верхнего уровня приводит к сбою загрузки с ошибкой, называющей каждый нарушающий ключ. Намеренно открытые части схемы всё ещё принимают произвольные значения, потому что более новые клиенты могут распознавать записи, которые схема gateway не распознаёт. Эти открытые ключи — `env`, `pluginConfigs` и ключи, вложенные под `permissions`.848Шлюз проверяет каждый документ против схемы настроек CLI при загрузке, поэтому неизвестный ключ верхнего уровня вызывает сбой при загрузке с ошибкой, называющей каждый нарушающий ключ. Намеренно открытые части схемы всё ещё принимают произвольные значения, потому что более новые клиенты могут распознавать записи, которые схема шлюза не распознаёт. Эти открытые ключи включают `env`, `pluginConfigs` и ключи, вложенные под `permissions`.
734 849
735Поскольку проверка использует схему, поставляемую с установленной версией gateway, размещение ключа параметров верхнего уровня, введённого более новым выпуском Claude Code, в управляемую конфигурацию требует сначала обновления gateway. Дымовой тест новой политики на одном клиенте перед развёртыванием.850Поскольку проверка использует схему, поставляемую с установленной версией шлюза, помещение ключа настроек верхнего уровня, введённого более новым выпуском Claude Code, в управляемую конфигурацию требует сначала обновления шлюза. Протестируйте новую политику на одном клиенте перед развёртыванием.
736 851
737Полный справочник ключей находится в [Параметры Claude Code](/docs/ru/settings-reference#all-settings). Ключи, которые операторы достают в первую очередь:852Полная справка по ключам находится в [Claude Code settings](/docs/ru/settings-reference#all-settings). Ключи, которые операторы чаще всего используют в первую очередь:
738 853
739```yaml theme={null}854```yaml theme={null}
740managed:855managed:
741 policies:856 policies:
742 - match: {}857 - match: {}
743 cli:858 cli:
744 # Доступ к модели (также применяется на стороне сервера в /v1/messages)859 # Model access (also enforced server-side at /v1/messages)
745 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]860 availableModels: [claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5]
746 861
747 # Политика разрешений862 # Permission policy
748 permissions:863 permissions:
749 deny:864 deny:
750 - "WebFetch"865 - "WebFetch"
751 - "Read(./.env)"866 - "Read(./.env)"
752 - "Read(./secrets/**)"867 - "Read(./secrets/**)"
753 disableBypassPermissionsMode: disable # блокирует --dangerously-skip-permissions868 disableBypassPermissionsMode: disable # blocks --dangerously-skip-permissions
754 allowManagedPermissionRulesOnly: true # игнорирует правила разрешений пользователя/проекта869 allowManagedPermissionRulesOnly: true # ignore user/project permission rules
755 870
756 # Окружение, отправляемое в процесс CLI. DISABLE_UPDATES блокирует871 # Environment pushed into the CLI process. DISABLE_UPDATES blocks
757 # фоновые и ручные обновления; DISABLE_AUTOUPDATER останавливает только872 # background and manual updates; DISABLE_AUTOUPDATER stops only
758 # фоновые обновления.873 # background updates.
759 env:874 env:
760 DISABLE_UPDATES: "1" # закрепите версии через вашу собственную дистрибуцию875 DISABLE_UPDATES: "1" # pin versions via your own distribution
761 876
762 # Hooks на уровне организации. Команды hook запускаются на машинах разработчиков, не на877 # Org-wide hooks. Hook commands run on developer machines, not the
763 # gateway, поэтому путь должен существовать на каждой ОС клиента в политике.878 # gateway, so the path must exist on every client OS in the policy.
764 hooks:879 hooks:
765 PostToolUse:880 PostToolUse:
766 - matcher: "Edit|Write"881 - matcher: "Edit|Write"
770 885
771| Ключ | Применяется | Эффект |886| Ключ | Применяется | Эффект |
772| - | - | - |887| - | - | - |
773| `availableModels` | Gateway + CLI | Список разрешений моделей. Также проверяется в `/v1/messages`, поэтому исправленный клиент не может его обойти. |888| `availableModels` | Шлюз + CLI | Список разрешённых моделей. Также проверяется в `/v1/messages`, поэтому исправленный клиент не может его обойти. |
774| `permissions.allow` / `.deny` | CLI | Правила инструментов и команд. См. [Разрешения](/docs/ru/permissions). |889| `permissions.allow` / `.deny` | CLI | Правила инструментов и команд. Смотрите [Permissions](/docs/ru/permissions). |
775| `permissions.disableBypassPermissionsMode` | CLI | Установите на `disable` для блокировки [`bypassPermissions`](/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode), режима, который пропускает подсказки разрешений, и флага `--dangerously-skip-permissions` |890| `permissions.disableBypassPermissionsMode` | CLI | Установите на `disable`, чтобы заблокировать [`bypassPermissions`](/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode), режим, который пропускает подсказки разрешений, и флаг `--dangerously-skip-permissions` |
776| `allowManagedPermissionRulesOnly` | CLI | Когда `true`, управляемые параметры становятся единственным источником параметров правил разрешений. Запись [`allowManagedPermissionRulesOnly`](/docs/ru/settings-reference#allowmanagedpermissionrulesonly) перечисляет каждый источник, который Claude Code затем игнорирует. |891| `allowManagedPermissionRulesOnly` | CLI | Когда `true`, управляемые настройки становятся единственным источником настроек правил разрешений. Запись [`allowManagedPermissionRulesOnly`](/docs/ru/settings-reference#allowmanagedpermissionrulesonly) перечисляет каждый источник, который Claude Code затем игнорирует. |
777| `env` | CLI | Переменные окружения, объединённые в процесс CLI. Используйте для телеметрии, автообновления и переопределений имён моделей. |892| `env` | CLI | Переменные окружения объединены в процесс CLI. Используйте для телеметрии, автоматического обновления и переопределения имён моделей. |
778| `hooks` | CLI | Org-wide [hooks](/docs/ru/hooks) |893| `hooks` | CLI | Организационные [hooks](/docs/ru/hooks) |
779| `managedMcpServers` | CLI | Удалённые MCP серверы [предоставленные каждому соответствующему разработчику](/docs/ru/managed-mcp#provide-servers-through-managed-settings) наряду с серверами, которые они добавляют сами, `http` и `sse` только. См. [MCP серверы в политике](#mcp-servers-in-a-policy). Требует Claude Code v2.1.259 или позже на сервере gateway и на клиентах. Более ранние клиенты игнорируют ключ. |894| `managedMcpServers` | CLI | Удалённые MCP серверы [предоставляемые каждому соответствующему разработчику](/docs/ru/managed-mcp#provide-servers-through-managed-settings) наряду с серверами, которые они добавляют сами, `http` и `sse` только. Смотрите [MCP серверы в политике](#mcp-servers-in-a-policy). Требует Claude Code v2.1.259 или позже на сервере шлюза и на клиентах. Более ранние клиенты игнорируют ключ. |
780 895
781Поскольку эти параметры поступают по сети, CLI показывает каждому разработчику диалог одобрения безопасности перед применением параметров, перечисленных ниже:896Поскольку эти настройки поступают по сети, CLI показывает каждому разработчику диалог одобрения безопасности перед применением настроек, указанных ниже:
782 897
783* `hooks`898* `hooks`
784* переменные `env`, которые требуют одобрения разработчика, такие как переменные прокси и базового URL899* Переменные `env`, требующие одобрения разработчика, такие как переменные прокси и базового URL
785* параметры выполнения оболочки, такие как `apiKeyHelper` и `statusLine`900* Настройки выполнения оболочки, такие как `apiKeyHelper` и `statusLine`
786* параметры двоичного файла sandbox `sandbox.bwrapPath`, `sandbox.socatPath` и `sandbox.ripgrep`901* Настройки двоичного файла песочницы `sandbox.bwrapPath`, `sandbox.socatPath` и `sandbox.ripgrep`
787* Параметры Sandbox, которые перехватывают трафик, внедряют учётные данные или ослабляют изоляцию, такие как `sandbox.network.tlsTerminate` и параметры порта прокси. [Диалоги одобрения безопасности](/docs/ru/server-managed-settings#security-approval-dialogs) перечисляют их все.902* Настройки песочницы, которые перехватывают трафик, внедряют учётные данные или ослабляют изоляцию, такие как `sandbox.network.tlsTerminate` и настройки портов прокси. [Диалоги одобрения безопасности](/docs/ru/server-managed-settings#security-approval-dialogs) перечисляют их все.
788 903
789[Память одобрения](/docs/ru/server-managed-settings#approval-memory) охватывает, как долго одобрение длится и когда диалог появляется снова.904[Память одобрения](/docs/ru/server-managed-settings#approval-memory) охватывает, как долго длится одобрение и когда диалог появляется снова.
790 905
791Claude Code применяет некоторые доставленные переменные `env` без показа разработчику диалога одобрения безопасности, такие как параметры выбора модели и числовые ограничения. Другие доставленные переменные могут требовать одобрения разработчика перед вступлением в силу; непустое значение прокси, базового URL или `OTEL_EXPORTER_OTLP_ENDPOINT` всегда это делает. Когда доставленная переменная нуждается в одобрении, диалог называет её.906Claude Code применяет некоторые доставленные переменные `env` без показа разработчику диалога одобрения безопасности, такие как настройки выбора модели и числовые ограничения. Другие доставленные переменные могут требовать одобрения разработчика перед вступлением в силу; непустое значение прокси, базового URL или `OTEL_EXPORTER_OTLP_ENDPOINT` всегда требует. Когда доставленная переменная требует одобрения, диалог называет её.
792 907
793[Переменные окружения и диалог одобрения](/docs/ru/server-managed-settings#environment-variables-and-the-approval-dialog) имеет детали, включая четыре переключателя конфиденциальности, чьё доставленное значение решает, нуждаются ли они в одобрении. До v2.1.218 Claude Code применял меньше переменных без запроса разработчика, поэтому больше доставленных переменных запускали диалог.908[Переменные окружения и диалог одобрения](/docs/ru/server-managed-settings#environment-variables-and-the-approval-dialog) содержит детали, включая четыре переключателя конфиденциальности, чьё доставленное значение решает, требуют ли они одобрения. До v2.1.218 Claude Code применял меньше переменных без запроса разработчика, поэтому больше доставленных переменных вызывали диалог.
794 909
795[Телеметрия](#telemetry) gateway отправляет `OTEL_EXPORTER_OTLP_ENDPOINT`, поэтому установка `telemetry.forward_to` запускает диалог на каждом интерактивном клиенте. Диалог защищает машину разработчика от скомпрометированного или враждебного gateway, а не организацию от разработчика.910Конфигурация [телеметрии](#telemetry) шлюза отправляет `OTEL_EXPORTER_OTLP_ENDPOINT`, поэтому установка `telemetry.forward_to` вызывает диалог на каждом интерактивном клиенте. Диалог защищает машину разработчика от скомпрометированного или враждебного шлюза, а не организацию от разработчика.
796 911
797Неинтерактивный запуск с флагом `-p` не может показать диалог. Он применяет отправленные параметры только для этого запуска и не записывает их как одобренные, поэтому следующий интерактивный сеанс разработчика всё ещё показывает диалог. До версии 2.1.207 неинтерактивный запуск сохранял параметры как одобренные и ни один последующий интерактивный сеанс не показывал диалог для них.912[Неинтерактивный запуск](/docs/ru/server-managed-settings#security-approval-dialogs), такой как `claude -p` или сеанс Agent SDK, не может показать диалог. Он применяет отправленные настройки только для этого запуска и не записывает их как одобренные, поэтому следующий интерактивный сеанс разработчика всё ещё показывает диалог. До v2.1.207 неинтерактивный запуск сохранял настройки как одобренные и ни один более поздний интерактивный сеанс не показывал диалог для них.
798 913
799Если разработчик отклоняет, Claude Code выходит из этого сеанса, а не применяет политику. Когда вы отправляете новый hook или любую переменную `env`, которая запускает диалог, в широкую политику, Claude Code поэтому показывает диалог каждому соответствующему разработчику. Он показывает диалог в работающем сеансе при следующем часовом опросе, и в противном случае при следующем запуске разработчика.914Если разработчик отклоняет, Claude Code выходит из этого сеанса, а не применяет политику. Когда вы отправляете новый hook или любую переменную env, которая вызывает диалог, в широкую политику, каждый соответствующий разработчик видит диалог в своих интерактивных сеансах. Работающий интерактивный сеанс показывает его при следующем часовом опросе, в противном случае он появляется при следующем интерактивном запуске разработчика.
800 915
801Ключ `cli` был назван `settings` в более ранних выпусках. Это написание всё ещё принимается как псевдоним, но новые развёртывания должны использовать `cli`.916Ключ `cli` был назван `settings` в более ранних выпусках. Это написание всё ещё принимается как псевдоним, но новые развёртывания должны использовать `cli`.
802 917
804 MCP серверы в политике919 MCP серверы в политике
805</h4>920</h4>
806 921
807Чтобы предоставить MCP серверы клиентам Claude Code, которым соответствует политика, установите [`managedMcpServers`](/docs/ru/managed-mcp#provide-servers-through-managed-settings) в блоке `cli` этой политики. Вам нужен Claude Code v2.1.259 или позже на сервере gateway и на клиентах.922Чтобы предоставить MCP серверы клиентам Claude Code, которым соответствует политика, установите [`managedMcpServers`](/docs/ru/managed-mcp#provide-servers-through-managed-settings) в блоке `cli` этой политики. Вам нужен Claude Code v2.1.259 или позже на сервере шлюза и на клиентах.
808 923
809Gateway проверяет каждую запись при загрузке с [теми же правилами, которые Claude Code применяет на клиенте](/docs/ru/managed-mcp#what-an-entry-can-contain), и если запись не проходит проверку, gateway отказывается запускаться и называет запись.924Шлюз проверяет каждую запись при загрузке с [теми же правилами, которые Claude Code применяет на клиенте](/docs/ru/managed-mcp#what-an-entry-can-contain), и если запись не проходит проверку, шлюз отказывается запускаться и называет запись.
810 925
811Если вы напишете ссылку `${VAR}` в `gateway.yaml`, gateway разрешает её из своего окружения при загрузке через [расширение секретов](#secret-expansion) перед тем, как запустить проверки записей, поэтому каждый соответствующий клиент получает буквальное значение и может его прочитать. [Руководство заголовка для предоставленных серверов](/docs/ru/managed-mcp#provide-servers-through-managed-settings) применяется к расширенному значению.926Если вы напишете ссылку `${VAR}` в `gateway.yaml`, шлюз разрешит её из своего окружения при загрузке через [расширение секретов](#secret-expansion) перед запуском проверок записей, поэтому каждый соответствующий клиент получает буквальное значение и может его прочитать. [Руководство по заголовкам для предоставленных серверов](/docs/ru/managed-mcp#provide-servers-through-managed-settings) применяется к расширенному значению.
812 927
813Gateway отклоняет написание `.mcp.json` `mcpServers` в блоке `cli`, и его ошибка загрузки называет `managedMcpServers` как ключ для использования. До v2.1.259 gateway отклонял любое определение MCP сервера в блоке `cli`.928Шлюз отклоняет написание `.mcp.json` `mcpServers` в блоке `cli`, и его ошибка загрузки называет `managedMcpServers` как ключ для использования. До v2.1.259 шлюз отклонял любое определение MCP сервера в блоке `cli`.
814 929
815<h4 id="claude-desktop-overlay">930<h4 id="claude-desktop-overlay">
816 Наложение Claude Desktop931 Наложение Claude Desktop
817</h4>932</h4>
818 933
819Если ваша организация также развёртывает [Claude Desktop](/docs/ru/desktop), один и тот же gateway обслуживает обоих клиентов. Укажите `bootstrapUrl` в [управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop на `<listen.public_url>/user/bootstrap`. Claude Desktop выводит издателя OAuth из этого URL, запускает ту же подпись входа с кодом устройства против этого gateway и получает свою конфигурацию из ответа.934Если ваша организация также развёртывает [Claude Desktop](/docs/ru/desktop), один и тот же шлюз обслуживает обоих клиентов. Укажите `bootstrapUrl` в [управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop на `<listen.public_url>/user/bootstrap`. Claude Desktop выводит издателя OAuth из этого URL, запускает ту же подпись устройства против этого шлюза и получает свою конфигурацию из ответа.
820 935
821<Note>936<Note>
822 Требует Claude Code v2.1.203 или позже на сервере gateway и явное согласие: `/user/bootstrap` возвращает 404, если только политика, соответствующая пользователю, не содержит ключ `desktop`. Пустого `desktop: {}` достаточно, чтобы политика дала такое согласие, а ключ `desktop` на базовом слое `match: {}` даёт согласие за каждую политику, которая его наследует. Журнал аудита записывает каждый запрос как `desktop_bootstrap.serve` или `desktop_bootstrap.denied`.937 Требует Claude Code v2.1.203 или позже на сервере шлюза и явное согласие: `/user/bootstrap` возвращает 404, если только политика, соответствующая пользователю, не содержит ключ `desktop`. Пустой `desktop: {}` согласие политики, и ключ `desktop` на базовом слое `match: {}` согласие каждой политики, которая его наследует. Журнал аудита записывает каждый запрос как `desktop_bootstrap.serve` или `desktop_bootstrap.denied`.
823</Note>938</Note>
824 939
825Gateway выводит большую часть ответа из блока `cli` соответствующей политики и из конфигурации gateway верхнего уровня:940Шлюз выводит большую часть ответа из блока `cli` соответствующей политики и из конфигурации шлюза верхнего уровня:
826 941
827* Список моделей из `availableModels`942* Список моделей из `availableModels`
828* Отключённые инструменты из записей `permissions.deny` с названием инструмента. Если вы установите `disabledBuiltinTools` в блоке `desktop` политики, gateway обслуживает объединение вашего значения и выведённого списка, поэтому вы можете отключить больше инструментов таким образом, но не можете повторно включить инструмент, который вы отключили через `permissions.deny`943* Отключённые инструменты из записей `permissions.deny` с простым названием инструмента. Если вы установите `disabledBuiltinTools` в блоке `desktop` политики, шлюз обслуживает объединение вашего значения и выведённого списка, поэтому вы можете отключить больше инструментов таким образом, но не можете повторно включить инструмент, который вы отключили через `permissions.deny`
829* Список разрешений исходящего трафика из `sandbox.network.allowedDomains`. Если вы установите `coworkEgressAllowedHosts` в блоке `desktop` политики, gateway использует это значение вместо выведённого списка944* Список разрешённых исходящих соединений из `sandbox.network.allowedDomains`. Если вы установите `coworkEgressAllowedHosts` в блоке `desktop` политики, шлюз использует это значение вместо выведённого списка
830* Конечная точка OTLP, которая указывает на сам gateway, и атрибуты идентификации подписанного пользователя. Gateway передаёт экспорты, которые он получает в этой конечной точке, вашим назначениям `forward_to`. Он включает конечную точку и атрибуты, когда вы устанавливаете оба [`telemetry.forward_to`](#telemetry) и `listen.public_url`.945* Конечная точка OTLP, которая указывает на сам шлюз, и атрибуты идентификации подписанного пользователя. Шлюз передаёт экспорты, которые он получает в этой конечной точке, вашим назначениям `forward_to`. Он включает конечную точку и атрибуты, когда вы устанавливаете оба [`telemetry.forward_to`](#telemetry) и `listen.public_url`.
831 946
832 Claude Desktop экспортирует каждый сигнал с одной кодировкой: `http/protobuf`, или `http/json`, когда вы установите `OTEL_EXPORTER_OTLP_PROTOCOL` или один из его вариантов для каждого сигнала на `http/json` в `env` политики. До Claude Code v2.1.261 на сервере gateway ответ установил `http/json` независимо, поэтому сборщик, который принимает только protobuf, отклонил экспорты Claude Desktop947 Claude Desktop экспортирует каждый сигнал с одной кодировкой: `http/protobuf`, или `http/json`, когда вы устанавливаете `OTEL_EXPORTER_OTLP_PROTOCOL` или один из его вариантов для каждого сигнала на `http/json` в `env` политики. До Claude Code v2.1.261 на сервере шлюза ответ устанавливал `http/json` независимо, поэтому сборщик, который принимает только protobuf, отклонял экспорты Claude Desktop
833 948
834Чтобы установить `disabledBuiltinTools`, `coworkEgressAllowedHosts` или собственный параметр `managedMcpServers` Claude Desktop в блоке `desktop` политики, вам нужен Claude Code v2.1.232 или позже на сервере gateway. `managedMcpServers` Claude Desktop принимает значение массива, а не объекта.949Чтобы установить `disabledBuiltinTools`, `coworkEgressAllowedHosts` или собственную настройку Claude Desktop `managedMcpServers` в блоке `desktop` политики, вам нужен Claude Code v2.1.232 или позже на сервере шлюза. `managedMcpServers` Claude Desktop принимает значение массива, а не объекта.
835 950
836Gateway опускает ключи без эквивалента Claude Desktop, такие как `hooks` и ограниченные правила разрешений, такие как `Bash(npm *)`, из ответа bootstrap.951Шлюз опускает ключи без эквивалента Claude Desktop, такие как `hooks` и правила разрешений для каждой области, такие как `Bash(npm *)`, из ответа bootstrap.
837 952
838Добавьте опциональный блок `desktop` рядом с `cli` для установки параметров Claude Desktop напрямую. Напишите параметры из [справочника управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop как плоские имена ключей. Не включайте ключи, которые Claude Desktop читает только из MDM или локальных файлов, такие как `bootstrapUrl`; gateway отклоняет их при загрузке. До v2.1.232 gateway принимал фиксированный список из 11 ключей функциональных ворот, такие как `chatTabEnabled` и `disableAutoUpdates`, и отклонял каждый другой ключ при загрузке. До v2.1.227 gateway также отклонял `chatTabEnabled` и `chatAdvancedFileAnalysisEnabled` при загрузке.953Добавьте опциональный блок `desktop` рядом с `cli`, чтобы установить настройки Claude Desktop напрямую. Напишите настройки из [справочника управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop как плоские имена ключей. Оставьте ключи, которые Claude Desktop читает только из MDM или локальных файлов, такие как `bootstrapUrl`; шлюз отклоняет их при загрузке. До v2.1.232 шлюз принимал фиксированный список из 11 ключей функциональных ворот, таких как `chatTabEnabled` и `disableAutoUpdates`, и отклонял каждый другой ключ при загрузке. До v2.1.227 шлюз также отклонял `chatTabEnabled` и `chatAdvancedFileAnalysisEnabled` при загрузке.
839 954
840```yaml theme={null}955```yaml theme={null}
841managed:956managed:
849 banner: { text: "Contractor build: internal use only" }964 banner: { text: "Contractor build: internal use only" }
850```965```
851 966
852Каждый ключ опциональный; Claude Desktop применяет свой собственный по умолчанию для любого ключа, который вы опустите. Gateway проверяет каждый блок `desktop` при загрузке по схеме конфигурации, которую сам использует Claude Desktop, поэтому ошибка появляется при запуске gateway как ошибка, называющая ключ, а не достигает каждого подключённого desktop. Gateway не запускается при загрузке, когда блок содержит:967Каждый ключ опционален; Claude Desktop применяет свой собственный стандарт для любого ключа, который вы опустите. Шлюз проверяет каждый блок `desktop` при загрузке против схемы конфигурации, которую использует сам Claude Desktop, поэтому ошибка появляется при запуске шлюза как ошибка, называющая ключ, а не достигает каждого подключённого рабочего стола. Шлюз не запускается, когда блок содержит:
853 968
854* Неизвестный ключ969* Неизвестный ключ
855* Узнанный ключ, чьё значение Claude Desktop отклонил бы или молча отбросил, такой как пустое значение или неправильно написанный подключ внутри вложенной записи. До v2.1.260 gateway молча отбросил неправильно написанное поле внутри вложенного объекта записи `managedMcpServers` или `orgPluginSettings` вместо отказа при загрузке.970* Распознанный ключ, чьё значение Claude Desktop отклонил бы или молча удалил, такое как пустое значение или неправильно написанный подключ внутри вложенной записи. До v2.1.260 шлюз молча удалял неправильно написанное поле внутри вложенного объекта записи `managedMcpServers` или `orgPluginSettings` вместо отказа при загрузке.
856* Ключ, который gateway вычисляет сам: соединение вывода, список моделей и реле OTLP. Настройте их через [`upstreams`](#upstreams), [`models`](#models) и раздел [`telemetry`](#telemetry) `forward_to`.971* Ключ, который шлюз вычисляет сам: соединение вывода, список моделей и реле OTLP. Настройте их через [`upstreams`](#upstreams), [`models`](#models) и раздел [`telemetry`](#telemetry) `forward_to`.
857* Устаревший псевдоним текущего ключа. В ошибке загрузки gateway называет канонический ключ для написания.972* Устаревший псевдоним текущего ключа. В ошибке загрузки шлюз называет канонический ключ для написания.
858 973
859Если вы используете устаревшее значение или форму записи, такую как запись `managedMcpServers` без `transport`, gateway запускается и регистрирует предупреждение, которое называет замену.974Если вы используете устаревшее значение или форму записи, такую как запись `managedMcpServers` без `transport`, шлюз запускается и регистрирует предупреждение, которое называет замену.
860 975
861Gateway проверяет блок `desktop` по схеме, поставляемой с его установленной версией, как он делает блок `cli`. Чтобы доставить параметр, введённый более новым выпуском Claude Desktop, сначала обновите gateway. Например, `userPluginMarketplacesEnabled` и `userPluginUploadsEnabled` нуждаются в Claude Code v2.1.260 или позже на сервере gateway и Claude Desktop 1.37937.0 или позже на машинах членов.976Шлюз проверяет блок `desktop` против схемы, поставляемой с его установленной версией, как он делает блок `cli`. Чтобы доставить настройку, введённую более новым выпуском Claude Desktop, сначала обновите шлюз. Например, `userPluginMarketplacesEnabled` и `userPluginUploadsEnabled` требуют Claude Code v2.1.260 или позже на сервере шлюза и Claude Desktop 1.37937.0 или позже на машинах членов.
862 977
863Если вы установите `orgPluginSettings` в блоке `desktop` политики, gateway обслуживает его в форме массива, которую читают Claude Desktop 1.15200.0 и позже. Более старые desktops игнорируют массив и не применяют политику инструмента плагина, поэтому обновите членов до 1.15200.0 или позже перед тем, как полагаться на это.978`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes` и `sshClientPath` требуют Claude Code v2.1.281 или позже на сервере шлюза. Так же как значение `required` `microsoftAuthBroker` и поле `continuousAccessEvaluation` записи Microsoft 365 `managedMcpServers`. Выпуски Claude Desktop, которые предшествуют значению `required`, читают его как `disabled`, поэтому установите `required` только после того, как каждый член Claude Desktop его поддерживает. [Справочник управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop перечисляет выпуск, который первым читает каждый ключ.
864 979
865Gateway заполняет ключи, которые блок `desktop` политики не устанавливает, из блока `desktop` catch-all `match: {}`, так же, как он заполняет блок `cli` политики из базового. Если вы установите `disabledBuiltinTools` или `builtinToolPolicy` в обоих базовом и политике роли, gateway сохраняет ограничение базового:980Если вы установите `orgPluginSettings` в блоке `desktop` политики, шлюз обслуживает его в форме массива, которую читают Claude Desktop 1.15200.0 и позже. Более старые рабочие столы игнорируют массив и не применяют политику инструмента плагина, поэтому обновите членов до 1.15200.0 или позже перед тем, как полагаться на это.
866 981
867* `disabledBuiltinTools`: gateway использует объединение списка базового и списка политики982Шлюз заполняет ключи, которые блок `desktop` политики не устанавливает, из блока `desktop` catch-all `match: {}`, так же как он заполняет блок `cli` политики из базового. Если вы установите `disabledBuiltinTools` или `builtinToolPolicy` как в базовом, так и в политике роли, шлюз сохраняет ограничение базового:
868* `builtinToolPolicy`: если вы установите инструмент на значение, отличное от `allow`, в базовом, gateway сохраняет это значение, даже если вы установите `allow` для того же инструмента в политике роли
869 983
870Для каждого другого ключа, если вы установите его в политике роли, gateway использует значение политики роли. Gateway заменяет массив или вложенный объект, такой как `banner`, целиком, поэтому если вы установите `banner.text` в политике роли, gateway отбросит `banner.backgroundColor` базового.984* `disabledBuiltinTools`: шлюз использует объединение списка базового и списка политики
985* `builtinToolPolicy`: если вы установите инструмент на значение, отличное от `allow`, в базовом, шлюз сохраняет это значение, даже если вы установите `allow` для того же инструмента в политике роли
871 986
872Если вы не развёртываете Claude Desktop, вообще не включайте `desktop` в ваши политики; gateway затем возвращает 404 из `/user/bootstrap` для каждого пользователя.987Для каждого другого ключа, если вы установите его в политике роли, шлюз использует значение политики роли. Шлюз заменяет массив или вложенный объект, такой как `banner`, целиком, поэтому если вы установите `banner.text` в политике роли, шлюз удаляет `banner.backgroundColor` базового.
988
989Если вы не развёртываете Claude Desktop, оставьте `desktop` полностью из ваших политик; шлюз затем возвращает 404 из `/user/bootstrap` для каждого пользователя.
873 990
874<h4 id="precedence-with-other-managed-sources">991<h4 id="precedence-with-other-managed-sources">
875 Приоритет с другими управляемыми источниками992 Приоритет с другими управляемыми источниками
876</h4>993</h4>
877 994
878Если устройство также имеет политику, доставленную MDM, или локальный `managed-settings.json`, параметры, доставленные gateway, занимают первое место. [Приоритет в управляемом уровне](/docs/ru/managed-settings#precedence-within-the-managed-tier) на странице управляемых параметров говорит, когда применяются локальные источники, и имеет [ключи, которые Claude Code читает из каждого источника администратора](/docs/ru/managed-settings#keys-read-from-every-admin-source) независимо от того, какой источник он выбрал, такие как ключи блокировки sandbox, `forceRemoteSettingsRefresh` и для каждой переменной `env` слияние. [`policyHelper`](/docs/ru/settings-reference#policyhelper), настроенный в профиле MDM или файле управляемых параметров, запускается только, когда gateway не доставляет параметры; запись говорит, что его вывод заменяет.995Если устройство также имеет политику, доставленную MDM, или локальный `managed-settings.json`, параметры, доставленные шлюзом, занимают первое место. [Приоритет в управляемом уровне](/docs/ru/managed-settings#precedence-within-the-managed-tier) на странице управляемых настроек говорит, когда применяются локальные источники, и имеет [ключи, которые Claude Code читает из каждого источника администратора](/docs/ru/managed-settings#keys-read-from-every-admin-source) независимо от того, какой источник он выбрал, такие как ключи блокировки песочницы, `forceRemoteSettingsRefresh` и объединение `env` для каждой переменной. [`policyHelper`](/docs/ru/settings-reference#policyhelper), настроенный в профиле MDM или файле управляемых настроек, работает только когда шлюз не доставляет настройки; запись говорит, что его выход заменяет.
879 996
880Встраивающие хосты, такие как [Claude Desktop](/docs/ru/desktop), могут предоставлять политику через опцию SDK `managedSettings`. [Параметры родителя из встраивающих хостов](/docs/ru/managed-settings#parent-settings-from-embedding-hosts) говорит, когда Claude Code применяет это, и [Ограничить параметры родителя](/docs/ru/claude-apps-gateway#restrict-parent-settings) перечисляет, какие параметры в направлении разрешения всё ещё применяются без блокировок `allowManaged*Only`.997Хосты встраивания, такие как [Claude Desktop](/docs/ru/desktop), могут предоставлять политику через опцию SDK `managedSettings`. [Параметры родителя от хостов встраивания](/docs/ru/managed-settings#parent-settings-from-embedding-hosts) говорит, когда Claude Code применяет это, и [Ограничить параметры родителя](/docs/ru/claude-apps-gateway#restrict-parent-settings) перечисляет, какие параметры в направлении разрешения всё ещё применяются без блокировок `allowManaged*Only`.
881 998
882Политики gateway применяются к каждому вызову Claude Code на машине, включая неинтерактивные запуски `claude -p` и сеансы, порождённые Agent SDK. Если gateway недоступен при запуске, сеансы с выполненным входом завершаются с ошибкой, а не работают без своей политики.999Политики шлюза применяются к каждому вызову Claude Code на машине, включая неинтерактивные запуски `claude -p` и сеансы, порождённые Agent SDK. Если шлюз недоступен при запуске, подписанные сеансы выходят с ошибкой, а не работают без своей политики.
883 1000
884<h3 id="telemetry">1001<h3 id="telemetry">
885 `telemetry`1002 `telemetry`
886</h3>1003</h3>
887 1004
888CLI отправляет метрики, логи и, когда включено, трассировки на gateway, который передаёт их дословно каждому настроенному назначению. Экспорты используют OpenTelemetry Protocol (OTLP) по HTTP. Чтобы пропустить реле и иметь сеансы, экспортирующие прямо на ваш сборщик, [назовите сборщик в политике](#export-directly-to-your-collector). См. [Мониторинг использования](/docs/ru/monitoring-usage) для метрик и событий, которые выпускает CLI.1005CLI отправляет метрики, логи и, когда включено, трассировки на шлюз, который передаёт их дословно каждому настроенному назначению. Экспорты используют OpenTelemetry Protocol (OTLP) по HTTP. Чтобы пропустить реле и иметь сеансы, экспортирующие прямо на ваш сборщик, [назовите сборщик в политике](#export-directly-to-your-collector). Смотрите [Monitoring usage](/docs/ru/monitoring-usage) для метрик и событий, которые CLI излучает.
889 1006
890CLI штампует каждый экспорт идентификацией аутентифицированного пользователя, прочитанной из JWT, выданного gateway: атрибуты `user.id`, `user.email` и `user.groups`. Атрибуция затрат и использования для каждого разработчика поэтому работает без конфигурации на стороне разработчика.1007В сеансах, подписанных через `/login`, CLI штампует каждый экспорт идентификацией аутентифицированного пользователя, прочитанной из выданного шлюзом JWT: атрибуты `user.id`, `user.email` и `user.groups`. Атрибуция затрат и использования на разработчика поэтому работает без конфигурации на стороне разработчика.
891 1008
892[Claude Desktop](#claude-desktop-overlay) и сеансы Cowork, подписанные через gateway, штампуют свою телеметрию с `user.email` и `user.groups` наряду с `enduser.id`, поэтому вы можете охватить использование терминала, Desktop и Cowork одним запросом на `user.email` или `user.groups`. `user.groups` — это список групп IdP, разделённый запятыми.1009[Claude Desktop](#claude-desktop-overlay) и сеансы Cowork, подписанные через шлюз, штампуют свою телеметрию с `user.email` и `user.groups` наряду с `enduser.id`, поэтому вы можете охватить использование терминала, Desktop и Cowork одним запросом на `user.email` или `user.groups`. `user.groups` — это список групп IdP, разделённый запятыми.
893 1010
894Desktop и Cowork телеметрия также несёт `enduser.sub`, утверждение `sub`, которое выдаёт ваш поставщик идентификации для пользователя, которое остаётся тем же, когда электронная почта пользователя изменяется. Сеансы терминала штампуют то же значение под `user.id`, поэтому запрос, который соответствует `enduser.sub` против терминала `user.id`, охватывает использование одного пользователя терминала, Desktop и Cowork вместе. На экспортах Desktop и Cowork `user.id` — это анонимный идентификатор, а не субъект.1011Телеметрия Desktop и Cowork также несёт `enduser.sub`, claim `sub`, который выдаёт ваш поставщик идентификации для пользователя, который остаётся одинаковым, когда электронная почта пользователя изменяется. Сеансы терминала штампуют то же значение под `user.id`, поэтому запрос, который соответствует `enduser.sub` терминалу `user.id`, охватывает использование одного пользователя терминала, Desktop и Cowork вместе. На экспортах Desktop и Cowork `user.id` — это анонимный идентификатор, а не субъект.
895 1012
896Как и все данные OpenTelemetry из Claude Code, эти атрибуты идут только на назначения, которые настраивает ваша организация, никогда на Anthropic.1013Как и все данные OpenTelemetry из Claude Code, эти атрибуты идут только на назначения, которые настраивает ваша организация, никогда на Anthropic.
897 1014
898Если список групп пользователя длиннее 255 символов после процентного кодирования, или имя группы содержит запятую или знак равенства, gateway оставляет `user.groups` из телеметрии Desktop и Cowork этого пользователя, а не усекает его. Сеансы терминала этого пользователя всё ещё несут полный список.1015Если список групп пользователя длиннее 255 символов после процентного кодирования, или имя группы содержит запятую или знак равенства, шлюз оставляет `user.groups` из телеметрии Desktop и Cowork этого пользователя, а не усекает его. Сеансы терминала этого пользователя всё ещё несут полный список.
899 1016
900Gateway оставляет `enduser.sub` отключённым, когда субъект длиннее 255 символов после процентного кодирования, или содержит пробел, символ вне печатного ASCII, или один из `,` `;` `=` `\` `"` `%`. Телеметрия Desktop и Cowork этого пользователя сохраняет свои другие атрибуты.1017Шлюз оставляет `enduser.sub` когда субъект длиннее 255 символов после процентного кодирования, или содержит пробел, символ вне печатного ASCII, или один из `,` `;` `=` `\` `"` `%`. Телеметрия Desktop и Cowork этого пользователя сохраняет свои другие атрибуты.
901 1018
902Вам нужен Claude Code v2.1.265 или позже на сервере gateway для `user.email` и `user.groups` на телеметрии Desktop и Cowork, и Claude Desktop 1.24012 или позже на машине каждого разработчика для `user.groups`.1019Вам нужен Claude Code v2.1.265 или позже на сервере шлюза для `user.email` и `user.groups` на телеметрии Desktop и Cowork, и Claude Desktop 1.24012 или позже на машине каждого разработчика для `user.groups`.
903 1020
904Вам нужен Claude Code v2.1.274 или позже на сервере gateway для `enduser.sub`.1021Вам нужен Claude Code v2.1.274 или позже на сервере шлюза для `enduser.sub`.
905 1022
906```yaml theme={null}1023```yaml theme={null}
907telemetry:1024telemetry:
909 - url: https://otel-collector.internal.example.com1026 - url: https://otel-collector.internal.example.com
910 headers:1027 headers:
911 Authorization: ${OTLP_TOKEN}1028 Authorization: ${OTLP_TOKEN}
912 # Opt-in для каждого сигнала. По умолчанию: только метрики.1029 # Per-signal opt-in. Default: metrics only.
913 metrics: true1030 metrics: true
914 logs: false1031 logs: false
915 traces: false1032 traces: false
919```1036```
920 1037
921<Warning>1038<Warning>
922 Каждое назначение выбирает `metrics`, `logs` и `traces` независимо, и по умолчанию только метрики. Сигналы отличаются по чувствительности:1039 Каждое назначение согласует `metrics`, `logs` и `traces` независимо, и по умолчанию только метрики. Сигналы отличаются по чувствительности:
923 1040
924 * **Метрики**: агрегированные счётчики, такие как количество токенов, количество запросов и задержка1041 * **Metrics**: совокупные счётчики, такие как количество токенов, количество запросов и задержка
925 * **Логи и трассировки**: могут нести полные команды bash, входные данные инструментов и пути файлов, охватывая всё, что Claude Code делает на машине разработчика1042 * **Logs и traces**: могут нести полные команды Bash, входные данные инструмента и пути файлов, охватывая всё, что делает Claude Code на машине разработчика
926 1043
927 Включайте логи и трассировки только на назначениях с управлением доступом и политикой сохранения, которые данные гарантируют.1044 Включайте логи и трассировки только на назначениях с элементами управления доступом и политикой хранения, которые данные оправдывают.
928</Warning>1045</Warning>
929 1046
930Каждый URL `forward_to` должен использовать `https://`, с одним исключением для сборщика на собственном интерфейсе loopback gateway:1047Каждый URL `forward_to` должен использовать `https://`, с одним исключением для сборщика на собственном интерфейсе обратной связи шлюза:
931 1048
932* `http://localhost:<port>` проходит проверку конфигурации, но [защита SSRF](/docs/ru/claude-apps-gateway-deploy#threat-model-summary) блокирует каждый экспорт с `ECONNREFUSED_SSRF`, если вы не установите `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` в окружении gateway1049* `http://localhost:<port>` проходит проверку конфигурации, но [защита SSRF](/docs/ru/claude-apps-gateway-deploy#threat-model-summary) блокирует каждый экспорт с `ECONNREFUSED_SSRF`, если вы не установите `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` в окружении шлюза
933* `http://127.0.0.1:<port>` или `http://[::1]:<port>` не запускается при загрузке, если эта переменная не установлена1050* `http://127.0.0.1:<port>` или `http://[::1]:<port>` не запускается, если эта переменная не установлена
934 1051
935Для сборщика в кластере выставьте его по HTTPS на его собственный внутренний адрес или запустите его как sidecar с установленной переменной.1052Для сборщика в кластере выставьте его по HTTPS на его собственный внутренний адрес, или запустите его как sidecar с установленной переменной.
936 1053
937Когда `HTTPS_PROXY` установлен, gateway отправляет экспорты через этот прокси.1054Когда установлен `HTTPS_PROXY`, шлюз отправляет экспорты через этот прокси.
938 1055
939Чтобы достичь внутреннего сборщика напрямую, добавьте его в `NO_PROXY` по имени хоста или по домену с ведущей точкой, такой как `.internal.example.com`, что требует Claude Code v2.1.277 или позже на сервере gateway. Убедитесь, что gateway может достичь сборщика без прокси. Запись без ведущей точки соответствует только этому точному имени, а не именам под ним. Диапазоны CIDR не соответствуют.1056Чтобы достичь внутреннего сборщика напрямую, добавьте его в `NO_PROXY` по имени хоста или по домену с ведущей точкой, такой как `.internal.example.com`, что требует Claude Code v2.1.277 или позже на сервере шлюза. Убедитесь, что шлюз может достичь сборщика без прокси. Запись без ведущей точки соответствует только этому точному имени, а не именам под ним. Диапазоны CIDR не соответствуют.
940 1057
941С включённым [прокси-только исходящим трафиком](#proxy-only-egress), разрешите сборщик в прокси вместо этого, так как любая запись `NO_PROXY` отключает прокси-только исходящий трафик.1058С включённым [прокси-только исходящим соединением](#proxy-only-egress), разрешите сборщик в прокси вместо этого, так как любая запись `NO_PROXY` отключает прокси-только исходящее соединение.
942 1059
943Телеметрия отключена в CLI по умолчанию. Когда вы устанавливаете оба `telemetry.forward_to` и `listen.public_url`, gateway включает её для подключённых клиентов, отправляя шесть переменных окружения через `/managed/settings`:1060Телеметрия отключена в CLI по умолчанию. Когда вы устанавливаете оба `telemetry.forward_to` и `listen.public_url`, шлюз включает её для подключённых клиентов, отправляя шесть переменных окружения через `/managed/settings`:
944 1061
945* `CLAUDE_CODE_ENABLE_TELEMETRY=1`1062* `CLAUDE_CODE_ENABLE_TELEMETRY=1`
946* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER` и `OTEL_TRACES_EXPORTER`, каждый установлен на `otlp`, если по крайней мере одно назначение `forward_to` включает этот сигнал, и на `none` в противном случае1063* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER` и `OTEL_TRACES_EXPORTER`, каждый установлен на `otlp`, если хотя бы одно назначение `forward_to` включает этот сигнал, и на `none` в противном случае
947* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`1064* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`
948* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`1065* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`
949 1066
950Когда вы [добавляете свои собственные метки](#add-your-own-labels), gateway также отправляет `OTEL_RESOURCE_ATTRIBUTES`.1067Когда вы [добавляете свои собственные метки](#add-your-own-labels), шлюз также отправляет `OTEL_RESOURCE_ATTRIBUTES`.
951 1068
952До Claude Code v2.1.265 на сервере gateway, gateway отправлял все три селектора экспортера как `otlp`, включая для сигналов, которые ни одно назначение не включало.1069До Claude Code v2.1.265 на сервере шлюза шлюз отправлял все три селектора экспортера как `otlp`, включая для сигналов, которые ни одно назначение не включило.
953 1070
954Отправленная конечная точка строится из публичного URL, поэтому метрики и логи не нуждаются в конфигурации OTEL от разработчиков или политик.1071Отправленная конечная точка строится из публичного URL, поэтому метрики и логи не требуют конфигурации OTEL от разработчиков или политик.
955 1072
956Разработчики, подписанные через `/login`, не могут перенаправлять экспорты с собственной конфигурацией OTEL:1073Разработчики, подписанные через `/login`, не могут перенаправить экспорты с собственной конфигурацией OTEL:
957 1074
958* **Локально установленные переменные**: Claude Code применяет отправленные переменные на управляемом уровне, поэтому каждая переопределяет значение, которое разработчик устанавливает для неё локально.1075* **Локально установленные переменные**: Claude Code применяет отправленные переменные на управляемом уровне, поэтому каждая переопределяет значение, которое разработчик устанавливает для неё локально.
959* **Локально настроенные конечные точки**: с включённым экспортом OTLP/HTTP, CLI игнорирует любую локально настроенную конечную точку, независимо от того, отправил ли gateway переменные телеметрии. Его экспорты идят на gateway, если политика не [называет ваш сборщик как конечную точку](#export-directly-to-your-collector).1076* **Локально настроенные конечные точки**: с включённым экспортом OTLP/HTTP CLI игнорирует любую локально настроенную конечную точку, независимо от того, отправил ли шлюз переменные телеметрии. Его экспорты идут на шлюз, если политика не [называет ваш сборщик как конечную точку](#export-directly-to-your-collector).
960 1077
961Без назначения `forward_to` для сигнала, gateway принимает и отбрасывает его. Если разработчики уже экспортируют телеметрию Claude Code на один из ваших сборщиков, добавьте его как назначение `forward_to`, с включёнными логами или трассировками, если они их экспортируют, поэтому он продолжает получать их данные после того, как они подпишутся. Чтобы пропустить реле вместо этого, [назовите сборщик в политике](#export-directly-to-your-collector).1078Без назначения `forward_to` для сигнала шлюз принимает и отклоняет его. Если разработчики уже экспортируют телеметрию Claude Code на один из ваших сборщиков, добавьте его как назначение `forward_to`, с включёнными логами или трассировками, если они их экспортируют, поэтому он продолжает получать их данные после подписания. Чтобы пропустить реле вместо этого, [назовите сборщик в политике](#export-directly-to-your-collector).
962 1079
963[Трассировки](/docs/ru/monitoring-usage#traces-beta) дополнительно требуют `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` на каждом клиенте. Установите её в блоке `env` управляемой политики, так как gateway не отправляет её. Разработчики одобряют её в том же [диалоге одобрения безопасности](#managed), который отправленная конечная точка уже запускает.1080[Traces](/docs/ru/monitoring-usage#traces-beta) также требуют `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` на каждом клиенте. Установите его в блоке `env` управляемой политики, так как шлюз его не отправляет. Разработчики одобряют его в том же [диалоге одобрения безопасности](#managed), который уже вызывает отправленная конечная точка.
964 1081
965Установите её на `1` только в политиках, чьи группы вы хотите отследить. Политика, которая не устанавливает её, наследует значение из вашей политики `match: {}` catch-all, если эта политика устанавливает одно, согласно [правилам слияния](#managed). Чтобы помешать клиентам группы отправлять трассировки, даже когда разработчик устанавливает переменную локально, установите её на `0` в политике этой группы.1082Установите его на `1` только в политиках, чьи группы вы хотите отследить. Политика, которая его не устанавливает, наследует значение из вашей политики catch-all `match: {}`, если эта политика устанавливает одно, согласно [правилам объединения](#managed). Чтобы помешать клиентам группы отправлять трассировки, даже когда разработчик устанавливает переменную локально, установите её на `0` в политике этой группы.
966 1083
967Оба кодирования OTLP protobuf и JSON передаются, и любой совместимый с OpenTelemetry backend работает как назначение.1084Оба кодирования OTLP protobuf и JSON передаются, и любой совместимый с OpenTelemetry бэкенд работает как назначение.
968 1085
969<h4 id="add-your-own-labels">1086<h4 id="add-your-own-labels">
970 Добавление собственных меток1087 Добавьте свои собственные метки
971</h4>1088</h4>
972 1089
973Чтобы поместить фиксированные метки, такие как `service.namespace` или `deployment.environment.name`, на телеметрию сеансов, подписанных через gateway, установите `telemetry.resource_attributes`. Каждая метка — это атрибут ресурса OpenTelemetry, и каждое назначение получает одни и те же метки.1090Чтобы поместить фиксированные метки, такие как `service.namespace` или `deployment.environment.name`, на телеметрию сеансов, подписанных через шлюз, установите `telemetry.resource_attributes`. Каждая метка — это атрибут ресурса OpenTelemetry, и каждое назначение получает одинаковые метки.
974 1091
975Сеансы получают метки только, когда вы также устанавливаете `telemetry.forward_to` и `listen.public_url`. Этот пример добавляет две метки:1092Сеансы получают метки только когда вы также устанавливаете `telemetry.forward_to` и `listen.public_url`. Этот пример добавляет две метки:
976 1093
977```yaml theme={null}1094```yaml theme={null}
978telemetry:1095telemetry:
983 deployment.environment.name: prod1100 deployment.environment.name: prod
984```1101```
985 1102
986Gateway отказывается запускаться, когда метка нарушает одно из этих правил, и ошибка запуска называет метку:1103Шлюз отказывается запускаться, когда метка нарушает одно из этих правил, и ошибка запуска называет метку:
987 1104
988* Имена используют только буквы, цифры, `.`, `_` и `-`1105* Имена используют только буквы, цифры, `.`, `_` и `-`
989* Имена не зарезервированы. Сравниваемые в любом регистре букв, зарезервированные имена — это всё, что начинается с `user.`, `enduser.` или `identity.`, плюс `service.name`, `service.version`, `claude.deployment_mode`, `host.arch`, `os.type`, `os.version` и `wsl.version`1106* Имена не зарезервированы. Сравниваемые в любом регистре букв, зарезервированные имена — это всё, что начинается с `user.`, `enduser.` или `identity.`, плюс `service.name`, `service.version`, `claude.deployment_mode`, `host.arch`, `os.type`, `os.version` и `wsl.version`
990* Значения — это непустой печатный ASCII без пробела и ни одного из `, ; = \ " %`1107* Значения — это непустой печатный ASCII без пробела и ни один из `, ; = \ " %`
991* Значения не более 255 символов, как их считает gateway после процентного кодирования, поэтому `/`, `:` и `@` каждый считаются как три1108* Значения не более 255 символов, как шлюз их считает после процентного кодирования, поэтому `/`, `:` и `@` каждый считаются как три
992* Значения — это текст, поэтому заключите в кавычки число, `true` или `false`1109* Значения — это текст, поэтому цитируйте число, `true` или `false`
993 1110
994Вам нужен Claude Code v2.1.281 или позже на сервере gateway для установки `telemetry.resource_attributes`. Более ранний gateway отказывается запускаться, когда находит ключ. Обновите каждую реплику перед добавлением ключа и удалите ключ перед откатом на более раннюю версию.1111Вам нужен Claude Code v2.1.281 или позже на сервере шлюза, чтобы установить `telemetry.resource_attributes`. Более ранний шлюз отказывается запускаться, когда находит ключ. Обновите каждую реплику перед добавлением ключа и удалите ключ перед откатом на более раннюю версию.
995 1112
996Сеансы терминала, подписанные через `/login`, получают метки как `OTEL_RESOURCE_ATTRIBUTES`, отправленные с другими [переменными телеметрии](#telemetry). Если вы установите `OTEL_RESOURCE_ATTRIBUTES` в блоке `env` политики, сеансы терминала, которым соответствует эта политика, получают это значение вместо метк. Claude Desktop получает метки от gateway наряду с `user.email` и другими атрибутами идентификации.1113Сеансы терминала, подписанные через `/login`, получают метки как `OTEL_RESOURCE_ATTRIBUTES`, отправленные с другими [переменными телеметрии](#telemetry). Если вы установите `OTEL_RESOURCE_ATTRIBUTES` в блоке `env` политики, сеансы терминала, которым соответствует эта политика, получают это значение вместо метрик. Claude Desktop получает метки от шлюза наряду с `user.email` и другими атрибутами идентификации.
997 1114
998Claude Code также копирует каждую метку на каждую точку данных метрики, поэтому вы можете фильтровать метрики по ней в backend, который не индексирует атрибуты ресурса. Чтобы отключить эту копию, см. [Контроль кардинальности метрик](/docs/ru/monitoring-usage#metrics-cardinality-control).1115Claude Code также копирует каждую метку на каждую точку данных метрики, поэтому вы можете фильтровать метрики по ней в бэкенде, который не индексирует атрибуты ресурса. Чтобы отключить эту копию, смотрите [Metrics cardinality control](/docs/ru/monitoring-usage#metrics-cardinality-control).
999 1116
1000<h4 id="export-directly-to-your-collector">1117<h4 id="export-directly-to-your-collector">
1001 Экспорт прямо на ваш сборщик1118 Экспорт прямо на ваш сборщик
1002</h4>1119</h4>
1003 1120
1004Чтобы иметь сеансы, подписанные через `/login`, отправлять телеметрию прямо на ваш сборщик вместо реле, установите `OTEL_EXPORTER_OTLP_ENDPOINT` на базовый URL `https://` сборщика в блоке `env` [управляемой политики](#managed). Claude Code добавляет `/v1/metrics`, `/v1/logs` или `/v1/traces` к URL, который вы устанавливаете, такой как `https://otel-collector.example.com:4318`, и экспортирует каждый сигнал туда по OTLP/HTTP. Требует Claude Code v2.1.265 или позже на машине каждого разработчика. Более ранние клиенты экспортируют через реле.1121Чтобы иметь сеансы, подписанные через `/login`, отправляющие телеметрию прямо на ваш сборщик вместо реле, установите `OTEL_EXPORTER_OTLP_ENDPOINT` на базовый URL `https://` вашего сборщика в блоке `env` [управляемой политики](#managed). Claude Code добавляет `/v1/metrics`, `/v1/logs` или `/v1/traces` к URL, который вы устанавливаете, такой как `https://otel-collector.example.com:4318`, и экспортирует каждый сигнал туда по OTLP/HTTP. Требует Claude Code v2.1.265 или позже на каждой машине разработчика. Более ранние клиенты экспортируют через реле.
1005 1122
1006Чтобы аутентифицироваться на сборщик, установите `OTEL_EXPORTER_OTLP_HEADERS` в том же блоке `env`. Сеансы никогда не отправляют токен сеанса gateway разработчика на сборщик, названный таким образом.1123Чтобы аутентифицироваться на сборщике, установите `OTEL_EXPORTER_OTLP_HEADERS` в том же блоке `env`. Сеансы никогда не отправляют токен сеанса шлюза разработчика на сборщик, названный таким образом.
1007 1124
1008Когда вы добавляете или изменяете эту конечную точку в политике, Claude Code просит каждого разработчика одобрить её в [диалоге одобрения безопасности](#managed) перед применением её в интерактивном сеансе.1125Когда вы добавляете или изменяете эту конечную точку в политике, Claude Code просит каждого разработчика одобрить её в [диалоге одобрения безопасности](#managed) перед применением в интерактивном сеансе.
1009 1126
1010Claude Code проверяет конечную точку перед экспортом сигнала прямо и сохраняет этот сигнал на реле, когда проверка не удаётся. Проверки включают:1127Claude Code проверяет конечную точку перед экспортом сигнала прямо и сохраняет этот сигнал на реле, когда проверка не удаётся. Проверки включают:
1011 1128
1012* Конечная точка поступает от самого gateway. Если вы устанавливаете ту же переменную в профиль MDM или локальный `managed-settings.json`, экспорты остаются на реле.1129* Конечная точка поступает от самого шлюза. Если вы установите ту же переменную в профиле MDM или локальном `managed-settings.json`, экспорты остаются на реле.
1013* URL использует `https://`, или `http://` на адрес loopback1130* URL использует `https://`, или `http://` на адрес обратной связи
1014* URL разрешается на путь, заканчивающийся на `/v1/<signal>`, без запроса или фрагмента. Claude Code строит этот путь сам из универсальной переменной. Он использует переменную для каждого сигнала, такую как `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`, как написано, поэтому включите полный путь туда.1131* URL разрешается на путь, заканчивающийся на `/v1/<signal>`, без запроса или фрагмента. Claude Code строит этот путь сам из общей переменной. Он использует переменную для каждого сигнала, такую как `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`, как написано, поэтому включите полный путь туда.
1015* URL не является собственным хостом gateway. Конечная точка, адресованная gateway, сохраняет путь реле и его токен сеанса.1132* URL не является собственным хостом шлюза. Конечная точка, адресованная шлюзу, сохраняет путь реле и его токен сеанса.
1016* Ни вы, ни разработчик не настроили [`otelHeadersHelper`](/docs/ru/settings-reference#otelheadershelper) ни в каком источнике параметров. С настроенным помощником, каждый сигнал остаётся на реле.1133* Ни вы, ни разработчик не настроили [`otelHeadersHelper`](/docs/ru/settings-reference#otelheadershelper) ни в каком источнике настроек. С настроенным помощником каждый сигнал остаётся на реле.
1017 1134
1018Конечная точка, которую вы называете, изменяет только то, куда идят экспорты. Вы всё ещё выбираете, какие сигналы экспортируют вообще с селекторами `OTEL_*_EXPORTER`.1135Конечная точка, которую вы называете, изменяет только то, куда идут экспорты. Вы всё ещё выбираете, какие сигналы экспортируются вообще, с селекторами `OTEL_*_EXPORTER`.
1019 1136
1020Конечная точка одна не включает экспорт, поэтому также установите переменные, которые это делают, если только gateway уже не отправляет их:1137Конечная точка одна не включает экспорт, поэтому также установите переменные, которые это делают, если шлюз их уже не отправляет:
1021 1138
1022* Если gateway уже [отправляет переменные телеметрии](#telemetry), они охватывают включение, селекторы и протокол, и ваша явная конечная точка переопределяет отправленное значение `<public_url>`. Установите селектор `OTEL_*_EXPORTER` на `otlp` сами только для сигнала, который ни одно назначение `forward_to` не включает.1139* Если шлюз уже [отправляет переменные телеметрии](#telemetry), они охватывают включение, селекторы и протокол, и ваша явная конечная точка переопределяет отправленное значение `<public_url>`. Установите селектор `OTEL_*_EXPORTER` на `otlp` сами только для сигнала, который ни одно назначение `forward_to` не включает.
1023* Если это не так, также установите `CLAUDE_CODE_ENABLE_TELEMETRY=1`, селекторы `OTEL_*_EXPORTER` и `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.1140* Если нет, также установите `CLAUDE_CODE_ENABLE_TELEMETRY=1`, селекторы `OTEL_*_EXPORTER` и `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.
1024 1141
1025Когда разработчик выходит, или подписывается на другой gateway, экспорты на сборщик останавливаются и Claude Code отбрасывает каждый оставшийся пакет, а не отправляет его.1142Когда разработчик выходит, или входит на другой шлюз, экспорты на сборщик останавливаются и Claude Code удаляет каждый оставшийся пакет, а не отправляет его.
1026 1143
1027<h4 id="when-a-destination-fails">1144<h4 id="when-a-destination-fails">
1028 Когда назначение не удаётся1145 Когда назначение не удаётся
1029</h4>1146</h4>
1030 1147
1031Gateway не буферизирует, не повторяет и не хранит телеметрию, поэтому он отбрасывает экспорт, который не достигает назначения, а не доставляет его поздно. Каждое назначение успешно или не удаётся само по себе, и экспортирующий клиент получает ответ об успехе в любом случае, поэтому неудачная доставка появляется только в журнале gateway.1148Шлюз не буферизирует, не повторяет и не хранит телеметрию, поэтому он удаляет экспорт, который не достигает назначения, а не доставляет его поздно. Каждое назначение успешно или не удаётся само по себе, и экспортирующий клиент получает ответ об успехе в любом случае, поэтому неудачная доставка появляется только в логе шлюза.
1032 1149
1033После пяти последовательных неудачных доставок на назначение, gateway приостанавливает переадресацию на него в 30-секундных растяжениях, регистрируя каждую паузу, пока доставка не удаётся. Любой ответ об ошибке, timeout или ошибка соединения считаются неудачной доставкой, кроме `400`, `413`, `415`, `422` и `431`, которые означают, что сборщик отклонил полезную нагрузку этого экспорта как неправильно сформированную или слишком большую.1150После пяти последовательных неудачных доставок на назначение шлюз приостанавливает пересылку на него в 30-секундных растяжениях, регистрируя каждую паузу, пока доставка не удаётся. Любой ответ об ошибке, тайм-аут или ошибка соединения считаются неудачной доставкой, кроме `400`, `413`, `415`, `422` и `431`, которые означают, что сборщик отклонил полезную нагрузку этого экспорта как неправильно сформированную или слишком большую.
1034 1151
1035Отклонённая полезная нагрузка ни продвигает, ни сбрасывает счётчик отказов: gateway продолжает переадресацию на назначение и регистрирует предупреждение, называющее его и статус, при первом отказе назначения и каждом сотом после.1152Отклонённая полезная нагрузка ни продвигает, ни сбрасывает счётчик отказов: шлюз продолжает пересылку на назначение и регистрирует предупреждение, называющее его и статус, при первом отказе назначения и каждом сотом после.
1036 1153
1037<h3 id="http-tuning">1154<h3 id="http-tuning">
1038 HTTP tuning1155 Настройка HTTP
1039</h3>1156</h3>
1040 1157
1041Четыре опциональных блока верхнего уровня, `access_control`, `limits`, `timeouts` и `rate_limits`, настраивают HTTP поверхность. Значения по умолчанию подходят для большинства развёртываний.1158Четыре опциональных блока верхнего уровня, `access_control`, `limits`, `timeouts` и `rate_limits`, настраивают HTTP поверхность. Значения по умолчанию подходят для большинства развёртываний.
1042 1159
1043| Блок | Ключ | По умолчанию | Описание |1160| Блок | Ключ | По умолчанию | Описание |
1044| - | - | - | - |1161| - | - | - | - |
1045| `access_control` | `allow_cidrs` / `deny_cidrs` | пусто | Входящее разрешение/запрет IP по адресу клиента, после разрешения `trusted_proxies`. `deny_cidrs` проверяется в первую очередь; клиент, который он соответствует, отклоняется, даже если `allow_cidrs` также соответствует. Если `allow_cidrs` не пусто, gateway по умолчанию отклоняет. `/healthz` и `/readyz` исключены из `allow_cidrs`. Когда доверенный прокси отправляет запись `X-Forwarded-For`, которая не является IP адресом, реальный клиент неизвестен и gateway регистрирует предупреждение один раз, называя что проверить. Где применяется либо список к запросу, он отклоняет его с `403` и причиной аудита `xff_unparseable`. Где ни один не применяется, он обслуживает запрос и использует собственный адрес прокси как IP клиента для ограничений скорости по IP и аудита. |1162| `access_control` | `allow_cidrs` / `deny_cidrs` | пусто | Входящий IP разрешить/запретить по адресу клиента, после разрешения `trusted_proxies`. `deny_cidrs` проверяется первым; клиент, которому он соответствует, отклоняется, даже если `allow_cidrs` также соответствует. Если `allow_cidrs` не пусто, шлюз по умолчанию отклоняет. `/healthz` и `/readyz` исключены из `allow_cidrs`. Когда доверенный прокси отправляет запись `X-Forwarded-For`, которая не является IP адресом, реальный клиент неизвестен и шлюз регистрирует предупреждение один раз, называя что проверить. Где применяется либо список, он отклоняет запрос с `403` и причиной аудита `xff_unparseable`. Где ни один не применяется, он обслуживает запрос и использует собственный адрес прокси как IP клиента для ограничений скорости на IP и аудита. |
1046| `limits` | `max_request_bytes` | 32 MiB | Максимальный входящий размер тела запроса; запросы большего размера получают `413` перед буферизацией тела. Повысьте для больших запросов файлов или изображений. |1163| `limits` | `max_request_bytes` | 32 MiB | Максимальный размер входящего тела запроса; запросы большего размера получают `413` перед буферизацией тела. Поднимите для больших запросов файлов или изображений. |
1047| `limits` | `max_request_header_bytes` | не установлено | Когда установлено, заголовки большего размера возвращают `431` |1164| `limits` | `max_request_header_bytes` | не установлено | Когда установлено, заголовки большего размера возвращают `431` |
1048| `limits` | `max_url_length` | не установлено | Когда установлено, слишком длинный URL возвращает `414` |1165| `limits` | `max_url_length` | не установлено | Когда установлено, слишком длинный URL возвращает `414` |
1049| `timeouts` | `upstream_ttfb_ms` | 120000 | Максимальное ожидание заголовков ответа upstream (время до первого байта). Тело ответа затем потоком без ограничения по стене часов. Применяется к прямому пути upstream Anthropic; для всех остальных поставщиков gateway ждёт до одного часа, пока не начнётся ответ. |1166| `timeouts` | `upstream_ttfb_ms` | 120000 | Максимальное ожидание заголовков ответа upstream (время до первого байта). Тело ответа затем потоком без ограничения по стене часов. Применяется к прямому пути upstream Anthropic; на каждом другом поставщике шлюз ждёт до одного часа, пока ответ не начнётся. |
1050| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Ограничение скорости по IP на неаутентифицированной конечной точке авторизации устройства. Повысьте для большой организации за общим исходящим IP или NAT. [Большие развёртывания](/docs/ru/claude-apps-gateway-deploy#large-rollouts) показывает, как его размер. Эти ограничения применяются только к потоку входа грантов устройств, а не к выводу `/v1/messages`. См. [Сопротивление перебору пользовательского кода](/docs/ru/claude-apps-gateway-deploy#user-code-brute-force-resistance). |1167| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Ограничение скорости на IP для неаутентифицированной конечной точки авторизации устройства. Поднимите для большой организации за общим исходящим IP или NAT. [Large rollouts](/docs/ru/claude-apps-gateway-deploy#large-rollouts) показывает, как его размер. Эти ограничения применяются только к потоку подписи устройства, а не к выводу `/v1/messages`. Смотрите [User-code brute-force resistance](/docs/ru/claude-apps-gateway-deploy#user-code-brute-force-resistance). |
1051| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Ограничение скорости по IP на отправки `user_code` в `/device`. Это то, что останавливает кого-то от угадывания кода другого разработчика. [Большие развёртывания](/docs/ru/claude-apps-gateway-deploy#large-rollouts) показывает, как далеко его повысить. |1168| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Ограничение скорости на IP для отправок `user_code` в `/device`. Это то, что останавливает кого-то от угадывания кода другого разработчика. [Large rollouts](/docs/ru/claude-apps-gateway-deploy#large-rollouts) показывает, как далеко его поднять. |
1052 1169
1053Если вы оставите оба списка `access_control` пустыми, что является значением по умолчанию, gateway обслуживает любой адрес клиента, поэтому только ваша сеть ограничивает, кто может его достичь. Это важно, потому что gateway может отправлять [управляемые параметры](#managed), которые запускают команды на машинах разработчиков.1170Если вы оставите оба списка `access_control` пустыми, что является значением по умолчанию, шлюз обслуживает любой адрес клиента, поэтому только ваша сеть ограничивает, кто может его достичь. Это важно, потому что шлюз может отправлять [управляемые настройки](#managed), которые запускают команды на машинах разработчиков.
1054 1171
1055Пока `allow_cidrs` пусто, gateway предупреждает в двух местах, без изменения того, как он отвечает на любой запрос:1172Пока `allow_cidrs` пусто, шлюз предупреждает в двух местах, не изменяя, как он отвечает на любой запрос:
1056 1173
1057* **При загрузке**: предупреждение в операционном журнале рекомендует разрешить только приватные диапазоны `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128` и `fc00::/7`, плюс любые другие внутренние диапазоны, из которых ваши разработчики подключаются. Если вы привязываете gateway к адресу loopback и не устанавливаете ни `trusted_proxies`, ни `public_url`, как при локальной разработке, предупреждение не появляется.1174* **При загрузке**: предупреждение в операционном логе рекомендует разрешить только частные диапазоны `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128` и `fc00::/7`, плюс любые другие внутренние диапазоны, из которых ваши разработчики подключаются. Если вы привязываете шлюз к адресу обратной связи и не устанавливаете ни `trusted_proxies`, ни `public_url`, как при локальной разработке, предупреждение не появляется.
1058* **При выполнении**: в первый раз, когда запрос поступает с адреса вне этих приватных диапазонов, gateway регистрирует предупреждение и выпускает событие аудита [`access.public_client`](/docs/ru/claude-apps-gateway-deploy#logs), несущее IP клиента. Оба срабатывают один раз за процесс. Link-local адреса, `169.254.0.0/16` и `fe80::/10`, не считаются публичными. Gateway отвечает на `/healthz` и `/readyz` перед этой проверкой, поэтому проверки здоровья из публичных диапазонов не запускают её.1175* **При выполнении**: первый раз, когда запрос поступает с адреса вне этих частных диапазонов, шлюз регистрирует предупреждение и излучает событие аудита [`access.public_client`](/docs/ru/claude-apps-gateway-deploy#logs), несущее IP клиента. Оба срабатывают один раз на процесс. Адреса link-local, `169.254.0.0/16` и `fe80::/10`, не считаются публичными. Шлюз отвечает на `/healthz` и `/readyz` перед этой проверкой, поэтому проверки здоровья из публичных диапазонов не вызывают её.
1059 1176
1060Оба сигнала используют адрес клиента, как его разрешает gateway. Если балансировщик нагрузки, port-forward или туннель передают трафик и не указаны в `listen.trusted_proxies`, gateway видит адрес реле, который обычно приватный, поэтому ни предупреждение при выполнении, ни список приватных разрешений не ловит трафик, передаваемый через него.1177Оба сигнала используют адрес клиента, как его разрешает шлюз. Если балансировщик нагрузки, переадресация портов или туннель передают трафик и не указаны в `listen.trusted_proxies`, шлюз видит адрес реле, который обычно частный, поэтому ни предупреждение при выполнении, ни список частных разрешений не ловит трафик, передаваемый через него.
1061 1178
1062За таким фронтенд, установите [`listen.trusted_proxies`](#listen) сначала, чтобы gateway видел реальные адреса клиентов, и держите gateway и всё впереди него недостижимыми из публичного интернета независимо.1179За таким фронтенд, установите [`listen.trusted_proxies`](#listen) сначала, чтобы шлюз видел реальные адреса клиентов, и сохраняйте шлюз и всё впереди него недоступным из публичного интернета независимо.
1063 1180
1064<h3 id="load_test_mode">1181<h3 id="load_test_mode">
1065 `load_test_mode`1182 `load_test_mode`
1066</h3>1183</h3>
1067 1184
1068Блок `load_test_mode` позволяет вам нагрузочно тестировать gateway без вызова поставщика модели. Пока он включён, gateway строит и подписывает каждый запрос поставщика как обычно, отбрасывает его вместо отправки и потоком консервированный ответ обратно через его нормальный путь ответа. Ответ — это текст-заполнитель, который начинается с предложения, говорящего, что это консервированный.1185Блок `load_test_mode` позволяет вам нагрузочное тестирование шлюза без вызова поставщика модели. Пока он включён, шлюз строит и подписывает каждый запрос поставщика как обычно, отклоняет его вместо отправки и потоком консервированный ответ обратно через его нормальный путь ответа. Ответ — это текст-заполнитель, который начинается с предложения, говорящего, что это консервированный.
1069 1186
1070Требует Claude Code v2.1.282 или позже на сервере gateway. Более ранние версии отказываются запускаться, когда ключ установлен, поэтому обновите каждую реплику перед добавлением блока и удалите его перед откатом.1187Требует Claude Code v2.1.282 или позже на сервере шлюза. Более ранний шлюз отказывается запускаться, когда находит ключ. Обновите каждую реплику перед добавлением блока и удалите блок перед откатом.
1071 1188
1072Пример ниже включает режим с значениями по умолчанию, ответ из примерно 750 выходных токенов, потоком в течение примерно 10 секунд:1189Пример ниже включает режим с значениями по умолчанию, ответ примерно 750 токенов текста, потоком в течение примерно 10 секунд:
1073 1190
1074```yaml theme={null}1191```yaml theme={null}
1075load_test_mode:1192load_test_mode:
1076 enabled: true1193 enabled: true
1077 reply_tokens: 750 # примерно сколько токенов текста несёт каждый консервированный ответ1194 reply_tokens: 750 # roughly how many tokens of text each canned reply carries
1078 reply_seconds: 9.5 # как долго потоком ответ занимает1195 reply_seconds: 9.5 # how long a streamed reply takes
1079```1196```
1080 1197
1081| Поле | Обязательно | Описание |1198| Поле | Обязательно | Описание |
1082| - | - | - |1199| - | - | - |
1083| `enabled` | Да | `true` включает режим. `false` сохраняет ваши числа в файле с режимом выключенным. Gateway отказывается запускаться, если блок присутствует без него. |1200| `enabled` | Да | `true` включает режим. `false` сохраняет ваши числа в файле с выключенным режимом. Шлюз отказывается запускаться, если блок присутствует без него. |
1084| `reply_tokens` | Нет | По умолчанию `750`. Примерно сколько токенов текста несёт каждый консервированный ответ, целое число от 1 до 100000. |1201| `reply_tokens` | Нет | По умолчанию `750`. Примерно сколько токенов текста несёт каждый консервированный ответ, целое число от 1 до 100000. |
1085| `reply_seconds` | Нет | По умолчанию `9.5`. Как долго потоком ответ занимает, от 0 до 600. `0` отправляет весь ответ сразу. Ответ на запрос без потока всегда приходит сразу. |1202| `reply_seconds` | Нет | По умолчанию `9.5`. Как долго потоком идёт ответ, от 0 до 600. `0` отправляет весь ответ сразу. Ответ на запрос без потока всегда приходит сразу. |
1086 1203
1087Нагрузочный тест в этом режиме охватывает gateway, ваш Postgres и всё впереди gateway. Он не охватывает ограничения поставщика, скорость или сетевой путь.1204Нагрузочное тестирование в этом режиме охватывает шлюз, ваш Postgres и всё впереди шлюза. Это не охватывает ограничения, скорость или сетевой путь поставщика.
1088 1205
1089Ни один запрос модели не отправляется поставщику, поэтому CPU реплики на запрос — это оценка и читает ниже, чем производство, которое также шифрует свой трафик поставщику. Подтвердите количество реплик с небольшим пилотом против реального поставщика. До v2.1.283 оценка читает намного ниже.1206Никакой запрос модели не отправляется поставщику, поэтому CPU реплики на запрос — это оценка и читается ниже, чем производство, которое также шифрует свой трафик поставщику. Подтвердите количество реплик с небольшим пилотом против реального поставщика. До v2.1.283 оценка читается намного ниже.
1090 1207
1091Пока режим включён, запрос может нести заголовок `x-load-test-user`, содержащий целое число до семи цифр. Gateway считает каждое число отдельным разработчиком с электронной почтой и группами разработчика, чей токен пришёл с запросом.1208Пока режим включён, запрос может нести заголовок `x-load-test-user`, содержащий целое число до семи цифр. Шлюз считает каждое число отдельным разработчиком, с электронной почтой и группами разработчика, чей токен пришёл с запросом.
1092 1209
1093Дайте развёртыванию нагрузочного теста свою собственную пустую базу данных, потому что gateway отказывается запускаться с режимом включённым против базы данных, в которой любой разработчик уже потратил что-то.1210Дайте развёртыванию нагрузочного тестирования свою собственную пустую базу данных, потому что шлюз отказывается запускаться с включённым режимом против базы данных, в которой какой-либо разработчик уже потратил что-либо.
1094 1211
1095<Warning>1212<Warning>
1096 Никогда не включайте это для gateway, который используют разработчики. Каждый запрос получает консервированный ответ и ни одна модель не вызывается. Gateway регистрирует предупреждение `load_test_mode is on` при загрузке и отмечает каждое событие аудита `inference` [audit event](/docs/ru/claude-apps-gateway-deploy#logs) с `load_test: true` пока режим включён.1213 Никогда не включайте это для шлюза, который используют разработчики. Каждый запрос получает консервированный ответ и ни одна модель не вызывается. Шлюз регистрирует предупреждение `load_test_mode is on` при загрузке и отмечает каждое событие аудита `inference` [audit event](/docs/ru/claude-apps-gateway-deploy#logs) с `load_test: true` пока режим включён.
1097</Warning>1214</Warning>
1098 1215
1099<h2 id="complete-example">1216<h2 id="complete-example">
1148 postgres_url: ${GATEWAY_POSTGRES_URL}1265 postgres_url: ${GATEWAY_POSTGRES_URL}
1149 # max_connections: 51266 # max_connections: 5
1150 # connect_timeout_seconds: 51267 # connect_timeout_seconds: 5
1268 # readiness_grace_seconds: 300 # продолжайте проходить проверку готовности через отказ базы данных
1151 1269
1152# Включает /v1/organizations/spend_limits (зеркалирует Admin API Anthropic)1270# Включает /v1/organizations/spend_limits (зеркалирует Admin API Anthropic)
1153# и принудительное соблюдение лимитов расходов на разработчика на /v1/messages. Опустите для отключения.1271# и принудительное соблюдение лимитов расходов на разработчика на /v1/messages. Опустите для отключения.
1269 1387
1270`parentSettingsBehavior: "merge"` сохраняет доставку Claude Desktop списка разрешённых исходящих соединений в его встроенные сеансы Claude Code; [Доставка политики в сеансы Claude Desktop](/docs/ru/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) объясняет механизм и где должно находиться согласие.1388`parentSettingsBehavior: "merge"` сохраняет доставку Claude Desktop списка разрешённых исходящих соединений в его встроенные сеансы Claude Code; [Доставка политики в сеансы Claude Desktop](/docs/ru/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) объясняет механизм и где должно находиться согласие.
1271 1389
1390Чтобы помешать разработчикам обойти gateway с помощью переменной облачного провайдера или собственного `ANTHROPIC_BASE_URL`, добавьте `"allowedProviders": ["gateway"]` в тот же файл. Claude Code затем отказывает в каждом сеансе на машине, который не настроен для Cloud gateway, и допускает gateway только когда это тот, который называет `forceLoginGatewayUrl`, или тот, чей URL файл устанавливает в блоке `env` как `ANTHROPIC_BASE_URL`. `claude gateway` отказывается запускаться на машине, которая устанавливает список, поэтому держите ключ отключённым на хосте gateway. См. запись [`allowedProviders`](/docs/ru/settings-reference#allowedproviders) в справочнике параметров. Требуется Claude Code v2.1.285 или позже.
1391
1272Развёртывайте файл `managed-settings.json` на каждое устройство, обычно через вашу платформу MDM. Путь файла отличается по платформе. См. [где каждый механизм хранит политику](/docs/ru/managed-settings#where-each-mechanism-stores-the-policy).1392Развёртывайте файл `managed-settings.json` на каждое устройство, обычно через вашу платформу MDM. Путь файла отличается по платформе. См. [где каждый механизм хранит политику](/docs/ru/managed-settings#where-each-mechanism-stores-the-policy).
1273 1393
1274По умолчанию политика реестра в Windows или управляемые предпочтения plist в macOS заменяют файл `managed-settings.json` вместо слияния с ним, за исключением [ключей исключения и проверок между источниками выше](#precedence-with-other-managed-sources). Все три ключа в этом фрагменте следуют правилу источника с наивысшим приоритетом, поэтому парки, которые доставляют политику через Group Policy или профили конфигурации, должны поместить все три в этот механизм вместо этого.1394По умолчанию политика реестра в Windows или управляемые предпочтения plist в macOS заменяют файл `managed-settings.json` вместо слияния с ним, за исключением [ключей исключения и проверок между источниками выше](#precedence-with-other-managed-sources). Все три ключа в этом фрагменте следуют правилу источника с наивысшим приоритетом, поэтому парки, которые доставляют политику через Group Policy или профили конфигурации, должны поместить все три в этот механизм вместо этого.
1275 1395
1276Для Claude Desktop установите ключ `bootstrapUrl` в собственной [управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop на `<listen.public_url>/user/bootstrap`. Поток входа и политика для каждой группы затем совпадают с CLI после того, как политика на стороне сервера даёт согласие ключом `desktop`; без этого согласия `/user/bootstrap` возвращает 404. См. [Наложение Claude Desktop](#claude-desktop-overlay) для серверной части.1396Для Claude Desktop установите ключ `bootstrapUrl` в собственной [управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop на `<listen.public_url>/user/bootstrap`. Поток входа и политика для каждой группы затем совпадают с CLI после того, как политика на стороне сервера даёт согласие ключом `desktop`; без этого согласия `/user/bootstrap` возвращает 404. См. [Наложение Claude Desktop](#claude-desktop-overlay) для серверной части.
1277 1397
1278Claude Code соблюдает [`forceLoginGatewayUrl`](/docs/ru/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/ru/settings-reference#gatewayinternalnetworks) и значение `"gateway"` [`forceLoginMethod`](/docs/ru/settings-reference#forceloginmethod) только из управляемого источника на машине: `managed-settings.json`, plist macOS или реестр HKLM Windows, или помощник политики. Разработчик, устанавливающий их в своём собственном `~/.claude/settings.json`, не имеет эффекта, и также не имеет эффекта установка их в полезной нагрузке gateway.1398Claude Code соблюдает [`forceLoginGatewayUrl`](/docs/ru/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/ru/settings-reference#gatewayinternalnetworks) и значение `"gateway"` [`forceLoginMethod`](/docs/ru/settings-reference#forceloginmethod) только из управляемого источника на машине: `managed-settings.json`, plist macOS или реестр HKLM Windows, или помощник политики. Установка их в собственном `~/.claude/settings.json` разработчика или в полезной нагрузке gateway не настраивает вход в gateway.
1399
1400Оставьте `forceLoginMethod` и `forceLoginOrgUUID` вне полезной нагрузки. Claude Code по-прежнему читает оба ключа из полезной нагрузки для проверки учётных данных при запуске, поэтому разработчик, который хранит выданные Anthropic учётные данные на машине, получает выход при запуске, описанный в разделе [Политика администратора требует вход в Cloud gateway](/docs/ru/errors#administrator-policy-requires-a-cloud-gateway-sign-in) даже после того, как они вошли.
1279 1401
1280<h2 id="related">1402<h2 id="related">
1281 Связанное1403 Связанное