使用 REST API 管理 NSG 流日志
网络安全组流日志记录是 Azure 网络观察程序的一项功能,可用于记录有关流经网络安全组的 IP 流量的信息。 有关网络安全组流日志记录的详细信息,请参阅 NSG 流日志概述。
本文介绍了如何使用 REST API 来通过 REST API 启用、禁用和查询流日志。 你可以了解如何使用 Azure 门户、PowerShellAzure CLI、Azure CLI 或 ARM 模板管理 NSG 流日志。
在本文中,你将了解如何:
- 启用流日志(版本 2)
- 禁用流日志
- 查询流日志状态
先决条件
- 具有活动订阅的 Azure 帐户。 创建试用版订阅。
- 流日志。 ARMClient 是一个简单的命令行工具,用于调用 Azure 资源管理器 API。 若要安装该工具,请参阅 ARMClient。 有关 NSG 流日志 REST API 的详细规范,请参阅流日志 - REST API
重要
在对网络观察程序进行 REST API 调用时,请求 URI 中的资源组名称是包含网络观察程序的资源组,而不是要对其执行诊断操作的资源。
使用 ARMClient 登录
使用 Azure 凭据登录到 armclient。
$env:ARMCLIENT_ENV="MOONCAKE"
armclient login
注册 Insights 提供程序
必须注册 Microsoft.Insights 提供程序才能成功记录流经网络安全组的流量。 如果不确定是否已注册 Microsoft.Insights 提供程序,请使用提供程序 - 注册 REST API 进行注册。
$subscriptionId = "00000000-0000-0000-0000-000000000000"
armclient post "https://management.chinacloudapi.cn//subscriptions/${subscriptionId}/providers/Microsoft.Insights/register?api-version=2021-04-01"
启用 NSG 流日志
以下示例显示了用于启用流日志版本 2 的命令。 对于版本 1,请将“version”字段替换为“1”:
$subscriptionId = "00000000-0000-0000-0000-000000000000"
$targetUri = "" # example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName/providers/Microsoft.Network/networkSecurityGroups/{nsgName}"
$storageId = "/subscriptions/00000000-0000-0000-0000-000000000000/{resourceGroupName/providers/Microsoft.Storage/storageAccounts/{saName}"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_chinaeast"
$requestBody = @"
{
'targetResourceId': '${targetUri}',
'properties': {
'storageId': '${storageId}',
'enabled': 'true',
'retentionPolicy' : {
days: 5,
enabled: true
},
'format': {
'type': 'JSON',
'version': 2
}
}
}
"@
armclient post "https://management.chinacloudapi.cn/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/configureFlowLog?api-version=2022-11-01" $requestBody
上述示例返回的响应如下所示:
{
"targetResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkSecurityGroups/{nsgName}",
"properties": {
"storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{saName}",
"enabled": true,
"retentionPolicy": {
"days": 5,
"enabled": true
},
"format": {
"type": "JSON",
"version": 2
}
}
}
注意
- 上面示例中使用的网络观察程序 - 设置流日志配置 已过时,可能很快就会弃用。
- 建议使用新的流日志 - 创建或更新 REST API 来创建或更新流日志。
禁用 NSG 流日志
使用以下示例禁用流日志。 该调用与启用流日志相同,但为 enabled 属性设置 false 除外。
$subscriptionId = "00000000-0000-0000-0000-000000000000"
$targetUri = "" # example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName/providers/Microsoft.Network/networkSecurityGroups/{nsgName}"
$storageId = "/subscriptions/00000000-0000-0000-0000-000000000000/{resourceGroupName/providers/Microsoft.Storage/storageAccounts/{saName}"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_chinaeast"
$requestBody = @"
{
'targetResourceId': '${targetUri}',
'properties': {
'storageId': '${storageId}',
'enabled': 'false',
'retentionPolicy' : {
days: 5,
enabled: true
},
'format': {
'type': 'JSON',
'version': 2
}
}
}
"@
armclient post "https://management.chinacloudapi.cn/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/configureFlowLog?api-version=2022-11-01" $requestBody
上述示例返回的响应如下所示:
{
"targetResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkSecurityGroups/{nsgName}",
"properties": {
"storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{saName}",
"enabled": false,
"retentionPolicy": {
"days": 5,
"enabled": true
},
"format": {
"type": "JSON",
"version": 2
}
}
}
注意
- 上面示例中使用的网络观察程序 - 设置流日志配置 已过时,可能很快就会弃用。
- 建议使用新的流日志 - 创建或更新 REST API 来禁用流日志,并使用流日志 - 删除 REST API 来删除流日志资源。
查询流日志
以下 REST 调用可查询有关网络安全组流日志的状态。
$subscriptionId = "00000000-0000-0000-0000-000000000000"
$targetUri = "" # example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName/providers/Microsoft.Network/networkSecurityGroups/{nsgName}"
$resourceGroupName = "NetworkWatcherRG"
$networkWatcherName = "NetworkWatcher_chinaeast"
$requestBody = @"
{
'targetResourceId': '${targetUri}',
}
"@
armclient post "https://management.chinacloudapi.cn/subscriptions/${subscriptionId}/ResourceGroups/${resourceGroupName}/providers/Microsoft.Network/networkWatchers/${networkWatcherName}/queryFlowLogStatus?api-version=2022-11-01" $requestBody
以下示例显示了返回的响应:
{
"targetResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkSecurityGroups/{nsgName}",
"properties": {
"storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{saName}",
"enabled": true,
"retentionPolicy": {
"days": 5,
"enabled": true
},
"format": {
"type": "JSON",
"version": 2
}
}
}
注意
- 上面示例中使用的网络观察程序 - 获取流日志状态 REST API 在网络观察程序的资源组中需要额外的读者权限。 此外,此 API 为旧版,可能很快就会弃用。
- 建议使用新的流日志 - 获取 REST API 来查询流日志。
下载流日志
流日志的存储位置是在创建时定义的。 使用 Azure 存储资源管理器,可以轻松访问存储到存储帐户的流日志。 有关详细信息,请参阅存储资源管理器入门。
如果指定了存储帐户,则数据包捕获文件将保存到以下位置的存储帐户:
https://{storageAccountName}.blob.core.chinacloudapi.cn/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 流日志。
- 若要了解流量分析,请参阅流量分析。