AWS Bedrock IAM花费追踪与预算控制
Get per-identity Amazon Bedrock cost visibility and enforceable spend limits using only AWS-native features, with no application code for the common case. Attribute spend with IAM
All guides · Full article is primarily Simplified Chinese; use the English summary below for quick takeaways (GEO-friendly).
AWS Bedrock IAM花费追踪与预算控制
你需要为AWS Bedrock上的AI模型调用设置按IAM主体(用户或角色)的花费可见度和可强制执行的预算上限吗?这个方法全部使用AWS原生功能,在常见情况下无需编写任何应用代码。CIO和CTO可以清晰了解每个团队或个人的消耗,并通过AWS Budgets自动限制支出,避免超支或意外费用。适用于需要精细控制生成式AI预算的组织,特别是已有IAM角色或会话的场景。
为什么选择AWS Bedrock IAM花费追踪
AWS Bedrock在2026年支持Claude、Llama等主流模型,其计费按输入输出Token以$/M为单位。IAM Principal Attribution功能会自动将每次推理请求的调用者身份记录下来。结合CUR 2.0数据导出和AWS Budgets,你就能实现按身份的成本可见度,并设置强制执行的预算上限。
这个方案的优势在于:
- 零代码部署:无需自定义Lambda或Athena查询即可实现基础可见度。
- 可扩展性:支持团队共享角色或按用户区分的场景。
- 合规友好:内置的Deny策略能直接限制权限。
核心组成部分
- IAM Principal Attribution:Amazon Bedrock自动记录IAM用户或角色的身份,无需修改API调用。
- Cost Allocation Tags:将身份标签激活为成本分配标签,数据可通过AWS Cost Explorer或CUR 2.0导出。
- CUR 2.0数据导出:包含IAM Principal分配数据,支持SQL查询和详细行项目分析。
- AWS Budgets:创建按服务、身份或标签过滤的预算,并在阈值超过时自动附加Deny IAM策略。
实施步骤
准备工作
确保AWS账户已启用Amazon Bedrock访问权限,IAM权限包括标记主体、激活标签、创建数据导出和预算。AWS CLI已配置。
步骤1:决定身份映射方式
根据你的组织IAM组织方式选择标签类型。
每个角色对应一人或一个应用:直接在IAM角色上附加静态Principal Tags。示例命令(AWS CLI):
aws iam tag-role \
--role-name BedrockDeveloperRole-alice \
--tags Key=user,Value=alice@example.com Key=team,Value=platform Key=CostCenter,Value=CC-1001
共享角色或网关场景:使用动态Session Tags。角色信任策略需允许sts:TagSession。Session Tags可通过sts:AssumeRole或OIDC/SAML传递。常见标签键包括user、team、Department、CostCenter和Environment。
对比表
| 场景类型 | 标签类型 | 优势 | 适用场景 | 注意事项 |
|---|---|---|---|---|
| 1对1角色 | Principal Tags | 静态,每请求固定 | 每个用户独立角色 | 标签最多50个 |
| 共享角色/网关 | Session Tags | 动态,可区分用户 | 多人共用角色或API网关 | 需配置sts:TagSession |
| 多团队共享 | Principal + Session | 灵活区分 | 跨团队协作 | 共享角色会影响整体控制 |
步骤2:激活成本分配标签
1. 打开AWS Billing and Cost Management控制台。
2. 选择Cost allocation tags。
3. 筛选类型为IAM principal。
4. 选中你的标签键并激活。
激活后,最多24小时内标签出现在账单数据中。新标签需在应用前激活,否则不会反映。
步骤3:创建CUR 2.0数据导出
如果只需要Console路径,可跳过此步。
1. 在Billing控制台选择Data Exports > Create。
2. 选择CUR 2.0(Standard)导出。
3. 在Additional export content中选中Include caller identity (IAM principal) allocation data。
4. 时间粒度选Hourly,报告数据集成选Amazon Athena。
5. 指定S3桶,运行提供的Setup Script创建Glue表。
新导出会包含iamPrincipal/前缀的列(如iamPrincipal/team),旧导出需重新创建才能包含身份数据。
步骤4:读取数据
Console路径:Cost Explorer筛选Service为Amazon Bedrock,按标签键分组查看团队或用户花费图表和表格。适用于日常监控,无需查询。
SQL路径(低代码):使用Amazon Athena查询CUR 2.0导出。
SELECT
tags['iamPrincipal/team'] AS team,
line_item_usage_type,
SUM(line_item_unblended_cost) AS cost
FROM cur2_view
WHERE product_servicecode IN ('AmazonBedrock', 'AmazonBedrockService')
AND billing_period = '2026-09'
GROUP BY 1, 2
ORDER BY 3 DESC
注意事项:
- 服务代码包含AmazonBedrock和AmazonBedrockService。
- 汇总所有Token类型(输入、输出、缓存读/写),仅统计输入输出会遗漏缓存节省。
- 匹配行项目类型和地域定价。
更多细节参考官方CUR计费文档。
步骤5:添加AWS Budgets强制执行
1. 在Billing控制台创建AWS Budgets。
2. 选择Amazon Bedrock服务,按身份或标签过滤(例如user=alice@example.com)。
3. 设置预算阈值和通知。
4. 添加Budget Action:选择Apply IAM policy,附加Deny策略(限制Bedrock访问)。
当花费超过阈值时,策略自动生效,自动阻止超出预算的请求。共享角色时会影响所有用户。
风险与边界
此方法依赖AWS原生功能,易于维护,但共享IAM角色会影响多人预算控制的精确度。激活标签后可能有延迟,建议先测试。数据仅反映账单层面,无法替代运行时监控。非法律意见,仅供参考。所有实施以AWS官方文档和2026年11月12日当日数据为准。实际消耗可能因模型、区域和Token类型而异。