你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
虚拟网络流日志
虚拟网络流日志是 Azure 网络观察程序的一项功能。 可以使用这些日志来记录流经虚拟网络的 IP 流量的相关信息。
虚拟网络流日志中的流数据将发送到 Azure 存储。 从那里,你可以访问数据并将其导出到任何可视化工具、安全信息和事件管理 (SIEM) 解决方案或入侵检测系统 (IDS)。 虚拟网络流日志克服了网络安全组流日志的一些限制。
为何使用流日志?
监视、管理和了解你自己的网络至关重要,这样你就可以保护和优化网络。 你可能需要知道网络的当前状态、正在连接的人员以及用户从何处进行连接。 你可能还需要知道哪些端口对 Internet 开放、哪些网络行为是预期的网络行为、哪些网络行为是异常的网络行为,以及流量何时突然上升。
流日志是云环境中所有网络活动的事实来源。 无论是尝试优化资源的初创公司,还是尝试检测入侵的大型企业,流日志都可以提供帮助。 可以使用它们来优化网络流、监视吞吐量、验证合规性、检测入侵等等。
常见用例
网络监视
- 标识未知或不需要的流量。
- 监视流量水平和带宽消耗。
- 按 IP 和端口筛选流日志,以了解应用程序的行为。
- 将流日志导出到所选的分析和可视化工具,以设置监视仪表板。
使用情况监视和优化
- 标识网络中最活跃的通信方。
- 结合 GeoIP 数据来识别跨区域流量。
- 了解流量增长情况以进行容量预测。
- 使用数据删除过度严格的流量规则。
合规性
- 使用流数据来验证网络隔离和企业访问规则的合规性。
网络取证和安全分析
- 分析来自已遭入侵的 IP 和网络接口的网络流。
- 将流日志导出到所选的任何 SIEM 或 IDS 工具。
虚拟网络流日志与网络安全组流日志的比较
虚拟网络流日志和网络安全组流日志都记录 IP 流量,但它们的行为和功能有所不同。
虚拟网络流日志简化了流量监视的范围,因为你可以在虚拟网络上启用日志记录。 通过虚拟网络中所有受支持工作负载的流量均会记录下来。
虚拟网络流日志还避免了启用多级流日志记录的需要,例如在网络安全组流日志中。 在网络安全组流日志中,网络安全组是在子网和网络接口 (NIC) 上配置的。
除了目前已支持识别网络安全组规则允许或拒绝的流量之外,虚拟网络流日志还支持识别 Azure Virtual Network Manager 安全管理规则允许或拒绝的流量。 虚拟网络流日志还支持在使用虚拟网络加密的情况下评估网络流量的加密状态。
重要
建议先禁用网络安全组流日志,然后再在同一基础工作负载上启用虚拟网络流日志,以避免重复的流量记录和额外的成本。
如果在子网的网络安全组上启用了网络安全组流日志,那么在同一子网或父虚拟网络上启用虚拟网络流日志,你可能会获得重复日志记录或仅获得虚拟网络流日志。
日志记录的工作原理
虚拟网络流日志的关键属性包括:
- 流日志在开放式系统互连 (OSI) 模型的第 4 层运行,将记录流经虚拟网络的所有 IP 流。
- 日志每隔 1 分钟通过 Azure 平台收集一次。 它们不会影响 Azure 资源或网络流量。
- 日志以 JavaScript 对象表示法 (JSON) 格式编写。
- 每条日志记录都包含流应用到的网络接口、5 元组信息、流量方向、流状态、加密状态和吞吐量信息。
- 网络中的所有流量流都通过适用的网络安全组规则或 Azure Virtual Network Manager 安全管理规则进行评估。
日志格式
虚拟网络流日志具有以下属性:
time
:记录事件的时间 (UTC)。flowLogVersion
:流日志的版本。flowLogGUID
:FlowLog
资源的资源 GUID。macAddress
:捕获事件的网络接口的 MAC 地址。category
:事件的类别。 类别始终是FlowLogFlowEvent
。flowLogResourceID
:FlowLog
资源的资源 ID。targetResourceID
:与FlowLog
资源关联的目标资源的资源 ID。operationName
:始终为FlowLogFlowEvent
。flowRecords
:流记录的集合。flows
:流的集合。 此属性包含多个用于访问控制列表 (ACL) 的条目:aclID
:评估流量的资源的标识符,可以是网络安全组或 Virtual Network Manager。 对于由于加密而被拒绝的流量,此值为unspecified
。flowGroups
:规则级别的流记录的集合:rule
:允许或拒绝流量的规则的名称。 对于由于加密而被拒绝的流量,此值为unspecified
。flowTuples
:一个字符串,包含逗号分隔格式的流元组的多个属性:Time Stamp
:表示流发生时间的时间戳,采用 UNIX epoch 格式。Source IP
:源 IP 地址。Destination IP
:目标 IP 地址。Source port
:源端口。Destination port
:目标端口。Protocol
:以 IANA 赋值表示的流的第 4 层协议。Flow direction
:流量流的方向。 有效值为I
(表示入站)和O
(表示出站)。Flow state
:流的状态。 可能的状态包括:B
:创建流时开始。 不提供任何统计信息。C
:继续执行正在进行的流。 统计信息每隔五分钟提供一次。E
:在流终止时结束。 已提供统计信息。D
:拒绝,当流被拒绝时。
Flow encryption
:流的加密状态。 此列表后面的表描述了可能的值。Packets sent
:自上次更新以来,从源发送到目标的数据包总数。Bytes sent
:自上次更新以来,从源发送到目标的数据包字节总数。 数据包字节包括数据包标头和有效负载。Packets received
:自上次更新以来,从目标发送到源的数据包总数。Bytes received
:自上次更新以来,从目标发送到源的数据包字节总数。 数据包字节包括数据包标头和有效负载。
Flow encryption
可能具有以下加密状态:
加密状态 | 说明 |
---|---|
X |
连接已加密。 已配置加密,且平台已对连接进行加密。 |
NX |
连接未加密。 记录此事件的情况有两种: - 未配置加密时。 - 当加密的虚拟机与缺少加密的终结点(例如 internet 终结点)通信时。 |
NX_HW_NOT_SUPPORTED |
硬件不受支持。 已配置加密,但虚拟机在不支持加密的主机上运行。 出现此问题的原因通常是现场可编程门阵列 (FPGA) 未连接到主机或出现故障。 请将此问题报告给 Microsoft 进行调查。 |
NX_SW_NOT_READY |
软件尚未准备好。 已配置加密,但主机网络堆栈中的软件组件 (GFT) 尚未准备好处理加密的连接。 当虚拟机首次启动、重新启动或重新部署时,可能会出现此问题。 当运行虚拟机的主机上的网络组件有更新时,也可能会出现此问题。 在所有这些情况下,都会丢弃数据包。 该问题应该是暂时的。 加密应该会在虚拟机完全启动并运行或主机上的软件更新完成后开始工作。 如果此问题的持续时间较长,请将其报告给 Microsoft 进行调查。 |
NX_NOT_ACCEPTED |
由于没有加密而删除。 在源终结点和目标终结点上都配置了加密,且启用了“如果未加密,则丢弃”策略。 如果流量加密失败,则会丢弃数据包。 |
NX_NOT_SUPPORTED |
不支持发现。 已配置加密,但未建立加密会话,因为主机网络堆栈不支持发现。 在这种情况下,将会丢弃数据包。 如果遇到此问题,请将其报告给 Microsoft 进行调查。 |
NX_LOCAL_DST |
目标位于同一主机上。 已配置加密,但源和目标虚拟机在同一 Azure 主机上运行。 在这种情况下,按照设计不对连接进行加密。 |
NX_FALLBACK |
回退到未加密。 在源终结点和目标终结点上都配置了加密,且启用了“允许未加密”策略。 系统尝试加密,但出现问题。 在这种情况下,允许建立连接,但不会对其进行加密。 例如,虚拟机最初位于支持加密的节点上,但后来此支持已删除。 |
默认情况下,虚拟网络中的流量是未加密的 (NX
)。 有关加密流量,请参阅虚拟网络加密。
示例日志记录
在下面的虚拟网络流日志示例中,有多条记录遵循前面所述的属性列表。
{
"records": [
{
"time": "2022-09-14T09:00:52.5625085Z",
"flowLogVersion": 4,
"flowLogGUID": "66aa66aa-bb77-cc88-dd99-00ee00ee00ee",
"macAddress": "112233445566",
"category": "FlowLogFlowEvent",
"flowLogResourceID": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/NETWORKWATCHERRG/PROVIDERS/MICROSOFT.NETWORK/NETWORKWATCHERS/NETWORKWATCHER_EASTUS2EUAP/FLOWLOGS/VNETFLOWLOG",
"targetResourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNet",
"operationName": "FlowLogFlowEvent",
"flowRecords": {
"flows": [
{
"aclID": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"flowGroups": [
{
"rule": "DefaultRule_AllowInternetOutBound",
"flowTuples": [
"1663146003599,10.0.0.6,192.0.2.180,23956,443,6,O,B,NX,0,0,0,0",
"1663146003606,10.0.0.6,192.0.2.180,23956,443,6,O,E,NX,3,767,2,1580",
"1663146003637,10.0.0.6,203.0.113.17,22730,443,6,O,B,NX,0,0,0,0",
"1663146003640,10.0.0.6,203.0.113.17,22730,443,6,O,E,NX,3,705,4,4569",
"1663146004251,10.0.0.6,203.0.113.17,22732,443,6,O,B,NX,0,0,0,0",
"1663146004251,10.0.0.6,203.0.113.17,22732,443,6,O,E,NX,3,705,4,4569",
"1663146004622,10.0.0.6,203.0.113.17,22734,443,6,O,B,NX,0,0,0,0",
"1663146004622,10.0.0.6,203.0.113.17,22734,443,6,O,E,NX,2,134,1,108",
"1663146017343,10.0.0.6,198.51.100.84,36776,443,6,O,B,NX,0,0,0,0",
"1663146022793,10.0.0.6,198.51.100.84,36776,443,6,O,E,NX,22,2217,33,32466"
]
}
]
},
{
"aclID": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"flowGroups": [
{
"rule": "BlockHighRiskTCPPortsFromInternet",
"flowTuples": [
"1663145998065,101.33.218.153,10.0.0.6,55188,22,6,I,D,NX,0,0,0,0",
"1663146005503,192.241.200.164,10.0.0.6,35276,119,6,I,D,NX,0,0,0,0"
]
},
{
"rule": "Internet",
"flowTuples": [
"1663145989563,192.0.2.10,10.0.0.6,50557,44357,6,I,D,NX,0,0,0,0",
"1663145989679,203.0.113.81,10.0.0.6,62797,35945,6,I,D,NX,0,0,0,0",
"1663145989709,203.0.113.5,10.0.0.6,51961,65515,6,I,D,NX,0,0,0,0",
"1663145990049,198.51.100.51,10.0.0.6,40497,40129,6,I,D,NX,0,0,0,0",
"1663145990145,203.0.113.81,10.0.0.6,62797,30472,6,I,D,NX,0,0,0,0",
"1663145990175,203.0.113.5,10.0.0.6,51961,28184,6,I,D,NX,0,0,0,0",
"1663146015545,192.0.2.10,10.0.0.6,50557,31244,6,I,D,NX,0,0,0,0"
]
}
]
}
]
}
}
]
}
日志元组和带宽计算
下面是 203.0.113.105:35370
和 10.0.0.5:23
之间的 TCP 对话流元组的示例带宽计算:
1708978215,203.0.113.105,10.0.0.5,35370,23,6,I,B,NX,,,,
1708978215,203.0.113.105,10.0.0.5,35370,23,6,I,C,NX,1021,588096,8005,4610880
1708978215,203.0.113.105,10.0.0.5,35370,23,6,I,E,NX,52,29952,47,27072
对于延续 (C
) 和结束 (E
) 流状态,字节和数据包计数是上一个流的元组记录的聚合计数。 在该示例对话中,传输的数据包总数是 1021 + 52 + 8005 + 47 = 9125。 传输的字节总数是 588096 + 29952 + 4610880 + 27072 = 5256000。
虚拟网络流日志的注意事项
存储帐户
- 位置:存储帐户必须与虚拟机位于同一区域。
- 订阅:存储帐户必须位于虚拟网络的同一订阅或与虚拟网络订阅的同一个 Microsoft Entra 租户关联的订阅中。
- 性能层:存储帐户必须为标准帐户。 不支持高级存储帐户。
- 自我管理密钥轮换:如果你更改或轮换存储帐户的访问密钥,则虚拟网络流日志将停止工作。 若要解决此问题,必须禁用并重新启用虚拟网络流日志。
专用终结点流量
无法在专用终结点本身记录流量。 可以在源 VM 上捕获流向专用终结点的流量。 流量使用 VM 的源 IP 地址和专用终结点的目标 IP 地址进行记录。 可以使用 PrivateEndpointResourceId
字段标识流向专用终结点的流量。 有关详细信息,请参阅流量分析架构。
定价
虚拟网络流日志按每千兆字节收集的网络流日志收费,并为每个订阅附送 5 GB/月的免费层。
如果使用虚拟网络流日志启用流量分析,则流量分析定价按千兆字节处理速率应用。 免费层定价不提供流量分析功能。 有关详细信息,请参阅网络观察程序定价。
日志存储单独收费。 有关详细信息,请参阅 Azure Blob 存储定价。
支持的方案
下表概述了流日志的支持范围。
范围 | 网络安全组流日志 | 虚拟网络流日志 |
---|---|---|
无状态流中的字节和数据包 | 不支持 | 支持 |
虚拟网络加密的标识 | 不支持 | 支持 |
Azure API 管理 | 不支持 | 支持 |
Azure 应用程序网关 | 不支持 | 支持 |
Azure Virtual Network Manager | 不支持 | 支持 |
ExpressRoute 网关 | 不支持 | 支持 |
虚拟机规模集 | 支持 | 支持 |
VPN 网关 | 不支持 | 支持 |
可用性
虚拟网络流日志已在所有 Azure 公共区域中正式发布,并且当前在 Azure 政府中处于预览状态。
相关内容
- 若要了解如何创建、更改、启用、禁用或删除虚拟网络流日志,请参阅 Azure 门户、PowerShell 或 Azure CLI 指南。
- 若要了解流量分析,请参阅流量分析概述和 Azure 网络观察程序流量分析中的架构和数据聚合。
- 要了解如何使用 Azure 内置策略审核或启用流量分析,请参阅使用 Azure Policy 管理流量分析。