Компания Jamf, известная управлением Apple-устройствами для более чем 76 000 организаций, столкнулась с проблемой, знакомой многим: расходы на генеративный ИИ растут непредсказуемо. Когда инженерам дали широкий доступ к Amazon Bedrock для ускорения разработки, продуктивность выросла, но вместе с ней — и счета. Традиционные методы контроля затрат, основанные на provisioned capacity, не работают: ИИ-расходы зависят от поведения пользователей, и один инженер, запускающий агентные циклы на премиальных моделях, может сжечь больше токенов за несколько часов, чем целая команда за неделю.
Проблема усугубляется тем, что использование невидимо до получения счета, что затрудняет контроль затрат и оценку ROI. Руководство Jamf хотело ответы на три вопроса: сколько мы тратим на каждого сотрудника? Можно ли ограничить расходы, не замедляя работу инженеров? Оправдывают ли выгоды от продуктивности затраты? Для решения этих задач Jamf разработала систему, которая отслеживает ежедневные расходы каждого инженера и применяет tiered-ограничения в реальном времени.
Архитектура решения состоит из трех компонентов: измерение, решение и enforcement. Измерение основано на Amazon Athena: логи вызовов Bedrock, включая идентификатор модели, количество токенов и личность пользователя, записываются в S3. Athena-представление bedrock_cost_today умножает количество токенов на опубликованные тарифы моделей, вычисляя ежедневные расходы на пользователя. Это позволяет обойтись без отдельного пайплайна данных.
Система отслеживает ежедневные траты каждого инженера и применяет tiered-ограничения: доступ к Claude Opus закрывается при 80% бюджета, к Sonnet — при 100%.

Решение принимает AWS Lambda-функция, запускаемая каждые 15 минут по расписанию EventBridge. Она считывает текущие расходы из Athena, сверяет их с таблицей исключений в DynamoDB, где хранятся временные повышенные лимиты для отдельных инженеров, и сравнивает с предыдущим состоянием пользователя. При пересечении порога отправляется одноразовое Slack-уведомление, чтобы ограничения не были неожиданностью.
Enforcement реализован через IAM Customer Managed Policies (CMP). Lambda публикует новую версию CMP с помощью iam:CreatePolicyVersion, используя условие saml:sub для таргетирования конкретных пользователей. Политики прикреплены к permission set в IAM Identity Center, и при следующем вызове Bedrock IAM оценивает обновленную политику, разрешая или запрещая запрос без повторной аутентификации. Например, при достижении 80% дневного бюджета запрещается доступ к Claude Opus, при 100% — к Claude Sonnet, но Haiku остается доступной, чтобы инженеры могли продолжать работу на дешевой модели.
Ограничения вступают в силу в течение нескольких минут и автоматически сбрасываются на следующий день. Для тех, кому нужно больше, предусмотрен документированный процесс исключений с временными лимитами. Код решения доступен на GitHub.
Этот подход иллюстрирует растущую важность ИИ FinOps — управления затратами на ИИ как отдельной дисциплины. В отличие от традиционных вычислений, где расходы масштабируются с provisioned capacity, ИИ-расходы масштабируются с поведением, что делает контроль сложнее. Решение Jamf показывает, как можно сочетать гибкость доступа к ИИ с финансовой дисциплиной, используя serverless-компоненты и IAM-политики.


