使用 Azure PowerShell 管理 NSG 流日志
重要
2027 年 9 月 30 日,网络安全组 (NSG) 流日志将停用。 在此停用过程中,从 2025 年 6 月 30 日起,你将无法再创建新的 NSG 流日志。 建议迁移到虚拟网络流日志,从而克服 NSG 流日志的限制。 自停用日期之后,将不再支持使用 NSG 流日志启用的流量分析,并且订阅中的现有 NSG 流日志资源将被删除。 但是,不会删除 NSG 流日志记录,并将继续遵循其各自的保留策略。 有关详细信息,请查看官方公告。
网络安全组流日志记录是 Azure 网络观察程序的一项功能,可用于记录有关流经网络安全组的 IP 流量的信息。 有关网络安全组流日志记录的详细信息,请参阅 NSG 流日志概述。
本文介绍如何使用 Azure PowerShell 创建、更改、禁用或删除 NSG 流日志。 你可以了解如何使用 Azure 门户、Azure CLI、REST API 或 ARM 模板管理 NSG 流日志。
先决条件
具有活动订阅的 Azure 帐户。 创建试用版订阅。
Insights 提供程序。 有关详细信息,请参阅注册 Insights 提供程序。
一个网络安全组。 如果需要创建网络安全组,请参阅创建、更改或删除网络安全组。
一个 Azure 存储帐户。 如果需要创建存储帐户,请参阅使用 PowerShell 创建存储帐户。
在本地安装了 Azure PowerShell。
- 可在本地安装 Azure PowerShell 来运行 cmdlet。 本文需要 Az PowerShell 模块。 有关详细信息,请参阅如何安装 Azure PowerShell。 要查找已安装的版本,请运行
Get-InstalledModule -Name Az
。 如果在本地运行 PowerShell,请使用 Connect-AzAccount -Environment AzureChinaCloud cmdlet 登录到 Azure。
- 可在本地安装 Azure PowerShell 来运行 cmdlet。 本文需要 Az PowerShell 模块。 有关详细信息,请参阅如何安装 Azure PowerShell。 要查找已安装的版本,请运行
注册 Insights 提供程序
必须注册 Microsoft.Insights 提供程序才能成功记录流经网络安全组的流量。 如果你不确定是否已注册 Microsoft.Insights 提供程序,请使用 Register-AzResourceProvider 来注册。
# Register Microsoft.Insights provider.
Register-AzResourceProvider -ProviderNamespace 'Microsoft.Insights'
创建流日志
分别使用 Get-AzNetworkSecurityGroup 和 Get-AzStorageAccount 获取要为其创建流日志的网络安全组的属性,以及要用来存储所创建的流日志的存储帐户的属性。
# Place the network security group properties into a variable. $nsg = Get-AzNetworkSecurityGroup -Name 'myNSG' -ResourceGroupName 'myResourceGroup' # Place the storage account properties into a variable. $sa = Get-AzStorageAccount -Name 'myStorageAccount' -ResourceGroupName 'myResourceGroup'
注意
- 如果存储帐户位于不同的订阅中,则网络安全组和存储帐户必须与同一 Azure Active Directory 租户相关联。 用于每个订阅的帐户必须有必要的权限。
使用 New-AzNetworkWatcherFlowLog 创建流日志。 流日志是在网络观察程序默认资源组 NetworkWatcherRG 中创建的。
# Create a version 1 NSG flow log. New-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'chinaeast' -TargetResourceId $nsg.Id -StorageId $sa.Id -Enabled $true
创建流日志和流量分析工作区
分别使用 Get-AzNetworkSecurityGroup 和 Get-AzStorageAccount 获取要为其创建流日志的网络安全组的属性,以及要用来存储所创建的流日志的存储帐户的属性。
# Place the network security group properties into a variable. $nsg = Get-AzNetworkSecurityGroup -Name 'myNSG' -ResourceGroupName 'myResourceGroup' # Place the storage account properties into a variable. $sa = Get-AzStorageAccount -Name 'myStorageAccount' -ResourceGroupName 'myResourceGroup'
注意
- 存储帐户不能有任何网络规则仅限 Azure 服务或特定虚拟网络进行网络访问。
- 如果存储帐户位于不同的订阅中,则网络安全组和存储帐户必须与同一 Azure Active Directory 租户相关联。 用于每个订阅的帐户必须有必要的权限。
使用 New-AzOperationalInsightsWorkspace 创建流量分析工作区。
# Create a traffic analytics workspace and place its properties into a variable. $workspace = New-AzOperationalInsightsWorkspace -Name 'myWorkspace' -ResourceGroupName 'myResourceGroup' -Location 'chinaeast'
使用 New-AzNetworkWatcherFlowLog 创建流日志。 流日志是在网络观察程序默认资源组 NetworkWatcherRG 中创建的。
# Create a version 1 NSG flow log with traffic analytics. New-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'chinaeast' -TargetResourceId $nsg.Id -StorageId $sa.Id -Enabled $true -EnableTrafficAnalytics -TrafficAnalyticsWorkspaceId $workspace.ResourceId
更改流日志
可以使用 Set-AzNetworkWatcherFlowLog 更改流日志的属性。 例如,可以更改流日志版本或禁用流量分析。
# Place the network security group properties into a variable.
$nsg = Get-AzNetworkSecurityGroup -Name 'myNSG' -ResourceGroupName 'myResourceGroup'
# Place the storage account properties into a variable.
$sa = Get-AzStorageAccount -Name 'myStorageAccount' -ResourceGroupName 'myResourceGroup'
# Update the NSG flow log.
Set-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'chinaeast' -TargetResourceId $nsg.Id -StorageId $sa.Id -Enabled $true -FormatVersion 2
列出区域中的所有流日志
使用 Get-AzNetworkWatcherFlowLog 列出订阅中特定区域内的所有 NSG 流日志资源。
# Get all NSG flow logs in China East region.
Get-AzNetworkWatcherFlowLog -Location 'chinaeast' | format-table Name
注意
若要将 -Location
参数与 Get-AzNetworkWatcherFlowLog
cmdlet 结合使用,需要在 NetworkWatcherRG 资源组中拥有额外的“读取者”权限。
查看流日志资源的详细信息
使用 Get-AzNetworkWatcherFlowLog 查看流日志资源的详细信息。
# Get the details of a flow log.
Get-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'chinaeast'
注意
若要将 -Location
参数与 Get-AzNetworkWatcherFlowLog
cmdlet 结合使用,需要在 NetworkWatcherRG 资源组中拥有额外的“读取者”权限。
下载流日志
流日志的存储位置是在创建时定义的。 若要从存储帐户访问和下载流日志,可以使用 Azure 存储资源管理器。 有关详细信息,请参阅存储资源管理器入门。
NSG 流日志文件保存到存储账户的路径为:
https://{storageAccountName}.blob.core.chinacloudapi.cn/insights-logs-networksecuritygroupflowevent/resourceId=/SUBSCRIPTIONS/{subscriptionID}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/{NetworkSecurityGroupName}/y={year}/m={month}/d={day}/h={hour}/m=00/macAddress={macAddress}/PT1H.json
有关流日志结构的信息,请参阅 NSG 流日志的日志格式。
禁用流日志
若要暂时禁用流日志而不将其删除,请结合 -Enabled $false
参数使用 Set-AzNetworkWatcherFlowLog。 禁用流日志会停止关联网络安全组的流日志记录。 但是,流日志资源会保留其所有设置和关联。 可以随时重新启用它,以恢复对配置的网络安全组进行流日志记录。
备注
如果为流日志启用了流量分析,则必须先禁用流量分析,然后才能禁用流日志。
# Place the network security group properties into a variable.
$nsg = Get-AzNetworkSecurityGroup -Name 'myNSG' -ResourceGroupName 'myResourceGroup'
# Place the storage account properties into a variable.
$sa = Get-AzStorageAccount -Name 'myStorageAccount' -ResourceGroupName 'myResourceGroup'
# Update the NSG flow log.
Set-AzNetworkWatcherFlowLog -Enabled $false -Name 'myFlowLog' -Location 'chinaeast' -TargetResourceId $nsg.Id -StorageId $sa.Id
删除流日志
若要永久删除 NSG 流日志,请使用 Remove-AzNetworkWatcherFlowLog 命令。 删除流日志会删除其所有设置和关联。 若要再次为同一网络安全组开始流日志记录,必须为其创建新的流日志。
# Delete the flow log.
Remove-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'chinaeast'
备注
删除流日志不会从存储帐户中删除流日志数据。 存储帐户中存储的流日志数据遵循配置的保留策略。
相关内容
- 若要了解如何使用 Azure 内置策略来审核或部署 NSG 流日志,请参阅使用 Azure Policy 管理 NSG 流日志。
- 若要了解流量分析,请参阅流量分析。