SpyBara
Go Premium

claude-apps-gateway.md 2026-09-27 23:59 UTC to 2026-09-28 22:01 UTC

This page contains 2 additions and 2 deletions.

2026
Sat 12 03:02 Fri 18 23:58 Mon 21 22:59 Fri 25 23:58 Mon 28 22:59

Шлюз Claude apps для Amazon Bedrock, Claude Platform на AWS, Google Cloud и Microsoft Foundry

Запускайте Claude Code через Amazon Bedrock, Claude Platform на AWS, Google Cloud или Microsoft Foundry за самостоятельно размещаемым шлюзом с входом SSO, доступом к моделям по группам и телеметрией OTLP.

Claude apps gateway — это самостоятельно размещаемый сервис, который находится между клиентами Claude Code ваших разработчиков и вашим поставщиком модели. Разработчики входят с помощью вашего корпоративного поставщика удостоверений (IdP) вместо того, чтобы хранить ключи API или учетные данные облака. Шлюз хранит учетные данные вышестоящего уровня, обеспечивает доступ к модели и управляемые параметры по группам IdP и передает телеметрию использования в ваш собственный стек наблюдаемости.

Он включен в двоичный файл claude, поэтому тот же исполняемый файл, который запускает Claude Code на ноутбуке, запускает сервер шлюза с помощью claude gateway --config gateway.yaml.

На этой странице рассматривается:

Дополнительные страницы углубляются в детали. Справочник по конфигурации охватывает каждый параметр в файле YAML, который пишет быстрый старт, а руководство по развертыванию охватывает настройку для каждого IdP, развертывание Kubernetes и Cloud Run, а также операции.

Почему Claude apps gateway

Обзор шлюза охватывает, что делает шлюз и почему вы бы его запустили. Claude apps gateway — это собственный шлюз Anthropic, встроенный в двоичный файл claude и протестированный вместе с каждым выпуском Claude Code, поэтому он пересылает заголовки и поля запроса, которые отправляет 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, с отказоустойчивостью между ними. Вы можете менять регионы, поставщиков или порядок отказоустойчивости без того, чтобы разработчики замечали или переконфигурировали.
Диаграмма, показывающая клиентов Claude Code и вкладки Chat, Cowork и Code Claude Desktop, подключающихся по HTTPS с токенами-носителями к самостоятельно размещённому Claude apps gateway внутри вашей инфраструктуры, который входит пользователей в ваш IdP, хранит состояние аутентификации в PostgreSQL, передаёт телеметрию вашему сборщику OTLP и пересылает вывод в Amazon Bedrock, Claude Platform on AWS, Google Cloud, Microsoft Foundry или API Anthropic

Для того, какие функции Claude Code работают через шлюз и что сам сервер поддерживает, см. Доступность и ограничения ниже. Для решений, таких как стоимость, обход, запуск нескольких шлюзов и бессерверные платформы, см. руководство по развёртыванию.

Другие реализации шлюза

Если вы уже запускаете шлюз LLM или шлюз API, который соответствует вашим потребностям, продолжайте его использовать; Другие шлюзы LLM охватывает конфигурирование Claude Code против него.

Справочник протокола шлюза документирует, что Claude Code ожидает от любого шлюза: конечные точки, которые он вызывает, заголовки и поля тела для пересылки, и что перестаёт работать, когда они удаляются. Работающий Claude apps gateway также служит собственной ссылкой на протокол в GET /protocol, которая описывает конечные точки, которые он предоставляет клиентам Claude Code: вход SSO, вывод, доставка управляемых параметров, обнаружение модели и телеметрия. Получите его с помощью curl https://claude-gateway.internal.example.com/protocol из любого развёрнутого шлюза, такого как тот, который производит быстрый старт ниже.

Критические изменения протокола объявляются заранее, но неопределённая обратная совместимость не гарантируется.

Быстрый старт

Этот быстрый старт проходит минимальный путь: зарегистрируйте клиент OAuth в вашем IdP, напишите gateway.yaml, запустите шлюз вместе с Postgres с помощью Docker Compose и проверьте вход от конца к концу. Он использует вышестоящий уровень Amazon Bedrock; Claude Platform on AWS, Agent Platform Google Cloud, Microsoft Foundry и API Anthropic одинаково поддерживаются путём замены блока upstreams, как показано в справочнике конфигурации. В конце у вас есть шлюз, к которому разработчик может выполнить /login.

Предварительные требования

Имейте это на месте перед началом:

Вам нужно Детали
Claude Code v2.1.195 или позже Подкоманда claude gateway и поток входа шлюза поставляются в v2.1.195. Более ранние общедоступные сборки их не включают. Как машина, запускающая сервер шлюза, так и машина каждого разработчика должны быть на v2.1.195 или позже; запустите claude update, чтобы получить последний выпуск. Claude Platform on AWS upstream требует Claude Code v2.1.198 или позже на сервере шлюза.
Поставщик удостоверений OpenID Connect (OIDC) Okta, Microsoft Entra ID, Google Workspace, Keycloak или Dex, или любой другой совместимый с OIDC IdP, такой как PingFederate. Шлюз запускает стандартное обнаружение OIDC и поток кода авторизации против него. SAML и LDAP не поддерживаются.
PostgreSQL 14 или позже Поддерживает поток входа устройства, где обратный вызов браузера пишет, а опрашивающий CLI читает, плюс счётчики ограничения скорости. Любой управляемый Postgres работает, включая самый маленький уровень. Без настроенных ограничений расходов шлюз хранит несколько КБ краткосрочного состояния аутентификации; с ограничениями расходов он также содержит долговечные таблицы расходов, аудита и идентификации, которые должны быть скопированы. TLS через ?sslmode=require рекомендуется.
Вышестоящий уровень модели Учётные данные Amazon Bedrock, учётные данные Claude Platform on AWS, учётные данные Google Cloud, ресурс Microsoft Foundry или ключ API Anthropic. Поддерживаются несколько вышестоящих уровней с отказоустойчивостью.
HTTPS Шлюз должен быть доступен по https:// с ноутбуков разработчиков и из любого браузера, используемого для входа; шлюз служит страницей проверки устройства на том же слушателе. Либо предоставьте сертификат TLS через listen.tls, либо запустите позади завершающего TLS входа, и установите listen.public_url на внешнее происхождение в обоих случаях. Простое происхождение http:// принимается только когда хост шлюза является loopback: localhost, 127.0.0.1 или ::1.
Адрес частной сети При /login Claude Code требует, чтобы имя хоста или IP-адрес шлюза разрешались только в частные адреса: RFC 1918, link-local, CGNAT 100.64.0.0/10, IPv6 ULA fc00::/7 или loopback. Для шлюза, который вы размещаете, любой общедоступный адрес вне блока, который вы объявляете, отклоняется; см. модель угроз в руководстве развёртывания. Если машины разработчиков маршрутизируют HTTPS через корпоративный прокси, вход также требует, чтобы хост прокси разрешался в частные адреса; если это не так, добавьте хост шлюза в NO_PROXY, чтобы CLI подключался напрямую. Если ваша внутренняя сеть пронумерована из общедоступного пространства IPv4, которым владеет ваша организация, объявите эти блоки, чтобы /login принял шлюз там.
Среда выполнения Linux Сервер шлюза работает только на собственном двоичном файле Linux. macOS работает для локальной разработки. Windows не поддерживается как платформа сервера.

Шаги

1

Зарегистрируйте клиент OAuth в вашем IdP

Сначала решите имя хоста шлюза, потому что URI перенаправления должен ему соответствовать. Создайте новое веб-приложение OIDC и установите URI перенаправления на https://claude-gateway.<your-domain>/oauth/callback, где хост — это то же значение, которое вы установили как listen.public_url на шаге 3. Запишите client_id и client_secret. Инструкции для каждого IdP находятся в Настройка поставщика удостоверений.

2

Подготовьте базу данных PostgreSQL

Любой Postgres 14 или позже работает, включая самый маленький управляемый уровень. Шлюз запускает свои собственные миграции схемы при загрузке, поэтому пользователю базы данных нужны права для создания и изменения таблиц; см. store.

3

Напишите gateway.yaml

Секреты читаются через расширение ${ENV_VAR}, поэтому сам файл может находиться в системе управления версиями. Используйте имя хоста public_url, которое разрешается в частный IP в вашей сети, потому что /login отклоняет общедоступные адреса. Минимальная конфигурация имеет пять разделов, и каждое другое поле имеет значение по умолчанию:

listen:
host: 0.0.0.0
port: 8080
# Требуется, если хост не является адресом loopback. Используется для IdP
# redirect_uri и документа обнаружения.
public_url: https://claude-gateway.internal.example.com

oidc:
issuer: https://login.example.com        # должен служить /.well-known/openid-configuration
client_id: 0oa1example2
client_secret: ${OIDC_CLIENT_SECRET}
allowed_email_domains: [example.com]        # отклонять id_tokens вне вашей организации
userinfo_fallback: true                  # для IdPs, чьи id_token опускают email/groups; безвредно в противном случае

session:
jwt_secret: ${GATEWAY_JWT_SECRET}        # openssl rand -base64 32
ttl_hours: 1                             # также ограничивает задержку отзыва при отключении IdP

store:
postgres_url: ${GATEWAY_POSTGRES_URL}    # добавьте ?sslmode=require для управляемого Postgres

upstreams:
- provider: bedrock
region: us-east-1
auth: {} # пусто: цепь учётных данных AWS по умолчанию
# (IRSA, роль задачи EC2/ECS, переменные окружения, ~/.aws)

# Модели переводятся для каждого вышестоящего уровня автоматически. Встроенный каталог
# сопоставляет claude-opus-4-8 с us.anthropic.claude-opus-4-8 и так далее для каждого
# поддерживаемого Bedrock модели Claude. Установите false и добавьте список `models:` для
# раскрытия только определённых моделей.
auto_include_builtin_models: true

Эта конфигурация достаточна для работающего цикла входа с каталогом моделей Bedrock по умолчанию. После того как она запущена, добавьте RBAC для каждой группы и управляемые параметры через managed.policies, телеметрию fan-out через telemetry, и многоуровневую отказоустойчивость, ARN подготовленной пропускной способности или не-US регионы через models.

4

Запустите его

Создайте образ контейнера вокруг двоичного файла claude, который соответствует требованиям образа, затем запустите его вместе с Postgres. Файл Compose ссылается на образ как registry.example.com/claude-gateway:2.1.198; замените свой собственный реестр и тег образа:

services:
gateway:
image: registry.example.com/claude-gateway:2.1.198
ports: ["8080:8080"]
volumes: ["./gateway.yaml:/etc/claude/gateway.yaml:ro"]
environment:
OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}
GATEWAY_JWT_SECRET: ${GATEWAY_JWT_SECRET}
GATEWAY_POSTGRES_URL: postgres://gw:pw@postgres/gateway
# Учётные данные AWS: в производстве опустите их и используйте роль экземпляра
# вместо этого. Для локального тестирования Compose передайте свои собственные:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_SESSION_TOKEN: ${AWS_SESSION_TOKEN}
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:16-alpine
environment: { POSTGRES_USER: gw, POSTGRES_PASSWORD: pw, POSTGRES_DB: gateway }
healthcheck:
test: ["CMD-SHELL", "pg_isready -U gw"]
interval: 5s
volumes: ["pgdata:/var/lib/postgresql/data"]
volumes: { pgdata: }

Шлюз — это один двоичный файл Linux, который читает конфигурацию, подключается к Postgres и применяет его миграции схемы, запускает обнаружение OIDC против вашего IdP, создаёт клиентов вышестоящего уровня и начинает слушать.

Загрузка закрывается для конфигурации, подключения Postgres, обнаружения OIDC и конструкции клиента вышестоящего уровня. Если какой-либо из них недоступен или неправильно настроен, шлюз выходит с ошибкой, а не служит трафику в деградированном состоянии.

Успешная загрузка не проверяет путь вывода, потому что учётные данные экземпляра Bedrock и Agent Platform разрешаются при первом запросе, а не при загрузке.

Смотрите stderr для последовательности загрузки. Строки журнала используют формат [gateway] <timestamp> <level> <message>, события аудита — это однострочный JSON с полем evt, и баннер запуска, опущенный ниже, печатается между строками миграции и прослушивания. Свежая база данных печатает одну строку migration N applied на каждую миграцию схемы; уже перенесённая база данных не печатает ничего. Вы должны увидеть, по порядку:

{"ts":"2026-06-10T17:03:21.114Z","evt":"config.load","path":"/etc/claude/gateway.yaml","sha256":"…"}
[gateway] 2026-06-10T17:03:21.395Z info waiting for migration lock (another replica may be migrating; check pg_locks for key 6775156 if this persists)
[gateway] 2026-06-10T17:03:21.408Z info migration 1 applied
…
[gateway] 2026-06-10T17:03:21.431Z info migration 6 applied
[gateway] 2026-06-10T17:03:21.512Z info claude gateway listening on http://0.0.0.0:8080

Шлюз также регистрирует предупреждение, что access_control.allow_cidrs пусто. Это ожидается здесь, потому что ничто не ограничивает, какие адреса клиентов обслуживает шлюз, пока вы не установите список разрешений. Справочник access_control содержит рекомендуемые диапазоны.

Если загрузка выходит перед строкой claude gateway listening on, последняя строка stderr называет проблему:

  • недоступный Postgres
  • роль Postgres без разрешения DDL
  • недоступный или недействительный документ обнаружения OIDC
  • нарушение схемы конфигурации с путём нарушающего поля

Исправьте это и перезагрузитесь.

Если у вас уже есть завершающий TLS вход, пропустите Compose и запустите двоичный файл напрямую с помощью claude gateway --config gateway.yaml. Установите public_url на происхождение входа и привяжите listen к адресу loopback или внутри кластера.

5

Проверьте поверхность аутентификации

Три проверки подтверждают, что шлюз может аутентифицировать реального пользователя перед тем, как вы передадите его разработчику.

Примеры используют общедоступный URL шлюза; для локальной установки Compose без входа замените http://localhost:8080 в первых двух проверках. Третья проверка открывает verification_uri_complete, который построен из public_url, поэтому для локального Compose установите public_url: http://localhost:8080 в gateway.yaml и добавьте http://localhost:8080/oauth/callback как второй URI перенаправления на клиент OAuth из шага 1, потому что шлюз строит IdP redirect_uri из public_url. Ссылка проверки затем открывается в вашем локальном браузере.

В Windows PowerShell запустите curl.exe; голый curl — это псевдоним для Invoke-WebRequest и отклоняет эти флаги.

Сначала получите документ обнаружения, который подтверждает, что шлюз работает, конфигурация действительна и все проверки загрузки прошли:

curl -s https://claude-gateway.internal.example.com/.well-known/oauth-authorization-server | jq
{
"issuer": "https://claude-gateway.internal.example.com",
"device_authorization_endpoint": "…/oauth/device_authorization",
"token_endpoint": "…/oauth/token",
"grant_types_supported": ["urn:ietf:params:oauth:grant-type:device_code", "refresh_token"]
}

Ответ включает дополнительные поля, такие как response_types_supported и scopes_supported.

Во-вторых, запросите авторизацию устройства, которая подтверждает, что поток входа устройства работает и Postgres доступен и доступен для записи:

curl -s -X POST https://claude-gateway.internal.example.com/oauth/device_authorization | jq
{
"device_code": "…",
"user_code": "WDJB-MJHT",
"verification_uri": "https://claude-gateway.internal.example.com/device",
"verification_uri_complete": "https://claude-gateway.internal.example.com/device?user_code=WDJB-MJHT",
"expires_in": 600,
"interval": 5
}

В-третьих, протестируйте ветку браузера, открыв verification_uri_complete в браузере и подтвердив код. Вы должны быть перенаправлены на страницу входа вашего IdP и после входа приземлиться обратно на шлюз с подтверждением входа.

Используйте первую неудачную проверку для определения проблемы:

  • Первая проверка не удаётся: загрузка не завершена; проверьте stderr
  • Вторая проверка не удаётся: Postgres недоступен из шлюза или роль не может писать; проверьте строку подключения и разрешения
  • Третья проверка не достигает IdP: проверьте, что URI перенаправления IdP точно соответствует https://<gateway>/oauth/callback
  • Третья проверка достигает IdP, но отскакивает с ошибкой: прочитайте журнал аудита шлюза, который записывает каждый отказ в аутентификации с причиной, такой как email domain not allowed
6

Войдите разработчик

Этот последний шаг происходит на машине разработчика, а не на сервере. Установите forceLoginMethod на "gateway" и forceLoginGatewayUrl на public_url вашего шлюза в файле управляемых параметров этой машины, затем запустите /login, нажмите Enter на экране Cloud gateway и завершите вход в браузер. Установка URL шлюза ниже охватывает распределение обоих ключей в масштабе.

Подключение разработчиков

Разработчики подключаются со своих собственных ноутбуков с одним входом в браузер, используя свою корпоративную рабочую учётную запись. Им не нужна учётная запись claude.ai, ключ API или подписка, потому что запросы к модели идут через шлюз, используя учётные данные вышестоящего уровня организации. Подключение управляется управляемыми параметрами на стороне клиента, которые вы отправляете через MDM, поэтому нет ручной настройки на стороне разработчика; этот раздел охватывает то, что настраивает администратор.

CLI отпечатывает сертификат TLS листа шлюза при первом подключении и закрепляет его для каждого имени хоста. Он проверяет этот отпечаток снова при входе, при молчаливом обновлении сеанса и при получении управляемых параметров, в то время как запросы вывода используют стандартную проверку TLS без отпечатка. Запросы, маршрутизируемые через прокси HTTPS, пропускают проверку отпечатка, поэтому добавьте хост шлюза в NO_PROXY, чтобы сохранить их прямыми.

Опубликуйте ожидаемый отпечаток SHA-256 вместе с URL шлюза, чтобы разработчики имели что-то для сравнения. Подсказка /login показывает первые 16 символов отпечатка как строчные шестнадцатеричные без двоеточий. Чтобы вывести полный отпечаток в этой форме из файла сертификата, выполните:

openssl x509 -noout -fingerprint -sha256 -in cert.pem | cut -d= -f2 | tr -d : | tr 'A-F' 'a-f'

Когда сертификат ротируется, каждый разработчик видит подсказку доверия снова, поэтому рассматривайте ротации как запланированное событие и переопубликуйте отпечаток. Если политика вашего шлюза включает параметры, требующие одобрения, разработчик также видит диалог одобрения снова после принятия нового сертификата, потому что Claude Code привязывает память об одобрении к закреплённому сертификату.

Шлюз может возвращать необязательное поле email в своём ответе токена для обозначения учётной записи, которую использовал вход. Когда это происходит, разработчик подтверждает учётную запись перед тем, как Claude Code сохранит учётные данные. После подтверждённого входа /status показывает учётную запись.

Подтверждение требует Claude Code v2.1.275 или позже на машине разработчика; клиент ниже этой версии игнорирует поле. Сервер шлюза в двоичном файле claude не возвращает поле, поэтому его входы завершаются без подтверждения.

После входа разработчика средство выбора модели показывает модели в списке разрешённых availableModels разработчика. Управляемые параметры применяются при запуске и обновляются ежечасно, и телеметрия маршрутизируется в ваш сборщик.

Сеансы молча обновляются перед истечением ttl_hours. Когда обновление не удаётся после отключения IdP, Claude Code запрашивает у разработчика повторный вход.

Установка URL шлюза

Три ключа идут в файл управляемых параметров для каждой ОС, который вы развёртываете через MDM или непосредственно на диск. forceLoginMethod и forceLoginGatewayUrl открывают /login прямо на экране Cloud gateway с заполненным URL, и parentSettingsBehavior: "merge" позволяет Claude Desktop доставлять список разрешённых исходящих соединений шлюза в сеансы Claude Code, которые он запускает, как объяснено в Доставка политики в сеансы Claude Desktop:

{
  "forceLoginMethod": "gateway",
  "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com",
  "parentSettingsBehavior": "merge"
}

Разработчик нажимает Enter для подключения. Подсказка отпечатка TLS при первом подключении всё ещё появляется. После того как файл находится на машине, разработчик, который не завершил вход в шлюз, видит одно из сообщений, описанных в Политика администратора требует входа в Cloud gateway. Разработчики, которые выбирают поставщика облака через переменную окружения, такую как CLAUDE_CODE_USE_BEDROCK, не нуждаются во входе в шлюз.

Разработчик не может настроить это вручную. В средстве выбора входа нет опции шлюза, и forceLoginGatewayUrl игнорируется в собственных файлах параметров разработчика. forceLoginMethod один, без URL, оставляет разработчика с сообщением "Свяжитесь с администратором IT". Ключи входа принадлежат файлу, который вы отправляете на машины, а не в блок managed.policies[].cli шлюза, который достигает только уже подключённых клиентов.

Разрешение шлюза на адресном пространстве, которым вы владеете

Некоторые организации нумеруют свою внутреннюю сеть из блока публичного IPv4, которым они владеют, например из собственного адресного пространства оператора или устаревшего /8, поэтому их шлюз не может иметь приватный адрес. Перечислите эти блоки в управляемом параметре gatewayInternalNetworks. /login затем принимает шлюз внутри перечисленного блока, когда машина разработчика подключается к нему с адреса внутри того же блока. Это требует Claude Code v2.1.268 или позже на машине разработчика; более ранние версии игнорируют ключ и применяют правило приватного адреса.

Добавьте ключ в тот же источник управляемых параметров, что и ключи входа: файл управляемых параметров, профиль MDM или политика реестра. Claude Code игнорирует его в пользовательских, проектных и управляемых на сервере параметрах.

Этот пример объявляет один блок. Замените 203.0.113.0/24 на ваш собственный блок. Это диапазон документации, и Claude Code отказывает в нём.

{
  "gatewayInternalNetworks": ["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 и его файлов drop-in managed-settings.d/ объединяются в один список, и эти ограничения применяются к объединённому списку. Чтобы сузить блок, замените его запись, а не добавляйте вторую, перекрывающуюся в drop-in; /login отказывает в перекрытии.

Если запись нарушает правило или значение не является списком строк, Claude Code отказывает в каждом новом входе в шлюз на этой машине и называет проблему в сообщении. Вход в шлюз на приватном адресе также не удаётся, и существующие входы продолжают работать. Попробуйте значение на одной машине перед развёртыванием. Claude Code также перечисляет неправильно типизированное значение среди неправильных управляемых параметров, которые он сообщает.

С правильным списком /login применяет три проверки к шлюзу, чей адрес находится внутри перечисленного блока:

  • Каждый адрес, на который разрешается имя хоста шлюза, находится внутри того же блока. Claude Code отказывает имени, которое также имеет записи вне него, включая приватные и IPv6 адреса.
  • Машина разработчика подключается изнутри того же блока. Claude Code отказывает машине за NAT, внутри контейнера или WSL2, или на VPN, чей пул адресов находится вне блока, и называет адрес, с которого машина подключилась.
  • Подключение прямое. Если HTTPS_PROXY применяется к хосту шлюза, /login отказывает и называет запись NO_PROXY для добавления.

Когда все три проходят, подсказка доверия добавляет строку, называющую адрес машины, адрес шлюза и объявленный блок, который содержит оба.

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

Объявленный блок сужает, кто может войти, но не доказывает, где находится машина, поэтому объявляйте только адресное пространство, которым управляет ваша организация. Блок, общий с другими арендаторами, такой как публичный диапазон поставщика облака, позволяет любому в нём пройти ту же проверку.

Доставка политики в сеансы Claude Desktop

Claude Desktop запускает свои вкладки Cowork и Code, а также вкладку Chat, когда вы её включаете, на встроенных сеансах Claude Code и отправляет их запросы модели через шлюз. Он передаёт политику каждому из этих сеансов, построенную из конфигурации, которую шлюз ему предоставляет в /user/bootstrap: список разрешённых моделей, отключённые инструменты и список разрешённых исходящих соединений, полученный из блока cli согласованной политики, плюс наложение desktop.

Другие ключи cli, такие как hooks, env и правила разрешений с областью действия, такие как Bash(npm *), достигают только клиентов, которые входят через /login. Claude Desktop читает URL шлюза из своей собственной управляемой конфигурации и входит со своим собственным потоком, отдельно от ключей forceLoginMethod и forceLoginGatewayUrl в Установка URL шлюза.

Параметры, переданные запускающим процессом, являются родительскими параметрами. Claude Code игнорирует родительские параметры на любой машине, которая имеет развёрнутый администратором управляемый источник, если только источник, который доставляет политику, не устанавливает parentSettingsBehavior: "merge".

Какие машины нуждаются в согласии

Машины, которые только запускают Claude Desktop, нуждаются в нём. Claude Desktop применяет список моделей и список отключённых инструментов к встроенным сеансам сам, но список разрешённых исходящих соединений достигает их только как родительские параметры, в форме правил доменов WebFetch и правил сетевой изоляции. Без согласия эти сеансы работают без ограничения исходящих соединений, и ничто вас не предупредит. Шлюз по-прежнему отклоняет запросы вывода для моделей, которые политика не предоставляет.

Машины, где разработчики входят через /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 политики шлюза.

3

Проверка выбранного источника

На машине, которая только запускает Claude Desktop, вызовите resolveSettings() Agent SDK и прочитайте policyOrigin в записи managed в его списке sources. Значение называет выбранный источник на стороне клиента, plist, hklm или file, который является источником, который должен нести фрагмент. Встроенные сеансы Claude Desktop не получают политику шлюза, поэтому блок cli шлюза никогда не считается выбранным источником для них.

Ограничение родительских параметров

После развёртывания 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 и списки разрешённых, которые они управляют, в те же источники, что и согласие на объединение:

{
  "forceLoginMethod": "gateway",
  "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com",
  "parentSettingsBehavior": "merge",
  "allowManagedPermissionRulesOnly": true,
  "allowManagedMcpServersOnly": true,
  "allowManagedHooksOnly": true,
  "allowedMcpServers": [{ "serverUrl": "https://mcp.internal.example.com/*" }],
  "sandbox": {
    "network": {
      "allowManagedDomainsOnly": true,
      "allowedDomains": ["github.com", "*.npmjs.org"]
    },
    "filesystem": {
      "allowManagedReadPathsOnly": true,
      "denyRead": ["~/"],
      "allowRead": ["~/projects"]
    }
  }
}

Политика ОС, такая как политика реестра HKLM или plist управляемых предпочтений, превосходит этот файл, поэтому доставляйте весь фрагмент через неё вместо файла. Удалённые управляемые параметры шлюза превосходят политику ОС и источники файлов, но достигают только подключённых клиентов. Отразите блокировки, списки разрешённых и согласие на объединение в блок cli политики и сохраняйте этот файл развёрнутым, потому что машины, которые никогда не подключаются, включая те, которые только запускают Claude Desktop, получают свою политику только из файла.

Поведение блокировки между источниками

Установка одной блокировки не ограничивает другие; каждый ключ задокументирован в справочнике параметров.

Из источника администратора ниже победителя две блокировки изоляции по-прежнему применяются, и allowManagedPermissionRulesOnly по-прежнему блокирует правила разрешения, предоставленные родителем, и additionalDirectories. На Claude Code v2.1.273 или позже блокировка MCP сервера также применяется из источника ниже победителя, и пока она включена, управляемый список allowedMcpServers поступает из источника администратора с наивысшим приоритетом, который устанавливает один.

Блокировка hooks и эффект allowManagedPermissionRulesOnly на собственные правила разработчика нуждаются в выигрывающем источнике по умолчанию; в соответствии с согласием на объединение managedSourcesBehavior в как Claude Code объединяет управляемые источники, Claude Code применяет самое строгое значение, которое любой источник устанавливает для каждой блокировки. На флотах policyHelper блокировки читаются только из выходных данных помощника.

Каждая блокировка заставляет Claude Code игнорировать собственные записи разработчика для этого параметра, поэтому включите списки разрешённых вашей организации рядом с блокировками:

  • Сетевые домены: блокировка с пустым списком управляемых доменов блокирует весь исходящий трафик в изоляции.
  • MCP серверы: блокировка без allowedMcpServers в любом источнике администратора или в параметрах, предоставленных родителем, загружает каждый сервер, который deniedMcpServers не блокирует.
  • Пути чтения: записи allowRead только повторно разрешают пути внутри регионов denyRead, поэтому спаривайте их с управляемым denyRead.

Параметры, которые блокировки не охватывают

Шесть параметров, предоставленных родителем, проходят фильтр даже со всеми пятью установленными блокировками. В соответствии с параметром первого выигрыша по умолчанию, значение администратора, которое блокирует родителя, находится в источнике администратора с наивысшим приоритетом, кроме allowedMcpServers пока блокировка MCP сервера включена. В соответствии с согласием на объединение managedSourcesBehavior, как Claude Code объединяет управляемые источники говорит, какое значение источника применяется вместо этого.

  • forceLoginOrgUUID: Claude Code соблюдает значение, предоставленное родителем, когда источник администратора с наивысшим приоритетом не устанавливает UUID организации. Вход в шлюз не проверяет этот ключ, поэтому он имеет значение только для флотов, которые также используют входы Anthropic первой стороны. UUID организации в источнике администратора с наивысшим приоритетом блокирует значение родителя и является тем, который Claude Code применяет, поэтому установите forceLoginOrgUUID там.
  • allowedMcpServers: Claude Code соблюдает список разрешённых, предоставленный родителем, когда источник администратора с наивысшим приоритетом не устанавливает один. allowManagedMcpServersOnly не блокирует его, потому что блокировка применяет список, который выигрывает, как управляемое значение, включая список, предоставленный родителем, когда источник администратора с наивысшим приоритетом не устанавливает один. Список в источнике администратора с наивысшим приоритетом блокирует список родителя и является списком, который Claude Code применяет, поэтому установите allowedMcpServers там, рядом с блокировкой. До v2.1.223 значение для любого ключа в любом источнике администратора блокировало значение родителя.
  • availableModels: Claude Code соблюдает список моделей, предоставленный родителем, когда выигрывающий управляемый источник не устанавливает один. Если ваш флот ограничивает модели, установите availableModels в выигрывающем источнике.
  • strictKnownMarketplaces: Claude Code соблюдает список разрешённых маркетплейсов плагинов, предоставленный родителем, когда выигрывающий управляемый источник не устанавливает один. Если ваш флот ограничивает маркетплейсы, установите strictKnownMarketplaces в выигрывающем источнике. Требует Claude Code v2.1.282 или позже.
  • blockedMarketplaces: список блокировки маркетплейсов, предоставленный родителем, проходит и добавляется к любому списку блокировки, который устанавливает управляемый источник, так как список блокировки может только дополнительно ограничить. Требует Claude Code v2.1.282 или позже.
  • strictPluginOnlyCustomization: этот ключ проходит фильтр независимо от любой блокировки, и он заставляет Claude Code игнорировать собственную настройку разработчика, включая защитные hooks. Никакая блокировка не блокирует его.

Подключение Claude Desktop

Claude Desktop подключается к тому же шлюзу через другой ключ MDM: установите bootstrapUrl в управляемой конфигурации Claude Desktop на <listen.public_url>/user/bootstrap, и согласьте политику пользователя с ключом desktop. Наложение Claude Desktop охватывает обе части. Требует Claude Code v2.1.203 или позже на сервере шлюза.

Claude Desktop подписывает разработчика через поставщика идентификации шлюза с тем же шагом SSO браузера, затем получает свою конфигурацию из шлюза вместо Anthropic. Доступ к модели и политика следуют тем же правилам для каждой группы, что и CLI. Разработчик, который использует как CLI, так и Claude Desktop, входит в каждый отдельно; сеанс шлюза не является общим между ними.

После подключения Claude Desktop отправляет запросы модели из каждой включённой вкладки через шлюз. Он показывает вкладки Cowork и Code по умолчанию. Чтобы включить вкладку Chat также, установите chatTabEnabled на true в управляемой конфигурации Claude Desktop, или в блоке desktop политики на шлюзе, работающем Claude Code v2.1.227 или позже.

Конвейеры CI и удалённые машины

Нет потока токена сервиса для автоматических конвейеров. Вход шлюза всегда запускает поток устройства браузера, поэтому задача CI без разработчика для одобрения входа не может аутентифицироваться; настройте их непосредственно против вашего поставщика.

После входа разработчика каждый сеанс Claude Code на этой машине использует сеанс шлюза, включая неинтерактивные запуски claude -p и сеансы, запущенные Agent SDK. Claude Code применяет политику шлюза к каждому из них.

Поток устройства отделяет опрашивающий CLI от одобряющего браузера, поэтому удалённый ящик разработки без дисплея всё ещё работает: разработчик запускает /login по SSH на удалённой машине и открывает ссылку проверки в браузере на своём ноутбуке.

Что применяется к разработчикам

Эти гарантии применяются к каждому сеансу, подписанному через /login. Встроенные сеансы, которые запускает Claude Desktop, получают свою политику, как описано в Доставка политики в сеансы Claude Desktop, и пункт телеметрии говорит, куда идут их экспорты.

  • Доступ к модели: запросы для моделей, которые политика не предоставляет, возвращают 400, и средство выбора /model фильтруется в список разрешённых availableModels политики. Установите enforceAvailableModels: true в политике, чтобы опция Default разрешалась в модель внутри availableModels вместо встроенного значения по умолчанию Claude Code; без неё Default остаётся выбираемым и отклоняется во время запроса, если эта модель не предоставлена.
  • Назначение телеметрии: в сеансах, подписанных через /login, CLI отправляет свои экспорты OTLP/HTTP в шлюз, а не в локально установленный OTEL_EXPORTER_OTLP_ENDPOINT, если политика не называет ваш сборщик как конечную точку. Шлюз пересылает экспорты, которые он получает, в назначения в telemetry.forward_to.
    • Во встроенных сеансах которые запускает Claude Desktop, CLI отправляет свои экспорты в настроенный OTEL_EXPORTER_OTLP_ENDPOINT. CLI прикрепляет токен сеанса шлюза к этим экспортам только когда эта конечная точка указывает на сам шлюз.
    • Без настроенного назначения для сигнала шлюз принимает и отбрасывает его.
    • Если вы уже собираете телеметрию Claude Code напрямую, добавьте ваш сборщик как назначение forward_to, или назовите его в политике, чтобы пропустить ретрансляцию.
  • Учётные данные: токен шлюза — это единственное учётное данные сеанса. Профили Anthropic и любой более ранний вход claude.ai игнорируются при входе, поэтому разработчикам не нужно сначала выходить из claude.ai. Для настроенного ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN или apiKeyHelper учётного данного см. Политика администратора требует входа в Cloud gateway.
  • Управляемые параметры: заблокированные ключи не могут быть переопределены локально. CLI применяет политику при запуске и применяет изменения при каждом ежечасном опросе, кроме изменений, которые применяются только при следующем запуске.
  • Запуск с недоступным шлюзом: подписанные сеансы выходят при запуске с ошибкой примерно через 10 секунд, а не запускаются без своих параметров.
  • Запуск после завершения сеанса шлюзом: см. Применение отказа при закрытом запуске для запусков, которые открываются без входа в шлюз, и для тех, которые выходят, когда шлюз отвечает с 401.
  • Отключение: сеанс, чей пользователь отключён в IdP, истекает в течение ttl_hours, когда следующее обновление не удаётся.
  • Выход: /logout удаляет учётные данные шлюза с машины разработчика.
    • Когда документ обнаружения шлюза объявляет revocation_endpoint на собственной схеме, хосте и порту URL шлюза, /logout также отправляет сохранённые токены на эту конечную точку, чтобы шлюз мог завершить сеанс на своей стороне. Запрос является лучшим усилием, поэтому выход завершается на машине разработчика независимо от того, отвечает ли конечная точка. Отзыв требует Claude Code v2.1.275 или позже на машине разработчика.
    • Сервер шлюза в двоичном файле claude не объявляет ни один, поэтому выход из него завершает сеанс на машине разработчика только. Чтобы принудительно завершить сеансы на стороне сервера, см. Ротация секрета JWT.

Что может видеть организация

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

Доступность и ограничения

Таблица охватывает, какие функции Claude Code работают, когда разработчики подключаются через шлюз, и что сам сервер шлюза поддерживает. Где что-то не поддерживается, столбец Notes даёт альтернативу.

Шлюз доставляет значения anthropic-beta, которые CLI отправляет каждому вышестоящему уровню, поэтому операторы не поддерживают список разрешений бета. Для Amazon Bedrock, который игнорирует заголовок, шлюз перемещает значения в поле anthropic_beta тела запроса; другие вышестоящие уровни получают заголовок как отправленный.

Функция Статус Примечания
Пересылка вывода (Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, Microsoft Foundry, Anthropic) Доступно С переводом модели для каждого вышестоящего уровня и отказоустойчивостью. Вышестоящий уровень Amazon Bedrock использует конечную точку bedrock-runtime и цепь учётных данных AWS по умолчанию; конечная точка Amazon Bedrock Mantle не является поддерживаемым вышестоящим уровнем. Вышестоящий уровень Claude Platform on AWS требует Claude Code v2.1.198 или более поздней версии на сервере шлюза.
Доступ к модели и управляемые параметры по группе IdP Доступно Доступ к модели применяется на стороне сервера; управляемые параметры доставляются для каждой группы IdP и применяются CLI на уровне управляемых параметров
Claude Desktop Доступно с согласия Шлюз обслуживает конфигурацию Claude Desktop по адресу /user/bootstrap после того, как политика согласится с ключом desktop, и Claude Desktop отправляет запросы модели из своих вкладок Cowork и Code, а также из вкладки Chat, когда вы её включите, через шлюз. Чтобы включить вкладку Chat, см. Подключение Claude Desktop. Требует Claude Code v2.1.203 или более поздней версии на сервере шлюза.
Телеметрия fan-out (OTLP/HTTP) Доступно Идентификация-отмечена для каждого экспорта; оба кодирования protobuf и JSON
Поставщики идентификации OIDC Доступно Любой совместимый с OIDC IdP; шлюз запускает стандартное обнаружение OIDC и поток авторизации-кода. См. Настройка поставщика идентификации для конфигурации для каждого IdP
Ограничения расходов для каждого пользователя и группы Доступно См. Ограничения расходов
Веб-поиск на стороне сервера Недоступно CLI не может видеть, какого поставщика вышестоящего уровня маршрутизирует шлюз, поэтому он не может проверить поддержку веб-поиска и отключает WebSearch на сеансах шлюза
Remote Control Недоступно CLI показывает ошибку, называющую шлюз
/design-sync и /design-login Недоступно Обе нуждаются в claude.ai, который CLI не контактирует на сеансах шлюза, поэтому ни одна команда там не появляется
Функции, которые нуждаются в получении флага функции, такие как /import и claude import Недоступно CLI пропускает получение флага на сеансах шлюза. Функции, которые нуждаются в получении флага функции перечисляет, что это отключает
Стандартное кэширование подсказок Доступно Шлюз пересылает точки разрыва cache_control каждому вышестоящему уровню. Где живёт кэш охватывает, какие блоки CLI отмечает, включая системный контекст, который он добавляет в середине разговора
TTL кэша 1 час Недоступно CLI опускает бета-версию extended-cache-ttl на сеансах шлюза, потому что не каждый вышестоящий уровень, который может маршрутизировать шлюз, поддерживает TTL 1 час, поэтому кэширование подсказок через шлюз использует TTL 5 минут; см. примечание выше о бета-заголовке
Режим Auto Доступно Следует правилам поставщика третьей стороны: только модели, имеющие право на поставщиков третьей стороны, могут его использовать. До версии v2.1.207 режим auto на сеансах шлюза требовал установки CLAUDE_CODE_ENABLE_AUTO_MODE=1, доставляемой через блок env управляемой политики
Оптимизации только первой стороны, такие как глобальная область кэша и инструменты, эффективные по токенам Недоступно CLI не включает их на сеансах шлюза; см. примечание выше о бета-заголовке
OTLP/gRPC Не поддерживается Только OTLP по HTTP
SAML, LDAP и другая аутентификация не-OIDC Не поддерживается Только OIDC. Фронт с мостом OIDC, если необходимо
Мультитенантность (несколько издателей OIDC) Не поддерживается Один издатель на шлюз. Запустите отдельные экземпляры
Сервер Windows Не поддерживается Развёртывайте на Linux. macOS только для локальной разработки
Helm chart Недоступно Шлюз работает как стандартное развёртывание без состояния; см. руководство по развёртыванию
Пользовательский интерфейс администратора Недоступно Конфигурация — это файл YAML; переразвёртывайте, чтобы изменить его

Следующие шаги

Быстрый старт оставляет вас с минимальной конфигурацией, работающей под 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.