Шлюз Claude apps предназначен для организаций, которые должны — или предпочитают — маршрутизировать вывод через своего поставщика облачных услуг, например для соответствия требованиям резидентности данных. Если у вас нет этого требования и вы хотите получить доступ к другим функциям, таким как подготовка SCIM или Claude Code в веб-версии и мобильных приложениях, Claude Enterprise может быть лучшим вариантом. Полное сравнение всех методов развертывания см. на странице доступности функций.Claude Code использует только один вход одновременно: вход через шлюз заменяет вход в Claude for Teams или Enterprise. Сессии шлюза не получают управляемые сервером настройки, заданные вами в консоли администратора claude.ai, поэтому передавайте их через блок
managed шлюза. Не включайте forceLoginMethod и forceLoginOrgUUID в этот блок, иначе некоторые сессии с выполненным входом будут завершаться при запуске. О том, чего лишаются сессии шлюза, см. в разделе Доступность и ограничения.claude, поэтому тот же исполняемый файл, который запускает Claude Code на ноутбуке, запускает сервер шлюза с помощью claude gateway --config gateway.yaml.
На этой странице рассматривается:
- Почему Claude apps gateway, что он добавляет по сравнению с самостоятельным запуском и когда что-то другое подходит лучше
- Быстрый старт с предварительными требованиями, который переводит шлюз от нуля к вошедшему разработчику
- Подключение разработчиков, включая установку URL шлюза через управляемые параметры
- Доступность и ограничения, охватывающие какие функции Claude Code работают через шлюз и что поддерживает сервер
Почему Claude apps gateway
Обзор шлюза охватывает, что делает шлюз и почему вы бы его запустили. Claude apps gateway — это собственный шлюз Anthropic, встроенный в двоичный файлclaude и протестированный вместе с каждым выпуском Claude Code, поэтому он пересылает значения anthropic-beta и поля запроса, которые отправляет Claude Code, без того, чтобы операторы поддерживали отдельный список разрешённых значений. После развёртывания он даёт вам:
- Учётные данные: ключ API вышестоящего уровня или учётные данные облака существуют только в вашей инфраструктуре. Разработчики аутентифицируются с помощью корпоративного SSO и получают краткосрочные токены-носители, поэтому отключение происходит в вашем IdP. Отключите пользователя, и его доступ к шлюзу истекает в течение времени жизни сеанса, по умолчанию один час.
- Контроль доступа: ваши группы IdP сопоставляются со списками разрешённых моделей, политиками управляемых настроек и вышестоящими сервисами. Шлюз обеспечивает доступ к модели на стороне сервера, отклоняя запросы для неразрешённых моделей, и выбирает политику управляемых настроек каждой группы, которую CLI применяет на уровне управляемых настроек. Разные команды получают разные модели, инструменты и разрешения, и разработчик не может переопределить то, что его политика блокирует.
- Доставка параметров: шлюз доставляет управляемые параметры подписанным клиентам сам, занимая место параметров, управляемых сервером из консоли администратора claude.ai.
- Телеметрия: каждое настроенное назначение получает метрики OpenTelemetry Protocol (OTLP) с подсчётом токенов, моделью, идентификацией пользователя и задержкой по умолчанию, с журналами и трассировками как дополнительные параметры для каждого назначения.
- Маршрутизация вышестоящего уровня: клиенты говорят API Anthropic Messages с шлюзом, и шлюз переводит для каждого вышестоящего уровня, будь то Amazon Bedrock, Claude Platform on AWS, Agent Platform Google Cloud, Microsoft Foundry или API Anthropic, с отказоустойчивостью между ними. Вы можете менять регионы, поставщиков или порядок отказоустойчивости без того, чтобы разработчики замечали или переконфигурировали.
Плоскость данных самого шлюза не отправляет ничего в инфраструктуру Anthropic, если API Anthropic не является настроенным вышестоящим уровнем. Вы контролируете, куда идут телеметрия, журналы аудита, управляемые параметры и идентификация IdP ваших разработчиков, и шлюз не отправляет ни одно из них в Anthropic. Для оставшегося трафика процесс CLI может отправлять и как его закрыть, см. Позиция соответствия.
Другие реализации шлюза
Если вы уже запускаете шлюз LLM или шлюз API, который соответствует вашим потребностям, продолжайте его использовать; Другие шлюзы LLM охватывает конфигурирование Claude Code против него. Справочник протокола шлюза документирует, что Claude Code ожидает от любого шлюза: конечные точки, которые он вызывает, заголовки и поля тела для пересылки, и что перестаёт работать, когда они удаляются. Работающий Claude apps gateway также служит собственной ссылкой на протокол вGET /protocol, которая описывает конечные точки, которые он предоставляет клиентам Claude Code: вход SSO, вывод, доставка управляемых параметров, обнаружение модели и телеметрия. Получите его с помощью curl https://claude-gateway.internal.example.com/protocol из любого развёрнутого шлюза, такого как тот, который производит быстрый старт ниже.
Критические изменения протокола объявляются заранее, но неопределённая обратная совместимость не гарантируется.
Токен входа шлюза идентифицирует разработчика, который подтвердил вход, а не программу, которая его использует. Claude Code выполняет вход без собственного идентификатора клиента или секрета, поэтому шлюз не может проверить, какая программа выполняет вход. Любой клиент может задать
User-Agent и другие поля запроса, поэтому используйте их для маршрутизации или метрик, а не как доказательство того, что запрос исходит от Claude Code.Быстрый старт
В этом руководстве по быстрому старту описан минимальный путь: зарегистрировать OAuth-клиент в вашем IdP, написатьgateway.yaml, запустить шлюз вместе с Postgres с помощью Docker Compose и проверить вход от начала до конца. В нём используется вышестоящий провайдер Amazon Bedrock; Claude Platform on AWS, Agent Platform от Google Cloud, Microsoft Foundry и Anthropic API поддерживаются в равной степени — достаточно заменить блок upstreams, как показано в справочнике по конфигурации. В итоге у вас будет шлюз, в который разработчик может войти с помощью /login.
Развёртывайте шлюз в частной сети. Claude Code подключается только к шлюзу с частным адресом. Это мера безопасности, поскольку доверенный шлюз может передавать настройки, которые выполняют команды на машинах разработчиков. Разместите шлюз за внутренним балансировщиком нагрузки или VPN и назначьте ему имя хоста, которое разрешается только в частные IP-адреса. Если ваша внутренняя сеть использует публичное адресное пространство IPv4, принадлежащее вашей организации, см. раздел Разрешение шлюза в принадлежащем вам публичном адресном пространстве.
Предварительные требования
Перед началом убедитесь, что у вас есть следующее:
Если к хосту шлюза применяется
HTTPS_PROXY или HTTP_PROXY, для входа также требуется либо прокси, имя хоста которого разрешается в частные адреса, либо хост шлюза в NO_PROXY на машинах разработчиков. Если на этих машинах также задан no_proxy, добавьте хост шлюза и туда, иначе запросы к модели по-прежнему будут идти через прокси.
Шаги
1
Зарегистрируйте OAuth-клиент в вашем IdP
Сначала определитесь с именем хоста шлюза, поскольку URI перенаправления должен ему соответствовать. Создайте новое веб-приложение OIDC и задайте URI перенаправления
https://claude-gateway.<your-domain>/oauth/callback, где хост совпадает со значением, которое вы зададите в listen.public_url на шаге 3. Запишите client_id и client_secret. Инструкции для отдельных IdP приведены в разделе Настройка поставщика удостоверений.2
Подготовьте базу данных PostgreSQL
Используйте PostgreSQL 11 или новее. Самого маленького управляемого тарифа достаточно. Шлюз сам выполняет миграции схемы при запуске, поэтому роли базы данных нужны права на создание и изменение таблиц; см.
store.3
Напишите gateway.yaml
Секреты считываются через подстановку Этой конфигурации достаточно для работающего цикла входа с каталогом моделей Amazon Bedrock по умолчанию. Когда всё заработает, добавьте RBAC для отдельных групп и управляемые настройки через
${ENV_VAR}, поэтому сам файл можно хранить в системе контроля версий. Используйте в public_url имя хоста, которое разрешается в частный IP-адрес в вашей сети, поскольку /login отклоняет публичные адреса. Минимальная конфигурация состоит из пяти разделов, а у всех остальных полей есть значения по умолчанию:gateway.yaml
managed.policies, рассылку телеметрии через telemetry, а также переключение между несколькими вышестоящими провайдерами при отказе, ARN выделенной пропускной способности или регионы за пределами США через models.Вышестоящему провайдеру Amazon Bedrock нужен субъект AWS с разрешениями
bedrock:InvokeModel и bedrock:InvokeModelWithResponseStream как на ARN inference-profile/us.anthropic.*, так и на базовые ARN foundation-model/anthropic.*. Кроме того, для аккаунта должна быть отправлена одноразовая форма Anthropic с описанием сценария использования из раздела Model catalog консоли Bedrock.Предоставляйте учётные данные через IRSA в EKS, роль задачи ECS или профиль экземпляра EC2, а не через статические ключи. В справочнике по upstreams приведены полные сведения об IAM, матрица учётных данных для разных облаков и блоки auth для других провайдеров.4
Запустите шлюз
Соберите образ контейнера на основе бинарного файла Шлюз — это один бинарный файл Linux, который считывает конфигурацию, подключается к Postgres и применяет миграции схемы, выполняет обнаружение OIDC для вашего IdP, создаёт клиенты вышестоящих провайдеров и начинает прослушивание.Запуск работает по принципу fail-closed в отношении конфигурации, подключения к Postgres, обнаружения OIDC и создания клиентов вышестоящих провайдеров: при сбое любого из этих этапов шлюз отказывается запускаться. Если что-либо из этого недоступно или неправильно настроено, шлюз завершает работу с ошибкой, а не обслуживает трафик в деградированном состоянии.Успешный запуск не проверяет путь инференса, поскольку учётные данные экземпляра Amazon Bedrock и Agent Platform от Google Cloud разрешаются при первом запросе, а не при запуске.Следите за последовательностью запуска в stderr. По умолчанию строки лога имеют формат Шлюз также записывает в лог предупреждение о том, что
claude, отвечающий требованиям к образу, и запустите его вместе с Postgres. В файле Compose образ указан как registry.example.com/claude-gateway:2.1.198; подставьте собственный реестр и тег образа:docker-compose.yaml
[gateway] <timestamp> <level> <message>, а между строками миграций и строкой о начале прослушивания выводится баннер запуска (ниже он опущен). События аудита — однострочный JSON с полем evt. Для новой базы данных выводится по одной строке migration N applied на каждую миграцию схемы; для уже мигрированной базы такие строки не выводятся. Вы должны увидеть по порядку:access_control.allow_cidrs пуст. Здесь это ожидаемо, поскольку до тех пор, пока вы не зададите список разрешённых адресов, ничто не ограничивает, какие клиентские адреса обслуживает шлюз. Рекомендуемые диапазоны приведены в справочнике по access_control.Если запуск завершается до строки claude gateway listening on, последняя строка stderr указывает на проблему:- недоступный Postgres
- роль Postgres без права на DDL
- недоступный или недействительный документ обнаружения OIDC
- нарушение схемы конфигурации с путём к проблемному полю
claude gateway --config gateway.yaml. Задайте в public_url origin ingress и привяжите listen к loopback-адресу или внутреннему адресу кластера.5
Проверьте аутентификацию
Три проверки подтверждают, что шлюз может аутентифицировать реального пользователя, прежде чем вы предоставите его разработчику.В примерах используется публичный URL шлюза; для локальной конфигурации Compose без ingress подставьте Ответ содержит дополнительные поля, например Наконец, проверьте браузерную часть: откройте
http://localhost:8080 в первых двух проверках. Третья проверка открывает verification_uri_complete, который формируется из public_url, поэтому для локального Compose задайте public_url: http://localhost:8080 в gateway.yaml и добавьте http://localhost:8080/oauth/callback в качестве второго URI перенаправления для OAuth-клиента из шага 1, поскольку шлюз формирует redirect_uri для IdP из public_url. После этого ссылка проверки откроется в вашем локальном браузере.В Windows PowerShell используйте curl.exe; просто curl — это псевдоним Invoke-WebRequest, который не принимает эти флаги.Сначала получите документ обнаружения — это подтверждает, что шлюз работает, конфигурация корректна и все проверки при запуске пройдены:response_types_supported и scopes_supported.Затем запросите авторизацию устройства — это подтверждает, что процесс входа с устройства работает, а Postgres доступен для чтения и записи:verification_uri_complete в браузере и подтвердите код. Вы должны быть перенаправлены на страницу входа вашего IdP, а после входа вернуться на шлюз с подтверждением успешного входа.Используйте первую неудачную проверку, чтобы локализовать проблему:- Первая проверка не проходит: запуск не завершился; проверьте stderr
- Вторая проверка не проходит: Postgres недоступен со шлюза или роль не может выполнять запись; проверьте строку подключения и права
- Третья проверка не доходит до IdP: убедитесь, что URI перенаправления в IdP в точности совпадает с
https://<gateway>/oauth/callback - Третья проверка доходит до IdP, но возвращается с ошибкой: прочитайте журнал аудита шлюза, в котором каждое отклонение аутентификации записывается с указанием причины, например
email domain not allowed
6
Выполните вход для разработчика
Этот последний шаг выполняется на машине разработчика, а не на сервере. В файле управляемых настроек этой машины задайте для
forceLoginMethod значение "gateway", для forceLoginGatewayUrl — public_url вашего шлюза, а для parentSettingsBehavior — "merge", затем выполните /login, нажмите Enter на экране Cloud gateway и завершите вход в браузере. В разделе Задание URL шлюза ниже описаны эти три ключа и их распространение на все машины разработчиков.Подключение разработчиков
Разработчики подключаются со своих собственных ноутбуков с помощью одного входа в браузере, используя свою корпоративную рабочую учётную запись. Им не нужна учётная запись claude.ai, API-ключ или подписка, потому что запросы к модели идут через шлюз с использованием вышестоящих учётных данных организации. Подключение управляется управляемыми настройками на стороне клиента, которые вы распространяете через MDM, и этот раздел описывает то, что настраивает администратор. При первом подключении CLI снимает отпечаток листового TLS-сертификата шлюза и закрепляет его для каждого имени хоста. Он снова проверяет этот закреплённый отпечаток при входе, при фоновом обновлении сессии и при получении управляемых настроек, тогда как запросы инференса используют стандартную проверку TLS без закрепления. Запросы, маршрутизируемые через HTTPS-прокси, пропускают проверку закреплённого отпечатка, поэтому добавьте хост шлюза вNO_PROXY, чтобы они шли напрямую.
Опубликуйте ожидаемый отпечаток SHA-256 вместе с URL шлюза, чтобы разработчикам было с чем сравнивать. Запрос /login показывает первые 16 символов отпечатка в виде строчных шестнадцатеричных символов без двоеточий. Чтобы вывести полный отпечаток в этой форме из файла сертификата, выполните:
email, указывающее учётную запись, которая использовалась при входе. В этом случае разработчик подтверждает учётную запись до того, как Claude Code сохранит учётные данные. После подтверждённого входа /status показывает эту учётную запись.
Для подтверждения требуется Claude Code v2.1.275 или новее на машине разработчика; клиент более ранней версии игнорирует это поле. Сервер шлюза в бинарном файле claude не возвращает это поле, поэтому входы через него завершаются без подтверждения.
После входа разработчика средство выбора модели показывает модели из его списка разрешённых моделей availableModels. Управляемые настройки применяются при запуске и обновляются ежечасно, а телеметрия направляется в ваш сборщик.
Сессии обновляются в фоновом режиме до истечения ttl_hours. Если обновление не удаётся после отзыва доступа в IdP, Claude Code предлагает разработчику войти снова.
Задание URL шлюза
Три ключа помещаются в файл управляемых настроек для соответствующей ОС, который вы развёртываете через MDM или непосредственно на диск. Для машины без управляемых настроек см. вместо этого раздел Задание URL шлюза в пользовательских настройках.forceLoginMethod и forceLoginGatewayUrl открывают /login сразу на экране Cloud gateway с заполненным URL, а parentSettingsBehavior: "merge" позволяет Claude Desktop передавать список разрешённых исходящих соединений шлюза в запускаемые им сессии Claude Code, как описано в разделе Доставка политики в сессии Claude Desktop:
CLAUDE_CODE_USE_BEDROCK, вход в шлюз не нужен.
В средстве выбора способа входа нет варианта шлюза, а в управляемых настройках один forceLoginMethod без URL оставляет разработчика с сообщением “Contact your IT administrator”. Ключи входа должны находиться в файле, который вы распространяете на машины, а не в блоке managed.policies[].cli шлюза, который доходит только до уже подключённых клиентов.
Задание URL шлюза в пользовательских настройках
На машинах без управляемых настроек попросите каждого разработчика добавитьforceLoginMethod и forceLoginGatewayUrl в собственный файл пользовательских настроек ~/.claude/settings.json. Для этого требуется Claude Code v2.1.295 или новее на машине разработчика. В этом примере указан шлюз по адресу claude-gateway.internal.example.com:
/login в промпте Claude Code, экран Cloud gateway открывается с этим адресом, и разработчик нажимает Enter для подключения. Запрос отпечатка TLS при первом подключении по-прежнему появляется. Для ключей, заданных таким образом, действуют следующие ограничения:
- Только пользовательские настройки: Claude Code читает эти два ключа из
~/.claude/settings.json, а не из.claude/settings.jsonили.claude/settings.local.jsonпроекта. - Управляемые настройки их отключают: как только настройки администратора попадают на машину через файл управляемых настроек, plist в macOS или политику HKLM в Windows либо через вспомогательную программу политики, Claude Code игнорирует шлюз, указанный в пользовательских настройках.
Разрешение шлюза в принадлежащем вам публичном адресном пространстве
Некоторые организации нумеруют свою внутреннюю сеть из принадлежащего им публичного блока IPv4, например из собственного адресного пространства оператора связи или устаревшего/8, поэтому у их шлюза нет приватного адреса. Перечислите эти блоки в управляемой настройке gatewayInternalNetworks. Тогда /login принимает шлюз внутри перечисленного блока, если машина разработчика подключается к нему с адреса внутри того же блока. Для этого требуется Claude Code v2.1.268 или новее на машине разработчика; более ранние версии игнорируют ключ и применяют правило приватных адресов.
Добавьте ключ в тот же источник управляемых настроек, что и ключи входа: файл управляемых настроек, профиль MDM или политику реестра. Claude Code игнорирует его в пользовательских, проектных и управляемых с сервера настройках.
В этом примере объявлен один блок. Замените 203.0.113.0/24 своим блоком. Это диапазон для документации, и Claude Code такие диапазоны отклоняет.
/login до обращения к какому-либо шлюзу:
- Каждая запись — это блок IPv4, записанный как его первый адрес и префикс от
/8до/32. - Список содержит не более четырёх блоков, и никакие два из них не перекрываются.
- Ни один блок не перекрывает приватное адресное пространство:
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.0/8,169.254.0.0/16и100.64.0.0/10./loginи без этого ключа принимает шлюз в этих диапазонах. - Ни один блок не перекрывает пространство, которое никогда не бывает сетью организации:
198.18.0.0/15и192.0.0.0/24, которые клиенты VPN и NAT64 используют как локальные адреса; диапазоны для документации192.0.2.0/24,198.51.100.0/24и203.0.113.0/24; и зарезервированные диапазоны0.0.0.0/8,192.88.99.0/24и многоадресный224.0.0.0/4. Вы можете объявлять блоки внутри240.0.0.0/4, который некоторые крупные сети используют как внутреннее одноадресное пространство.
managed-settings.json и его дополнительных файлов managed-settings.d/ объединяются в один список, и эти ограничения применяются к объединённому списку. Чтобы сузить блок, замените его запись, а не добавляйте вторую, перекрывающуюся, в дополнительный файл; /login отклоняет перекрытие.
Если запись нарушает правило или значение не является списком строк, Claude Code отклоняет любой новый вход в шлюз на этой машине и называет проблему в сообщении. Вход в шлюз с приватным адресом тоже не удаётся, а существующие входы продолжают работать. Проверьте значение на одной машине перед развёртыванием. Claude Code также указывает значение неправильного типа среди недопустимых управляемых настроек, о которых он сообщает.
При корректном списке /login применяет три проверки к шлюзу, адрес которого находится внутри перечисленного блока:
- Каждый адрес, в который разрешается имя хоста шлюза, находится внутри этого одного блока. Claude Code отклоняет имя, у которого есть записи и вне блока, включая приватные адреса и адреса IPv6.
- Машина разработчика подключается изнутри того же блока. Claude Code отклоняет машину за NAT, внутри контейнера или WSL2, либо в VPN, пул адресов которой находится вне блока, и называет адрес, с которого подключилась машина.
- Подключение прямое. Если
HTTPS_PROXYприменяется к хосту шлюза,/loginотклоняет вход и называет записьNO_PROXY, которую нужно добавить.
Доставка политики в сессии Claude Desktop
Claude Desktop запускает свои вкладки во встроенных сессиях Claude Code и отправляет их запросы к модели через шлюз. Он передаёт политику каждой из этих сессий, сформированную из конфигурации, которую шлюз предоставляет ему по адресу/user/bootstrap. Эта конфигурация содержит список разрешённых моделей, отключённые инструменты и список разрешённых адресов для исходящего трафика, полученные из блока cli или code сопоставленной политики, а также оверлей desktop.
Другие ключи блока, такие как хуки, env и правила разрешений с ограниченной областью действия вроде Bash(npm *), доходят до клиентов, которые входят через /login. Если они находятся в code, они также доходят до сессии вкладки Code, когда выполняются условия для вкладки Code. До сессий Cowork и Chat они не доходят. Claude Desktop читает URL шлюза из своей собственной управляемой конфигурации и выполняет вход по собственной схеме, независимо от ключей forceLoginMethod и forceLoginGatewayUrl из раздела Задание URL шлюза.
Настройки, переданные запускающим процессом, являются родительскими настройками. Claude Code игнорирует родительские настройки на любой машине, где есть управляемый источник, развёрнутый администратором, если только источник, доставляющий политику, не задаёт parentSettingsBehavior: "merge".
Каким машинам нужно явное включение
Оно нужно машинам, на которых запускается только Claude Desktop. Claude Desktop сам применяет список моделей и список отключённых инструментов к встроенным сессиям, но список разрешённых исходящих соединений доходит до них только как родительские настройки — в виде правил доменовWebFetch и сетевых правил песочницы. Без явного включения эти сессии работают без ограничения исходящих соединений, и ничто вас об этом не предупредит. Шлюз по-прежнему отклоняет запросы инференса к моделям, которые политика не предоставляет.
Список разрешённых маркетплейсов плагинов также доходит до встроенных сессий только как родительские настройки. Когда вы отключаете добавляемые пользователями маркетплейсы плагинов в управляемой конфигурации Claude Desktop, Claude Desktop 2.16120.0 или новее скрывает маркетплейсы, которые ваша организация не предоставила, и отклоняет установку из них. Чтобы встроенные сессии не загружали плагины, уже установленные из этих маркетплейсов, он отправляет им список strictKnownMarketplaces как родительские настройки. Без явного включения Claude Code игнорирует этот список, и эти плагины продолжают загружаться.
Машинам, на которых разработчики входят через /login, оно не нужно; каждая сессия Claude Code получает свою политику от шлюза.
Парки машин, в которых управляемые настройки предоставляет policyHelper, не могут его использовать: Claude Code никогда не объединяет родительские настройки в таких парках, потому что читает управляемые настройки только из вывода помощника.
Явное включение
Разверните фрагмент управляемых настроек из раздела Задание URL шлюза, продублируйте его в любом клиентском источнике, который имеет приоритет над файлом, затем выполните проверку.1
Разверните явное включение в файле управляемых настроек
Фрагмент выше уже содержит
parentSettingsBehavior: "merge", поэтому файл, который вы распространяете на машины, включает его.2
Продублируйте фрагмент в любом источнике с приоритетом выше файла
Claude Code читает
parentSettingsBehavior только из выбранного источника. Добавление любого ключа политики в источник может сделать этот источник выбранным, поэтому в клиентском источнике дублируйте весь фрагмент, а не только parentSettingsBehavior. Раздел Управляемые настройки на стороне клиента описывает парки машин, которые доставляют политику через Group Policy или профили конфигурации. Plist управляемых предпочтений в macOS или политика HKLM в Windows имеют приоритет над файлом managed-settings.json, а удалённые управляемые настройки самого шлюза имеют приоритет над обоими, поэтому на машинах, которые входят в шлюз, также задайте parentSettingsBehavior в блоке cli или code политики шлюза.3
Проверьте, какой источник выбран
На машине, где запускается только Claude Desktop, вызовите
resolveSettings() из Agent SDK и прочитайте policyOrigin в записи managed его списка sources. Значение указывает выбранный клиентский источник — plist, hklm или file, — именно он должен содержать фрагмент.Сессии Cowork и Chat не получают политику шлюза, поэтому блок шлюза для них не является выбранным источником.Сессия вкладки Code получает её, когда настройки политики находятся в code и выполняются условия для вкладки Code. В этом случае настройки code шлюза являются выбранным источником для этой сессии.Ограничение родительских настроек
После развёртыванияparentSettingsBehavior: "merge" любой хост-процесс, который запускает Claude Code, может передавать родительские настройки — не только Claude Desktop, но и приложение на Agent SDK или расширение IDE.
Claude Code фильтрует родительские настройки по списку разрешённых ограничивающих ключей, но некоторые разрешённые ключи могут предоставлять доступ, а не ограничивать его. Если вы не зададите блокировки allowManaged*Only, разрешающие правила разрешений и списки разрешённых для песочницы, переданные хостом, продолжают применяться. Запрещающие правила и правила запроса подтверждения вашей политики в любом случае остаются в силе; они оцениваются раньше любого разрешающего правила.
Claude Code пересылает переданные родителем записи sandbox.credentials в урезанном виде:
- Записи
deny: пересылаются только со своимиpathилиnameи режимом. - Файловые записи с
mode: mask: пересылаются только как заглушки — как маска всего файла с пустым спискомinjectHosts, поэтому прокси ни на одной платформе не подставляет реальное значение для записи, переданной родителем. Все поля структурированного маскирования также отбрасываются, поэтому переданный родителем шаблон извлечения не может вытеснить более строгую маску, которую другой источник задаёт для того же пути. - Записи
envVarsсmode: mask: не пересылаются.deny— единственное ограничение, которое родительский канал может выразить через записиenvVars. awsPairsиsigv4: пересылаются только как ограничения. Изsigv4сохраняются только значенияdeny, а родитель, который вообще определяет блокsigv4, фиксирует все три формы запросов —streaming,presignedиsigv4a— в значенииdeny. ПараawsPairsникогда не пересылается в форме, позволяющей переподписывать запросы; пара, называющая одну из стандартных переменных AWS, заменяется неактивной записью, которая сохраняет подавленным автоматическое сопоставлениеAWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYиAWS_SESSION_TOKEN.
Развёртывание блокировок
Чтобы родительские настройки были настолько близки к чисто ограничивающим, насколько позволяет фильтр, добавьте все пять блокировокallowManaged*Only и управляемые ими списки разрешённых в те же источники, что и явное включение объединения:
cli или code политики и оставьте этот файл развёрнутым, потому что машины, которые никогда не подключаются, получают свою политику только из файла.
Поведение блокировок в разных источниках
Установка одной блокировки не ограничивает остальные; каждый ключ описан в справочнике настроек. Из административного источника с приоритетом ниже выигравшего обе блокировки песочницы по-прежнему применяются, аallowManagedPermissionRulesOnly по-прежнему блокирует переданные родителем разрешающие правила и additionalDirectories. В Claude Code v2.1.273 или новее блокировка MCP-серверов также применяется из источника ниже выигравшего, и пока она включена, управляемый список allowedMcpServers берётся из административного источника с наивысшим приоритетом, в котором он задан.
Блокировке хуков и действию allowManagedPermissionRulesOnly на собственные правила разработчика по умолчанию нужен выигравший источник; при явном включении объединения managedSourcesBehavior, описанном в разделе как Claude Code объединяет управляемые источники, Claude Code применяет для каждой блокировки самое строгое значение, заданное любым источником. В парках машин с policyHelper Claude Code читает блокировки только из вывода помощника.
Каждая блокировка заставляет Claude Code игнорировать собственные записи разработчика для этой настройки, поэтому добавляйте списки разрешённых вашей организации рядом с блокировками:
- Сетевые домены: блокировка с пустым управляемым списком доменов блокирует весь исходящий трафик из песочницы.
- MCP-серверы: блокировка без
allowedMcpServersни в одном административном источнике и ни в переданных родителем настройках загружает каждый сервер, который не заблокированdeniedMcpServers. - Пути чтения: записи
allowReadлишь повторно разрешают пути внутри областейdenyRead, поэтому используйте их вместе с управляемымdenyRead.
Настройки, на которые блокировки не распространяются
Следующие настройки от родителя проходят фильтр даже при всех пяти установленных блокировках:forceLoginOrgUUID: Claude Code учитывает значение от родителя, если применяемые им управляемые настройки не задают UUID организации. Вход в шлюз этот ключ не проверяет. UUID организации в управляемых настройках, которые применяет Claude Code, блокирует значение родителя, и именно его применяет Claude Code. Если ваш парк машин закрепляет организацию Anthropic, см. раздел Какой управляемый источник предоставляет ключи входа, чтобы узнать, где задаватьforceLoginOrgUUID.allowedMcpServers: Claude Code учитывает список разрешённых от родителя, если не действует ни один административный список.allowManagedMcpServersOnlyего не блокирует, потому что блокировка применяет в качестве управляемого значения тот список, который выигрывает, включая список от родителя, если ни один административный источник не предоставляет список. Список в административном источнике с наивысшим приоритетом блокирует список родителя, и именно его применяет Claude Code, поэтому задайтеallowedMcpServersтам, рядом с блокировкой. До v2.1.223 значение любого из этих ключей в любом административном источнике блокировало значение родителя.availableModels: Claude Code учитывает список моделей от родителя, если выигравший управляемый источник его не задаёт. Если ваш парк машин ограничивает модели, задайтеavailableModelsв выигравшем источнике.allowedProviders: Claude Code учитывает список разрешённых API-провайдеров от родителя, если выигравший управляемый источник его не задаёт. Если ваш парк машин ограничивает, какими API-провайдерами могут пользоваться разработчики, задайтеallowedProvidersв выигравшем источнике. Требуется Claude Code v2.1.285 или новее.strictKnownMarketplaces: Claude Code учитывает список разрешённых маркетплейсов плагинов от родителя, если выигравший управляемый источник его не задаёт. Claude Desktop 2.16120.0 или новее отправляет такой список, когда его управляемая конфигурация отключает добавляемые пользователями маркетплейсы плагинов. Если ваш парк машин ограничивает маркетплейсы, задайтеstrictKnownMarketplacesв выигравшем источнике. Требуется Claude Code v2.1.282 или новее.blockedMarketplaces: список запрещённых маркетплейсов от родителя проходит фильтр и добавляется к любому списку запрещённых, заданному управляемым источником, поскольку список запрещённых может только усиливать ограничения. Требуется Claude Code v2.1.282 или новее.strictPluginOnlyCustomization: этот ключ проходит фильтр независимо от блокировок и заставляет Claude Code игнорировать собственные настройки разработчика, включая защитные хуки. Ни одна блокировка его не блокирует.
managedSourcesBehavior равным "merge", проверьте, значение какого источника применяется для каждого вида ключей.
Как действуют ключи хуков и скиллов в родительских настройках
Ключи, которые ваше приложение передаёт в параметреmanagedSettings Agent SDK, являются родительскими настройками. На машине, где администратор развёртывает управляемые настройки, Claude Code игнорирует родительские настройки, если только администратор не разрешил встраивающему хосту добавлять политику.
Если вы передаёте disableAllHooks: true в managedSettings:
- Останавливаются: пользовательские, проектные и локальные хуки, а также хуки, объявленные во frontmatter агента или в параметре
settingsSDK. - Продолжают выполняться: функции обратного вызова хуков SDK вашего приложения и хуки администратора из управляемых настроек. Ваше приложение не может отключить хуки администратора.
Для передачи этих ключей в
managedSettings требуется Claude Code v2.1.309 или новее либо TypeScript Agent SDK v0.3.309 или новее.
Подключение Claude Desktop
Claude Desktop подключается к тому же шлюзу через другой ключ MDM: задайтеbootstrapUrl в управляемой конфигурации Claude Desktop равным <listen.public_url>/user/bootstrap и включите политику пользователя с помощью ключа desktop. Раздел Наложение Claude Desktop описывает обе части. Требуется Claude Code v2.1.203 или новее на сервере шлюза. После подключения Claude Desktop отправляет запросы к модели из каждой включённой вкладки через шлюз.
Claude Desktop выполняет вход разработчика через провайдера удостоверений шлюза с тем же шагом SSO в браузере, а затем получает свою конфигурацию от шлюза, а не от Anthropic. Доступ к моделям и политика подчиняются тем же правилам для групп, что и в CLI. Разработчик, который использует и CLI, и Claude Desktop, входит в каждый из них отдельно; сессия шлюза между ними не разделяется.
Конвейеры CI и удалённые машины
Схемы с сервисными токенами для автоматических конвейеров не существует. Вход в шлюз всегда использует поток авторизации устройства через браузер, поэтому задача CI, в которой нет разработчика для подтверждения входа, не может пройти аутентификацию; настройте такие задачи на прямую работу с вашим провайдером. РазвёртывайтеforceLoginMethod и forceLoginGatewayUrl на машинах разработчиков и не задавайте их на раннерах CI. На машине, управляемые настройки которой задают эти ключи, сессия, проходящая аутентификацию с помощью ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN или apiKeyHelper, завершается при запуске.
После входа разработчика каждая сессия Claude Code на этой машине использует сессию шлюза, включая неинтерактивные запуски claude -p и сессии, запущенные Agent SDK. Claude Code применяет политику шлюза к каждой из них.
Поток авторизации устройства разделяет опрашивающий CLI и подтверждающий браузер, поэтому удалённая машина для разработки без дисплея тоже работает: разработчик запускает /login по SSH на удалённой машине и открывает ссылку для проверки в браузере на своём ноутбуке.
Что применяется к разработчикам
Эти гарантии действуют для каждой сессии, в которую выполнен вход через/login. Встроенные сессии, которые запускает Claude Desktop, получают свою политику, как описано в разделе Доставка политики в сессии Claude Desktop, а пункт о телеметрии указывает, куда отправляются их экспорты.
- Доступ к моделям: запросы к моделям, которые политика не предоставляет, возвращают 400, а средство выбора
/modelфильтруется по списку разрешённых моделейavailableModelsполитики. Это относится и к модели, с которой сессия запускается до того, как разработчик выберет модель; см. Запуск сессий на модели, разрешённой политикой. - Назначение телеметрии: в сессиях, в которые выполнен вход через
/login, CLI отправляет свои экспорты OTLP/HTTP в шлюз, а не в локально заданныйOTEL_EXPORTER_OTLP_ENDPOINT, если только политика не указывает ваш сборщик в качестве эндпоинта. Шлюз пересылает полученные экспорты в назначения изtelemetry.forward_to.- Во встроенных сессиях, которые запускает Claude Desktop, CLI отправляет свои экспорты в настроенный
OTEL_EXPORTER_OTLP_ENDPOINT. CLI прикрепляет к этим экспортам токен сессии шлюза, только когда этот эндпоинт указывает на сам шлюз. - Если для сигнала не настроено назначение, шлюз принимает и отбрасывает его.
- Если вы уже собираете телеметрию Claude Code напрямую, добавьте свой сборщик как назначение
forward_toили укажите его в политике, чтобы обойтись без пересылки.
- Во встроенных сессиях, которые запускает Claude Desktop, CLI отправляет свои экспорты в настроенный
- Учётные данные: токен шлюза — единственные учётные данные сессии. Профили Anthropic и любой ранее выполненный вход в claude.ai игнорируются, пока выполнен вход в шлюз, поэтому разработчикам не нужно предварительно выходить из claude.ai. О настроенных учётных данных
ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKENилиapiKeyHelper, а также об API-ключе, сохранённом при более раннем входе в Claude Console, см. Administrator policy requires a Cloud gateway sign-in. - Управляемые настройки: заблокированные ключи нельзя переопределить локально. CLI применяет политику при запуске и применяет изменения при каждом ежечасном опросе, за исключением изменений, которые вступают в силу только при следующем запуске.
- Запуск при недоступном шлюзе: сессии с выполненным входом завершаются при запуске с ошибкой примерно через 10 секунд, а не запускаются без своих настроек.
- Запуск после того, как шлюз завершил сессию: см. Принудительный запуск с отказом в закрытом режиме, где описаны запуски, которые открываются без входа в шлюз, и те, которые завершаются, когда шлюз отвечает
401. - Отзыв доступа: сессия пользователя, отключённого в IdP, истекает в пределах
ttl_hours, когда следующее обновление не удаётся. - Выход:
/logoutудаляет учётные данные шлюза с машины разработчика.- Если документ обнаружения шлюза объявляет
revocation_endpointс той же схемой, хостом и портом, что и URL шлюза,/logoutтакже отправляет сохранённые токены на этот эндпоинт, чтобы шлюз мог завершить сессию на своей стороне. Запрос выполняется по принципу best effort, поэтому выход на машине разработчика завершается независимо от того, ответит ли эндпоинт. Для отзыва требуется Claude Code v2.1.275 или новее на машине разработчика. - Сервер шлюза в бинарном файле
claudeтакой эндпоинт не объявляет, поэтому выход из него завершает сессию только на машине разработчика. Чтобы принудительно завершить сессии на стороне сервера, см. Ротация секрета JWT.
- Если документ обнаружения шлюза объявляет
Что может видеть организация
Телеметрия использования передаёт в сборщик организации идентификатор разработчика, количество токенов, модель и задержку. Шлюз не логирует и не хранит содержимое промптов или ответов модели. Собирать ли более подробную телеметрию, например логи и трассировки, которые могут включать команды и пути к файлам, организация решает для каждого назначения отдельно.Доступность и ограничения
Таблица охватывает, какие функции Claude Code работают, когда разработчики подключаются через шлюз, и что сам сервер шлюза поддерживает. Где что-то не поддерживается, столбец Notes даёт альтернативу. Шлюз доставляет значенияanthropic-beta, которые CLI отправляет каждому вышестоящему уровню, поэтому операторы не поддерживают список разрешённых бета-значений. Для Amazon Bedrock, который игнорирует заголовок, шлюз перемещает значения в поле anthropic_beta тела запроса; другие вышестоящие уровни получают заголовок как отправленный.
Следующие шаги
Быстрый старт оставляет вас с минимальной конфигурацией, работающей под Docker Compose. Чтобы пойти дальше:- Расширьте
gateway.yamlза пределы минимальной конфигурации, например, чтобы добавить RBAC для каждой группы, многоуровневую отказоустойчивость или назначения телеметрии. Справочник конфигурации охватывает каждый параметр. - Перейдите от Compose к развёртыванию в производстве на Kubernetes или Cloud Run, правильно настройте ваш IdP и проверьте модель безопасности. Руководство по развёртыванию и операциям охватывает настройку для каждого IdP, требования к образу контейнера, зонды здоровья и устранение неполадок.
- Установите ограничения расходов для отдельных разработчиков или групп, чтобы неконтролируемая рабочая нагрузка не могла потребить всё ваше обязательство. Ограничения расходов охватывает API администратора и как работает применение.
- Для полного отработанного примера на AWS с ECS Fargate или EKS, Amazon RDS и Secrets Manager см. Развёртывание на AWS.
- Для полного отработанного примера на Google Cloud с Cloud Run, Cloud SQL и Secret Manager см. Развёртывание на Google Cloud.