使用 REST API 管理 NSG 流日志
重要
2027 年 9 月 30 日,网络安全组(NSG)流日志将停用。 作为此停用的一部分,从 2025 年 6 月 30 日起,您将无法再创建新的 NSG 流日志。 建议 迁移到 虚拟网络流日志,从而克服 NSG 流日志的限制。 停用日期后,将不再支持使用 NSG 流日志启用的流量分析,并且订阅中的现有 NSG 流日志资源将被删除。 但是,不会删除 NSG 流日志记录,并且将继续遵循其各自的保留策略。 有关详细信息,请参阅 官方公告。
网络安全组流日志记录是 Azure 网络观察程序的一项功能,可用于记录流经网络安全组的 IP 流量的相关信息。 有关网络安全组流日志记录的详细信息,请参阅 NSG 流日志概述。
本文介绍如何使用 REST API 通过 REST API 启用、禁用和查询流日志。 了解如何使用 Azure 门户、PowerShell、Azure CLI或 ARM 模板来管理 NSG 流日志。
在本文中,您将了解如何:
- 启用流日志(版本 2)
- 禁用流日志
- 查询流日志状态
先决条件
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- ARMClient。 ARMClient 是一个简单的命令行工具,用于调用 Azure 资源管理器 API。 若要安装该工具,请参阅 ARMClient。 有关 NSG 流日志 REST API 的详细规范,请参阅 流日志 - REST API
重要
对网络观察程序进行 REST API 调用时,请求 URI 中的资源组名称是指包含网络观察程序的资源组,而不是正在对其执行诊断作的资源。
使用 ARMClient 登录
使用 Azure 凭据登录到 armclient。
armclient login
注册见解提供程序
必须注册 Microsoft.Insights 提供程序才能成功记录流经网络安全组的流量。 如果不确定是否已注册 Microsoft.Insights 提供程序,请使用 提供程序 - 注册 REST API 进行注册。
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
armclient post "https://management.azure.com//subscriptions/${subscriptionId}/providers/Microsoft.Insights/register?api-version=2021-04-01"
启用 NSG 流日志
以下示例显示了用于启用流日志版本 2 的命令。 对于版本 1,请将“version”字段替换为“1”:
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$targetUri = "" # example /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName/providers/Microsoft.Network/networkSecurityGroups/{nsgName}"
$storageId = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/{resourceGroupName/providers/Microsoft.Storage/storageAccounts/{saName}"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$requestBody = @"
{
'targetResourceId': '${targetUri}',
'properties': {
'storageId': '${storageId}',
'enabled': 'true',
'retentionPolicy' : {
days: 5,
enabled: true
},
'format': {
'type': 'JSON',
'version': 2
}
}
}
"@
armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/configureFlowLog?api-version=2022-11-01" $requestBody
上述示例返回的响应如下所示:
{
"targetResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkSecurityGroups/{nsgName}",
"properties": {
"storageId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{saName}",
"enabled": true,
"retentionPolicy": {
"days": 5,
"enabled": true
},
"format": {
"type": "JSON",
"version": 2
}
}
}
注意
- 网络观察者 - 用于上一示例的流日志配置的设置 REST API 已过时,可能很快就会被弃用。
- 建议使用新的 流日志 - 创建或更新 REST API 来创建或更新流日志。
禁用 NSG 流日志
使用以下示例禁用流日志。 此调用与启用流日志相同,只是将启用属性设置为 false。
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$targetUri = "" # example /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName/providers/Microsoft.Network/networkSecurityGroups/{nsgName}"
$storageId = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/{resourceGroupName/providers/Microsoft.Storage/storageAccounts/{saName}"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$requestBody = @"
{
'targetResourceId': '${targetUri}',
'properties': {
'storageId': '${storageId}',
'enabled': 'false',
'retentionPolicy' : {
days: 5,
enabled: true
},
'format': {
'type': 'JSON',
'version': 2
}
}
}
"@
armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/configureFlowLog?api-version=2022-11-01" $requestBody
上述示例返回的响应如下所示:
{
"targetResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkSecurityGroups/{nsgName}",
"properties": {
"storageId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{saName}",
"enabled": false,
"retentionPolicy": {
"days": 5,
"enabled": true
},
"format": {
"type": "JSON",
"version": 2
}
}
}
注意
- 网络观察者 - 在上一示例中使用的流日志配置 REST API 是旧的,可能很快就会被弃用。
- 建议使用新的 流日志 - 创建或更新 REST API 来禁用流日志和 流日志 - 删除 REST API 以删除流日志资源。
查询流日志
以下 REST 调用查询网络安全组上的流日志的状态。
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$targetUri = "" # example /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName/providers/Microsoft.Network/networkSecurityGroups/{nsgName}"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_westcentralus"
$requestBody = @"
{
'targetResourceId': '${targetUri}',
}
"@
armclient post "https://management.azure.com/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/queryFlowLogStatus?api-version=2022-11-01" $requestBody
以下示例显示了返回的响应:
{
"targetResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkSecurityGroups/{nsgName}",
"properties": {
"storageId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{saName}",
"enabled": true,
"retentionPolicy": {
"days": 5,
"enabled": true
},
"format": {
"type": "JSON",
"version": 2
}
}
}
注意
- 网络监视器 - 获取在上一示例中使用的流日志状态的 REST API,需要在网络监视器的资源组中具有额外的 读取器 权限。 此外,此 API 已过时,可能很快就会弃用。
- 建议使用新的 流日志 - 获取 REST API 来查询流日志。
下载流日志
流日志的存储位置是在创建时定义的。 访问保存到存储帐户的流日志的便捷工具是 Microsoft Azure 存储资源管理器。 有关详细信息,请参阅 存储资源管理器入门。
如果指定了存储帐户,数据包捕获文件将保存到以下位置的存储帐户:
https://{storageAccountName}.blob.core.windows.net/insights-logs-networksecuritygroupflowevent/resourceId=/SUBSCRIPTIONS/{subscriptionID}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/{nsgName}/y={year}/m={month}/d={day}/h={hour}/m=00/macAddress={macAddress}/PT1H.json
后续步骤
- 若要了解如何使用 Azure 内置策略审核或部署 NSG 流日志,请参阅 使用 Azure Policy管理 NSG 流日志。
- 若要了解流量分析,请参阅 流量分析。