生成式 AI 的支出行为与以往的任何成本线都不同。传统计算随预置容量扩展,而 AI 支出随行为扩展:一个工程师在高级模型上运行代理编码循环,几小时内消耗的代币可能超过一个团队一周的使用量。这就是代币经济学问题:使用情况在账单到来前不可见,使得成本控制和投资回报率(ROI)都难以证明。在扩大 AI 访问权限之前,领导层希望得到三个答案:我们每人花费多少?能否在不减慢工程师速度的情况下设置上限?生产力提升是否值得这些成本?
Jamf 为超过 76,000 个组织管理并保护 Apple 设备,直接面临了这一挑战。为了加速 AI 辅助开发,Jamf 为其工程组织提供了对 Amazon Bedrock 的广泛访问。生产力提升了,但对 AI FinOps 的需求也随之增加:需要对每个用户进行可见性和成本问责。
Jamf 构建了一个生产系统,从个人层面解决这个问题。在本文中,您将学习如何使用 AWS IAM 客户管理策略(CMP)、基于 Amazon Athena 的成本视图和无服务器 AWS Lambda 强制循环来构建此架构。最后,您将获得一个经过生产测试的模式,该模式可在近实时内强制执行分层支出限制,且不中断活动会话。这就是 AI 成本治理能力。
解决方案概述
Jamf 的解决方案跟踪每位工程师的每日 Amazon Bedrock 支出,并在其接近预算时应用分层模型限制。例如,在每日预算的 80% 时拒绝 Anthropic Claude Opus 访问,在 100% 时拒绝 Anthropic Claude Sonnet 访问。它不会阻止 Anthropic Claude Haiku,因此工程师可以保留低成本模型继续工作。限制在几分钟内生效,无需重新认证,并在每日重置时自动恢复。对于确实需要更多额度的工程师,有文档化的例外流程可授予有时限的更高限制。
架构
该架构解决三个问题:衡量支出、决定限制谁并通知他们、以及执行限制。每个问题都由专用、无服务器组件处理。
确保从 AWS IAM Identity Center 配置事件到 Amazon S3。
管理用户在 AWS IAM Identity Center 中的身份
测量
调用和日志记录:当工程师通过 AWS IAM Identity Center 单点登录(SSO)会话调用 Amazon Bedrock 时,Amazon Bedrock 会将调用(包括模型 ID、输入和输出令牌数以及用户身份)记录到您配置的 Amazon S3 存储桶。
决定并通知
成本测量:Amazon Athena 视图(bedrock_cost_today)读取这些日志,通过将令牌数乘以发布的模型费率来计算每位用户的每日支出。Athena 就地查询原始日志,避免单独的数据管道。
执行决策:AWS Lambda 强制执行处理程序每 15 分钟运行一次,由 Amazon EventBridge 调度触发。它从 Athena 视图读取当前支出,并与 DynamoDB 例外表中的自定义、有时限的限制进行交叉引用。
通知:同一执行处理程序从 DynamoDB 状态表中读取每个用户的上次状态,并当支出超过新阈值时,向工程师发送该层的一次性 Slack 直接消息,使限制不被意外。
执行
执行操作:对于超过阈值的每位工程师,Lambda 通过使用 iam:CreatePolicyVersion 发布相应 CMP 的新版本。该策略通过 saml:sub 条件键针对特定用户。
实时评估:CMP 附加到 IAM 权限集。在工程师下一次调用 Amazon Bedrock 时,IAM 评估更新后的策略并允许或拒绝请求,无需重新认证。
先决条件
要部署此解决方案,您需要:
- 具有创建 IAM 角色、客户管理策略、AWS Lambda 函数、Amazon Athena 工作组、Amazon S3 存储桶和 Amazon DynamoDB 表权限的 AWS 账户。
- 配置并分配给用户的 AWS IAM Identity Center 权限集。
- 配置 Amazon Bedrock 模型调用日志记录,将日志传送到您的 Amazon S3 存储桶。
- 配置适当凭证的 AWS 命令行界面(AWS CLI)。
- Slack 工作区,配置了用于斜杠命令、交互和机器人消息的应用。
部署步骤
您可以访问本文代码,网址为 https://github.com/aws-samples/sample-bedrock-spend-enforcement。高级概述如下:
步骤 1:创建 Amazon Athena 成本视图
Amazon Bedrock 调用日志以 JSON 格式存储在 Amazon S3 上。首先在日志位置创建 Athena 表,然后创建将令牌数转换为美元的视图。该视图将输入和输出令牌数乘以发布费率,并按用户身份和当前日期分组。
将速率常数替换为当前区域中 Amazon Bedrock 的价格。每个模型系列都需要一个明确的定价分支。未映射的模型按最高层定价作为安全机制(而非 0 美元),以便无法识别的模型绕过执行。关注相关警报并及时添加模型的实际费率。
步骤 2:创建客户管理策略
创建拒绝特定模型系列的执行策略,这些策略针对由 saml:sub 标识的特定用户。从空用户列表开始。Lambda 在运行时通过发布新策略版本填充列表。将这些策略附加到 IAM 权限集。当您使用 iam:CreatePolicyVersion 更新这些客户管理策略时,您的更改会立即生效,无需重新预置。
步骤 3:部署强制执行 Lambda 和调度程序
从代码仓库部署 Lambda 函数和 EventBridge 规则。Lambda 执行以下任务:查询 Athena 视图以获取当前支出;检查 DynamoDB 例外表;更新 DynamoDB 状态表;发送 Slack 通知;并创建新策略版本以拒绝超出阈值的用户的模型访问。
步骤 4:测试和监控
测试系统以确保限制按预期工作。监控 Lambda 日志和 Amazon CloudWatch 指标以验证执行并识别任何问题。设置警报以检测异常活动或故障。
结论
Jamf 构建的解决方案展示了如何在 Amazon Bedrock 上实现实时成本治理。通过结合 IAM CMP、Athena 和 Lambda,您可以在不牺牲工程师生产力的前提下控制 AI 成本。这种模式可以适应不同的预算结构、模型目录和组织规模。通过为工程师提供低成本模型并实施清晰的例外流程,您可以在创新与财政责任之间取得平衡。