如何配置Lambda接收CloudWatch根账号登录事件日志而非仅告警信息推送至Slack
需求可行性结论
该需求完全可实现,你当前使用CloudWatch告警中转的链路天然无法传递原始CloudTrail事件字段,替换为EventBridge规则直接对接Lambda即可获取全量登录事件信息。
具体实现步骤
- 第一步:保留你已配置的组织级CloudTrail,确保所有成员账号的
ConsoleLogin事件都被正常采集到CloudTrail日志中 - 第二步:在组织的管理账号(或CloudTrail日志聚合的委托管理员账号)中创建组织级EventBridge规则,规则匹配逻辑如下:
{ "source": ["aws.signin"], "detail-type": ["AWS Console Sign In via CloudTrail"], "detail": { "userIdentity": { "type": ["Root"] }, "responseElements": { "ConsoleLogin": ["Success"] } } } - 第三步:将该EventBridge规则的目标设置为你现有发送Slack消息的Lambda,无需再经过SNS + CloudWatch告警的中转链路
- 第四步:修改Lambda代码,直接从EventBridge传入的事件参数中提取你需要的字段,常用字段示例如下:
- 登录账号ID:
event['account'] - 登录源IP:
event['detail']['sourceIPAddress'] - 登录时间:
event['time'] - 登录是否成功:
event['detail']['responseElements']['ConsoleLogin'] - 登录用户ARN:
event['detail']['userIdentity']['arn']
- 登录账号ID:
- 第五步:将提取的字段格式化后拼接为Slack消息发送即可
可选优化方案
如果不想改动现有SNS链路,也可以保持CloudWatch告警触发SNS的逻辑,在Lambda收到SNS的告警通知后,通过filter_log_events接口主动查询对应时间范围内CloudTrail日志中匹配Root登录的事件,拉取所需字段后再发送Slack消息,该方案改造成本更低,但实时性略逊于直接用EventBridge的方案。
内容的提问来源于stack exchange,提问作者I Am Robot
相关产品推荐
相关产品推荐

