如何创建EventBridge过滤器过滤特定S3 GetObject事件?
AWS CloudTrail告警JSON过滤器无效排查与修正
问题描述
收到跨区域例行调用触发的邮件告警,需要过滤这类告警,但配置的JSON过滤器未生效。
告警示例
{ "Account ID": "80xxxxxxxxxx", "AWS Region": "us-east-1", "User ARN": "arn:aws:sts::80xxxxxxxxxx:assumed-role/my-team-read/logstash", "User Agent": "[aws-sdk-ruby2/2.11.632 jruby/2.6.8 java resources]", "Source IP": "11.111.111.111", "Event Time": "2023-06-21T06:51:57Z", "Event Source": "s3.amazonaws.com", "Event Type": "AwsApiCall", "Event Name": "GetObject", "Parameters": [ "production-logging", "production-logging.s3.amazonaws.com", "cloudtrail/AWSLogs/80xxxxxxxxxx/CloudTrail/ap-southeast-1/2023/06/21/80xxxxxxxxxx_CloudTrail_ap-southeast-1_20230621T0610Z_XXXXXXXXXX.json.gz" ] }
当前过滤器配置
{ "source": [ "s3.amazonaws.com" ], "detail": { "userIdentity": { "type": [ "AssumedRole" ], "arn": { "not": { "contains": [ "my-team-read/logstash" ] } } } } }
问题分析
- 字段结构不匹配:告警示例中的字段为扁平化结构(如
User ARN、Event Source),但过滤器使用了CloudTrail标准事件的嵌套结构(detail.userIdentity.arn、source),两者字段名和层级完全不符,导致无法匹配。 - 逻辑方向错误:需求是过滤掉包含
my-team-read/logstash的告警,但当前过滤器使用not contains,会保留符合该条件的事件,与需求相反。
修正后的过滤器配置
根据告警示例的字段结构,调整后的过滤器如下:
{ "Event Source": ["s3.amazonaws.com"], "User ARN": { "contains": ["my-team-read/logstash"] } }
关键说明
- 确保过滤器字段与告警事件的字段完全一致,包括大小写和名称(如
Event Source而非source,User ARN而非userIdentity.arn)。 - 过滤逻辑:若告警系统支持“匹配则不触发”,使用上述过滤器即可过滤目标事件;若系统是“匹配则触发”,则需调整为
"not": {"contains": ["my-team-read/logstash"]}并修改告警规则逻辑。 - 未指定
AWS Region字段,可覆盖所有区域的此类事件,满足跨区域过滤需求。
内容的提问来源于stack exchange,提问作者Maxamis4
相关产品推荐
相关产品推荐

