Athena 查询安全组的变化

今天早上有个诊所无法连接他们的EC2 实例,简单的Troubleshoot了一下,发现安全组被人改动了,他们的IP subnet被移除了3389的访问权限,自然无法远程连接。把对应的子网加进去,就都okay了。

这个操作估计是某个I - y s Q ]管理员无意造成的。我们可以通过cloudtrail来进行删选。比如说我们可以查看revokesecuritygroupIngress 的操作,就可以知道谁进行了安全组inbound policy的删除

Athena 查询安全组的变化

如果想看细节,我们可以点进去查看Event Record

Athena 查询安全组的变化

当然,如果数据特别多,c v ~ + 我们可以通过[ ; xAthena进行查询,点击右上角的按钮 Create Athena Table$ Z P + x, 选择对应的S3 Bucket,他会自动生成对应的数据

Athena 查询安全组的变化

之后打开Athena,他已| @ v c S L =经生成了一个表,我们可以通过SQL遇见进行查询,这个表的结构和我们上面看见的Event Record里面的JSON数据是相匹配的

需要注意的是他的每一列的格式,有7 ? T 7 k的是string,有的是 struct。而在真正的JSON数据里面,有的数据,比如useridenty和 requestparameters 看起来都是嵌套的JSON格式,但是Athena的数据表里面,他们显示的% ! | u 2 Z类型却不一样,这样一来,我们对不同类型的数据写SQL语句的时候语法完全不一样

看看下面的例子, userIdentity里E M W Q o v k面的嵌I { : _ P O套的键值对是可以像对象一样直接调用的,而我的requestparameters{ Q v s ) W C 1 ,里面的键值对,我需要用 json_extract 的方式来获取

sel0 ` ? & 5 $ )ect userIdentity.username as username, eventTime,sourceIPAddress, json_extract(requestparameters,'$.groupId') as sg , r7 & r + /equestparameters from cloudtrail0 A p_logs_veZ ) y V ? Wtpartners_ec2logging
where (eventname='RevokeSecurityGroupIngress')  

过滤结果如下所示,XXX在什么时候L O 6 3 O B & 1 L对什么安全组做了怎样的删除# ) 操作,一目了然

Athena 查询安全组的变化