针对多个 AWS 账号需分别接受 Marketplace 私有定价报价的问题,文章介绍通过 License Manager 激活授权的两种方式:一次性脚本和持续运行的 CDK 事件驱动自动化。
当几十甚至上百个 AWS 账户都需要访问 AI 模型时,如果每个运行工作负载的账户都必须单独订阅并接受 AWS Marketplace Private Pricing Offers(MPPO),就会增加运维负担。Amazon Bedrock 的 managed entitlements 简化了第三方 AI 模型的多账户访问管理:你只需通过一个中央账户订阅一次,就能将访问权限分配给整个组织。
本文介绍两种在 AWS License Manager 中激活 AWS Marketplace Private Pricing Offer(MPPO)权益的方法。如果你已经信任收到的许可证,只需要一次性处理,又不想部署基础设施,可以使用轻量脚本。如果你需要持续运行、由事件驱动的处理流程,能够验证卖家、创建并激活分发授权,则可以使用 CDK 自动化方案。
借助 AWS Marketplace Private Pricing Offers,你可以为 Amazon Bedrock 上的第三方模型协商定制价格。符合条件的私有报价被接受后,AWS Marketplace 会在 AWS License Manager 中创建许可证。在启用了全部功能的 AWS Organizations 中,组织级授权会被自动接受,但仍保持 Disabled 状态,直到你将其激活。
团队通常会检查 AWS License Manager 控制台,手动激活授权。手动检查可以解决问题,但会增加工作量,也容易遗漏。在有人激活授权之前,协商价格不会生效。团队采用新模型或续约时,也会遇到同样的工作。
示例仓库提供了两条路径:
--apply --confirm-account-id 重新运行时,它才会创建并激活覆盖整个组织的授权。这个方案没有卖家 allow-list,因此,只有当你信任管理账户收到的每一份许可证时,才应该使用它。请从下面两条实现路径中选择一条。需要一次性激活、又不想使用 CDK 时,选择路径 1;需要持续运行的事件驱动自动化时,选择路径 2。
如果你需要一次性激活,又不想部署 CDK,可以使用这条路径。脚本会列出管理账户收到的所有许可证,因此,在应用变更之前,应先通过 dry run 审查执行计划。
将示例仓库克隆到本地,并进入项目目录。运行 git clone https://github.com/aws-samples/sample-bedrock-managed-entitlements.git,然后运行 cd sample-bedrock-managed-entitlements。
git clone https://github.com/aws-samples/sample-bedrock-managed-entitlements.git
cd sample-bedrock-managed-entitlements
以 dry-run 模式运行轻量脚本。执行 python3 lightweight/distribute_licenses.py。
python3 lightweight/distribute_licenses.py
审查列出的每一份许可证,确认其 ISV Partner 签发方和账户范围与你预期的私有报价一致。
在同一个 AWS Organizations 管理账户中,应用已审查的计划。执行 python3 lightweight/distribute_licenses.py --apply --confirm-account-id ACCOUNT_ID。
python3 lightweight/distribute_licenses.py --apply --confirm-account-id ACCOUNT_ID
授权激活后,在生产环境中依赖该私有报价之前,先验证计费流程。AWS Cost Explorer 的计费数据可能存在延迟,因此,应在费用数据出现后,用它核对私有报价所覆盖的 Amazon Bedrock 用量的实际收费。如果需要可重复执行的检查,可以调整示例工具 scripts/bedrock_discount_check.py,使其匹配你的 ISV Partner 签发方,并确认预期的折扣计费流程。
如果你希望自动处理新的私有定价协议,可以使用这条路径。CDK stack 会监听符合条件的 AWS Marketplace 协议事件,检查你的卖家 allow-list,创建分发授权,并在 License Manager 需要更多处理时间时重试激活。方案包含三个组件:
us-east-1 默认事件总线上的 AWS Marketplace 协议事件。规则匹配 source 为 aws.agreement-marketplace、detail type 为 Purchase Agreement Created - Acceptor 的事件,然后调用 AWS Lambda 函数。CreateGrantVersion(Status=ACTIVE) 请求激活。函数将处理结果记录到 Amazon CloudWatch Logs,便于审计。下图展示了事件驱动流程。
图 1:时序图展示了 AWS Marketplace 向 Amazon EventBridge 发送 Purchase Agreement Created – Acceptor 事件,随后 EventBridge 调用 AWS Lambda 函数。函数验证卖家,查找收到的许可证,创建分发授权,通过 CreateGrantVersion(Status=ACTIVE) 请求激活,并将处理结果写入 Amazon CloudWatch Logs。
这种方案的主要优势:
部署这条路径之前,请确认以下前提条件:
us-east-1 中操作,并配置好 Python 3.12+、AWS Command Line Interface(AWS CLI)和 AWS CDK v2。将示例仓库克隆到本地,并进入项目目录。运行 git clone https://github.com/aws-samples/sample-bedrock-managed-entitlements.git,然后运行 cd sample-bedrock-managed-entitlements。
git clone https://github.com/aws-samples/sample-bedrock-managed-entitlements.git
cd sample-bedrock-managed-entitlements
验证或启用组织级前提配置。执行 python3 scripts/bootstrap_prereqs.py --check --region us-east-1。在进行变更之前,审查所有标记为 APPLY 或 MANUAL 的项目。bootstrap 脚本可以启用 License Manager 的组织集成、License Manager 的 trusted access、AWS Marketplace 许可证管理的 trusted access,以及所需的 service-linked roles。执行 python3 scripts/bootstrap_prereqs.py --apply --region us-east-1 --confirm-account-id ACCOUNT_ID。
python3 scripts/bootstrap_prereqs.py --check --region us-east-1
在进行变更之前,审查所有标记为 APPLY 或 MANUAL 的项目。bootstrap 脚本可以启用 License Manager 的组织集成、License Manager 的 trusted access、AWS Marketplace 许可证管理的 trusted access,以及所需的 service-linked roles。
python3 scripts/bootstrap_prereqs.py --apply --region us-east-1 --confirm-account-id ACCOUNT_ID
配置部署参数。执行 python3 scripts/setup_config.py。审查 config/sellers.json。配置你的 Organization ID、卖家 allow-list、通知,以及可选的授权目标。默认情况下,授权面向整个组织。可以使用 grantTargets,将授权范围限定为选定的 OU 或 AWS 账户。
python3 scripts/setup_config.py
审查 config/sellers.json。配置你的 Organization ID、卖家 allow-list、通知,以及可选的授权目标。默认情况下,授权面向整个组织。可以使用 grantTargets,将授权范围限定为选定的 OU 或 AWS 账户。
部署 CDK stack。依次执行 cd cdk、pip install -r requirements.txt、cdk bootstrap aws://ACCOUNT_ID/us-east-1 和 cdk deploy。
cd cdk
pip install -r requirements.txt
cdk bootstrap aws://ACCOUNT_ID/us-east-1
cdk deploy
从 config/sellers.json 向 Amazon DynamoDB 写入初始卖家 allow-list。执行 cd ..,然后执行 python scripts/seed_sellers.py --config config/sellers.json。请将卖家 allow-list 视为安全边界。在向表中写入初始数据之前,应对照你已接受的 AWS Marketplace 私有报价,或收到的 License Manager 许可证,验证每个卖家账户 ID。不要添加范围过宽或未经验证的卖家条目,因为匹配到的卖家可能触发在你配置的所有授权目标中创建并激活授权。完成部署和卖家数据初始化后,stack 就可以处理符合条件的 AWS Marketplace 协议事件。只有 allow-list 中经过验证的卖家才能触发授权创建和激活;激活操作可能会延后,直到 License Manager 完成授权工作流的处理。
cd ..
python scripts/seed_sellers.py --config config/sellers.json
请将卖家 allow-list 视为安全边界。在向表中写入初始数据之前,应对照你已接受的 AWS Marketplace 私有报价,或收到的 License Manager 许可证,验证每个卖家账户 ID。不要添加范围过宽或未经验证的卖家条目,因为匹配到的卖家可能触发在你配置的所有授权目标中创建并激活授权。
完成部署和卖家数据初始化后,stack 就可以处理符合条件的 AWS Marketplace 协议事件。只有 allow-list 中经过验证的卖家才能触发授权创建和激活;激活操作可能会延后,直到 License Manager 完成授权工作流的处理。
验证已部署的自动化流程。执行 python scripts/e2e_validate.py --org-id o-xxxxxxxxxx --seller-account SELLER_ACCOUNT_ID --simulate。
python scripts/e2e_validate.py --org-id o-xxxxxxxxxx --seller-account SELLER_ACCOUNT_ID --simulate
在符合条件的 AWS Marketplace 协议事件发生后,验证授权是否激活。执行 aws logs tail /aws/lambda/mppo-grants-handler --follow --region us-east-1,然后执行 python scripts/bedrock_discount_check.py --issuer "ISV Partner"。授权激活以及计费数据可见,可能需要数小时甚至数天。事件驱动工作流接受并激活授权后,先在 AWS License Manager 中确认授权状态,再等计费数据出现后,在 AWS Cost Explorer 中验证报价所覆盖的 Amazon Bedrock 用量。如果需要可重复执行的检查,可以调整示例工具 scripts/bedrock_discount_check.py,使其匹配你的 ISV Partner 签发方和目标关联账户。
aws logs tail /aws/lambda/mppo-grants-handler --follow --region us-east-1
python scripts/bedrock_discount_check.py --issuer "ISV Partner"
授权激活以及计费数据可见,可能需要数小时甚至数天。事件驱动工作流接受并激活授权后,先在 AWS License Manager 中确认授权状态,再等计费数据出现后,在 AWS Cost Explorer 中验证报价所覆盖的 Amazon Bedrock 用量。如果需要可重复执行的检查,可以调整示例工具 scripts/bedrock_discount_check.py,使其匹配你的 ISV Partner 签发方和目标关联账户。
如果你只是为了测试而部署这个 stack,请将其删除,避免持续产生少量 Lambda 和 Amazon EventBridge 费用:
cdk destroy
“作为每周支持数百万次临床医生问诊的 AI Care Partner,Heidi Health 大规模使用第三方 foundation models。AWS Marketplace 的私有定价让我们能够以经济、高效的方式管理业务增长:我们可以在 AWS 账户和组织单元之间,细粒度地归集用量和价格,并在采用新模型时自动管理授权。这让平台团队能够扩大成本治理的覆盖范围,而无需相应增加人工工作。”
—— Marcus Lau,Heidi Health 平台工程负责人
本文介绍了两种为 Amazon Bedrock 私有定价报价激活 managed entitlements 的方法。如果你需要一次性激活已经信任的收到的许可证,可以使用轻量脚本;如果你需要持续处理新的 AWS Marketplace 协议,则可以部署 CDK 事件驱动自动化方案。两种方法都能减少人工操作,并帮助协商价格在分发授权激活后生效。
要开始使用,可以在你的 AWS 管理账户中尝试这个代码示例,实现模型订阅自动化。
示例代码:Amazon Bedrock with managed entitlements(GitHub)
AWS License Manager 用户指南
AWS License Manager API 参考:CreateGrantVersion
Amazon EventBridge 用户指南
AWS CDK 开发者指南