在Azure中使用流日志(NSG Flow Log)

时间:2022-12-24 17:57:21

流日志是Azure中一项不算偏门,但是也不是很热门的功能,之所以要拿出来介绍下,还是因为实际使用中很多时候确实能帮到一些忙

流日志和data flow之类的东西其实没什么关系,虽然名字上看起来像是个数据分析里用到的产品,但是实际上还是属于infrastructure功能里的一部分,主要用来记录流入流出安全组中的流量

我们都知道流量在出站和入站之前都是要经过安全组的,不管是子网的安全组还是网卡的安全组,既然要经过安全组,那么就可以对这些流量进行记录,流日志就是用来做这个的。至于它的作用,一方面可以对流量进行记录,审计,筛查,另外一方面,在做一些拍错的时候也会有帮助。

比如之前遇到的一个问题,想记录下两个服务之间做通信时都会用到哪些端口,以便后续精确开通安全组和防火墙用,但是使用不同功能时,用到的端口也是不同的,因此这种情况下,就可以先把流日志打开,然后正常使用一段时间产品,然后分析下流日志就都清楚了

流日志开启的方法相对简单,打开一个NSG,然后找到NSG flow log,选择create

在Azure中使用流日志(NSG Flow Log)

选择用来保存log的存储账号,设置好保存周期

在Azure中使用流日志(NSG Flow Log)

这里有两种格式,v1和v2,一般直接用v2即可,也可以通过traffic analytics的功能以可视化的方式查看log

在Azure中使用流日志(NSG Flow Log)


之后直接部署即可,NSG Flow Log不是实时的,所以大概需要等一段时间,才能到存储账号里找到log,可以看到log是按照订阅,NSG,MAC地址,以及时期时间等一系列属性进行分组的,统一名字都叫PT1H.JSON

在Azure中使用流日志(NSG Flow Log)


但是这个log可以看到对用户的可读性比较差,需要仔细查看每个字段的含义才能理解log里的内容

在Azure中使用流日志(NSG Flow Log)

v2版本的日志主要包括以下属性

  • ​time - 记录事件的时间
  • systemId - 网络安全组系统 ID。
  • 类别 - 事件的类别。 类别始终是 NetworkSecurityGroupFlowEvent
  • resourceid - NSG 的资源 ID。
  • operationName - 始终为 NetworkSecurityGroupFlowEvents
  • properties - 流属性的集合
  • Version - 流日志事件架构的版本号
  • flows - 流的集合。 此属性有多个针对不同规则的条目
  • rule - 列出流时所依据的规则
  • flows - 流的集合
  • mac - VM 的 NIC 的 MAC 地址,用于收集流
  • flowTuples - 一个字符串,包含逗号分隔格式的流元组的多个属性
  • Time Stamp - 此值为时间戳,表示流的发生时间,采用 UNIX epoch 格式
  • Source IP - 源 IP
  • Destination IP - 目标 IP
  • Source Port - 源端口
  • Destination Port - 目标端口
  • Protocol - 流的协议。 有效值为 T(表示 TCP)和 U(表示 UDP)
  • Traffic Flow - 流的方向。 有效值为 I(表示入站)和 O(表示出站)。
  • Traffic Decision - 是允许了还是拒绝了流。 有效值为 A(表示已允许)和 D(表示已拒绝)。
  • Flow State - 仅限版本 2 - 捕获流的状态。 可能的状态包括 B:创建流时开始。 未提供统计信息。 C:继续执行正在进行的流。 以 5 分钟的时间间隔提供统计信息。 E:在流终止时结束。 已提供统计信息。
  • Packets - 源到目标 - 仅限版本 2 自上次更新以来,从源发送到目标的 TCP 数据包的总数。
  • Bytes sent - 源到目标 - 仅限版本 2 自上次更新以来,从源发送到目标的 TCP 数据包字节的总数。 数据包字节包括数据包标头和有效负载。
  • Packets - 目标到源 - 仅限版本 2 自上次更新以来,从目标发送到源的 TCP 数据包的总数。
  • Bytes sent - 目标到源 - 仅限版本 2 自上次更新以来,从目标发送到源的 TCP 数据包字节的总数。 数据包字节包括数据包标头和有效负载。


按照字段一个个匹配的话就可以了解每个log的内容了,当然这种方法无疑是不可取的,还是要用工具来解决问题