Полсотни разработчиков раскатили Claude Code. У каждого свой ключ Bedrock, осевший в dotfiles и shell history. Настройки у всех кто в лес, кто по дрова. А счёт за инференс приходит одной суммой, и в ней не разобрать, кто за ночь сжёг три тысячи долларов на зациклившемся агенте.
На пяти сотрудниках это терпимо. На двух сотнях начинает болеть по-настоящему.
Anthropic и AWS выкатили под это Claude apps gateway — self-hosted control plane для Claude Code и Claude Desktop, который живёт в вашей инфраструктуре. Один stateless-контейнер на ECS или EKS (можно и на голом EC2) за внутренним ALB, рядом RDS for PostgreSQL под состояние логина и счётчики лимитов. Весь конфиг — один YAML при старте. Клиента ставить не надо: gateway встроен в тот же claude-бинарь, что у разработчиков уже стоит.
Что меняется по факту. Upstream-креды переезжают с ноутбуков в инфраструктуру и наружу больше не видны. Разработчик логинится через ваш OIDC (Okta, Entra ID, Google Workspace, что стоит): браузерный SSO выдаёт короткоживущий токен, по умолчанию на час, дальше тихий refresh. Уволили человека, вырубили в IdP — доступ отвалится на следующем рефреше, без беготни по выданным ключам. Для Bedrock статических ключей нет совсем, gateway ходит через IAM task role контейнера:
upstreams: - provider: bedrock region: us-east-1 auth: {} # AWS default credential chain, роль контейнера
Поверх этого — managed settings, которые сервер раздаёт клиенту при входе с привязкой к группе из IdP: какие модели доступны, какие инструменты запрещены, какие дефолты нельзя переопределить. Контрактникам, скажем, оставляют одну дешёвую модель и режут веб-доступ:
managed: policies: - match: { groups: [eng-contractors] } cli: availableModels: [claude-haiku-4-5] enforceAvailableModels: true permissions: deny: ["WebFetch", "WebSearch"]
Каждый запрос клиент помечает usage-метрикой, gateway гонит её по OTLP в ваш коллектор (CloudWatch или Amazon Managed Prometheus) — в вашей сети и с вашим retention. Из этого потока сразу видно adoption по командам, самые дорогие вызовы и агентов, ушедших в бесконечный цикл. Апстрим за тем же фасадом переключается централизованно. Сегодня Bedrock в us-east-1; лёг регион — правкой конфига уводите на us-west-2 или вовсе на Anthropic API, и разработчики этого даже не замечают. Никакой рассылки новых ключей и настроек на сотни машин.
Ради чего всё и затевалось — лимиты. Дневной, недельный, месячный потолок; на организацию, группу или конкретного человека; выставляются через admin API в центах:
curl -X POST https://<gateway>/v1/organizations/spend_limits \ -H "x-api-key: $GATEWAY_ADMIN_WRITE_KEY" \ -d '{"scope":{"type":"organization"},"amount":"50000","period":"monthly"}'
Упёрся в потолок — получил 429, и убежавший агент не доедает общий cloud-commitment до дна. Бюджетный алерт в этот момент только прислал бы соболезнование.
Со стороны разработчика вся магия сводится к claude /login: браузер, SSO, политика подтянулась сама. Роутинг на сам gateway раздаётся через MDM: на машины кладётся managed-settings.json с forceLoginMethod=gateway и его адресом. По приватности инференс и usage в Anthropic не утекают, пока вы сами не выберете апстримом Claude API. Плюс Anthropic обещает опубликовать протокол, так что сторонние реализации gateway’я в теории тоже появятся.
Где я буксую
Смущает меня вот что. Gateway моментально становится single point of failure: лёг сам сервис, его Postgres или IdP, и вся команда сидит без агента. Значит, реплики, multi-AZ и заранее продуманная семантика fail-open против fail-closed для лимитов, иначе одну болячку вылечили, а подхватили похуже.
Телеметрия напрягает отдельно. В неё стекают команды, пути к файлам, имена репозиториев, аргументы тулов, потенциально куски промптов. Это чувствительнее сырого API-трафика, и валить всё в коллектор без редактирования и с бесконечным retention я бы поостерёгся.
И граница контроля обманчива. Аутентификацию, выбор модели, квоты gateway держит намертво. А выполнять локальный Bash или трогать файлы разрешает уже клиент по managed settings, то есть tool policy надёжна ровно настолько, насколько вы защитили её через MDM. Gateway тут не EDR: машину с локальным root он не спасёт, вписать личный ключ в обход тоже никто не помешает. Хочешь настоящий enforcement, закрывай прямой путь egress-фильтрацией руками.
Вещь по делу, когда Claude дорос до продакшн-инструмента на сотни человек и ключи с политиками пора снимать с личных ноутбуков.
На маленькую команду городить это незачем.
