AWS CloudTrail事件监控:EventBridge规则不生效排查及替代告警方案咨询
首先你已经正常运行的EC2状态变更规则属于AWS服务主动推送的原生事件,不需要依赖其他服务,其余三个未触发的规则均属于AWS API Call via CloudTrail类事件,必须满足以下前提才能正常触发:
- 对应AWS区域已经开启CloudTrail跟踪器,且跟踪器已开启管理事件的日志记录权限
- 跟踪器配置了将事件投递到EventBridge的选项(默认开启,若手动修改过需要检查)
- 你要监控的API调用行为没有被CloudTrail的事件过滤规则排除
各规则专属配置问题
1. Secrets Manager GetSecretValue规则
你当前的规则仅过滤了事件源,若需要匹配GetSecretValue调用,需要补充eventName字段:
{ "source": ["aws.secretsmanager"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["secretsmanager.amazonaws.com"], "eventName": ["GetSecretValue"] } }
额外注意:若该密钥的访问来自跨区域调用、AWS服务内部集成调用,需要确认CloudTrail已开启多区域跟踪,且对应调用行为被CloudTrail正常记录。
2. SSM StartSession规则
你当前的规则嵌套了多层参数匹配,EventBridge默认采用精确前缀匹配,只要任意一层字段的结构、值类型和CloudTrail实际记录的事件不一致,就会匹配失败。建议排查顺序:
- 先移除所有
requestParameters下的过滤条件,仅保留eventName匹配,确认规则可触发后再逐步添加过滤条件 - 确认CloudTrail记录的StartSession事件中,
localPortNumber、portNumber的字段类型为字符串,和你配置的匹配值类型一致 - 确认你发起的SSM端口转发会话的区域、实例ID和规则配置完全匹配
3. SSM TerminateSession规则
你当前配置的sessionId匹配值为********,EventBridge默认采用精确匹配,仅当实际sessionId的值为********时才会触发,属于明确的配置错误。若需要匹配所有TerminateSession事件,直接移除requestParameters下的sessionId过滤即可;若需要匹配特定前缀的sessionId,可以使用前缀匹配语法:
"sessionId": [{"prefix": "你需要匹配的sessionId前缀"}]
额外GetSessionToken事件监控提示
GetSessionToken属于STS的API调用,STS为全局服务,默认调用事件只会投递到us-east-1区域,你需要在us-east-1开启CloudTrail跟踪器并开启全局事件记录,或者配置多区域跟踪器将全局事件投递到你部署EventBridge规则的区域,才能正常捕获该事件。
1. CloudTrail + CloudWatch Logs告警
将CloudTrail日志投递到CloudWatch Logs组,针对需要监控的API事件编写自定义日志过滤器,匹配到对应日志后触发CloudWatch告警,关联SNS主题发送邮件通知。该方案支持正则匹配,比EventBridge的事件模式过滤更灵活,适合复杂场景的事件匹配。
2. AWS Config规则
针对合规类的操作监控,可以配置AWS Config的自定义规则或托管规则,当检测到目标资源的指定操作时触发通知,关联SNS发送邮件,适合需要留存操作审计记录的场景。
3. Lambda定时轮询
对实时性要求不高(延迟1-5分钟可接受)的场景,可以编写定时Lambda函数,查询CloudTrail事件历史、SSM会话历史等数据,匹配到目标事件后调用SNS发送邮件,不需要依赖EventBridge的规则匹配。
内容的提问来源于stack exchange,提问作者Shankar

