如何按单个Cognito用户维度统计AWS资源使用成本
按Cognito单个用户维度统计AWS资源成本的实现方案
你提到的身份池ABAC的Principal标签无法直接同步到账单成本分配标签,是因为AWS账单仅识别资源自身绑定的标签,不会继承调用者身份的标签,所以需要额外做一层统计映射。
以下方案适配你提到的S3存储、Lambda计算两类核心资源:
1 S3存储用户级成本统计
- 路径隔离:每个Cognito用户分配唯一的S3前缀,统一使用
userdata/${cognito_user_sub}/格式,注意:Cognito用户的sub属性是全局唯一且不可修改的,作为用户标识的稳定性远高于用户名、邮箱等可修改属性。通过IAM策略限制用户仅能读写自身前缀下的对象,避免跨用户数据混存。 - 用量核算:每月定时触发任务,通过S3 Inventory功能或者
ListObjectsV2接口,按用户前缀统计每个用户的总存储容量、对象数量,结合S3当前的存储单价核算存储成本;如果需要统计请求、流量成本,可开启S3访问日志,定期解析日志按前缀聚合请求次数、出站流量后核算对应成本。
2 Lambda计算用户级成本统计
- 调用埋点:所有面向Cognito用户触发的Lambda函数,在代码执行开头从请求上下文(如API Gateway触发的场景可从
requestContext.authorizer.claims.sub提取)获取用户sub标识,在函数执行日志中输出结构化日志,格式参考:user_sub=xxx, duration=xxx, memory=xxx, billed_duration=xxx。 - 聚合统计:月度核算时通过CloudWatch Logs Insights筛选所有Lambda执行日志,按
user_sub维度聚合总调用次数、总计费时长,结合Lambda的GB-秒计费规则(配置内存GB数 * 计费时长秒数 * 单价)计算每个用户的Lambda使用成本。 - 可选优化:如果Lambda是用户专属实例,可在创建时直接绑定
cognito_user_sub自定义标签,开启成本分配标签后可直接在账单控制台筛选对应成本,无需额外日志统计。
3 可扩展的通用映射规则
如果后续需要统计更多类型的AWS资源,可按以下规则统一处理:
- 自定义一个全局统一的成本分配标签键,比如
cognito_user_sub,在AWS Billing控制台的成本分配标签中激活该标签 - 所有用户专属资源创建时直接绑定该标签,可直接在账单中按用户筛选统计
- 所有多用户共享的资源,按用户实际使用量占比将成本分摊到对应用户即可
内容的提问来源于stack exchange,提问作者Matt Miller
相关产品推荐
相关产品推荐

