如何确定IAM角色在Amazon S3存储桶上执行的操作以开展成本分析
解决IAM角色与S3操作的成本归因问题
要把S3成本精准对应到IAM角色的具体操作,你可以试试下面这些落地的方法:
1. 深挖CloudTrail日志(之前可能没用到核心筛选逻辑)
- 聚焦CloudTrail中
eventSource = s3.amazonaws.com且userIdentity.type = AssumedRole的日志,这里userIdentity.sessionContext.sessionIssuer.arn就是触发操作的IAM角色ARN。 - 用AWS CLI快速查询指定时间范围的S3操作日志:
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventSource,AttributeValue=s3.amazonaws.com --lookup-attributes AttributeKey=UserIdentityType,AttributeValue=AssumedRole --start-time 2024-05-01T00:00:00Z --end-time 2024-05-07T23:59:59Z
- 日志里的
eventName就是具体S3操作(比如PutObject、GetObject),resources[].ARN对应目标存储桶/对象,直接关联角色、操作和资源。 - 日志量大的话,用Athena分析CloudTrail的S3存储日志,写SQL批量筛选:
SELECT useridentity.sessioncontext.sessionissuer.arn AS role_arn, eventname AS s3_action, resources[1].arn AS s3_resource, eventtime FROM cloudtrail_logs_table WHERE eventsource = 's3.amazonaws.com' AND useridentity.type = 'AssumedRole' AND eventtime BETWEEN '2024-05-01' AND '2024-05-07';
2. 用AWS Config跟踪角色对S3的访问
- 启用AWS Config的
s3-bucket-access规则,或者自定义规则,直接捕获IAM角色对S3桶的操作记录,自动关联角色、操作和资源。 - 用CLI获取规则的合规详情:
aws configservice get-compliance-details-by-config-rule --config-rule-name s3-bucket-access --compliance-types COMPLIANT
3. 关联CUR与CloudTrail实现成本-操作映射
- CUR里的
line_item_resource_id是S3资源的ARN,和CloudTrail日志里的resources[].ARN完全匹配。 - 把CUR导出到Athena,和CloudTrail的Athena表做JOIN,直接把成本数据和角色操作关联:
SELECT cur.line_item_resource_id, cur.line_item_unblended_cost, trail.role_arn, trail.s3_action FROM cur_table cur JOIN cloudtrail_logs_table trail ON cur.line_item_resource_id = trail.resources[1].arn WHERE cur.line_item_product_code = 'AmazonS3' AND trail.eventtime BETWEEN cur.line_item_usage_start_date AND cur.line_item_usage_end_date;
4. 启用S3访问日志做补充验证
- 给目标S3桶开启访问日志,日志里的
requester字段会记录访问的IAM角色ARN,operation字段对应具体操作(比如REST.PUT.OBJECT),能直接验证角色的操作行为。
内容的提问来源于stack exchange,提问作者Aakash Thapa
相关产品推荐
相关产品推荐

