你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure PowerShell 管理 NSG 流日志

重要

2027 年 9 月 30 日,网络安全组 (NSG) 流日志将停用。 在此停用过程中,从 2025 年 6 月 30 日起,你将无法再创建新的 NSG 流日志。 建议迁移虚拟网络流日志,从而克服 NSG 流日志的限制。 自停用日期之后,将不再支持使用 NSG 流日志启用的流量分析,并且订阅中的现有 NSG 流日志资源将被删除。 但是,不会删除 NSG 流日志记录,并将继续遵循其各自的保留策略。 有关详细信息,请查看官方公告

网络安全组流日志记录是 Azure 网络观察程序的一项功能,可用于记录有关流经网络安全组的 IP 流量的信息。 有关网络安全组流日志记录的详细信息,请参阅 NSG 流日志概述

本文介绍如何使用 Azure PowerShell 创建、更改、禁用或删除 NSG 流日志。 你可以了解如何使用 Azure 门户Azure CLIREST APIARM 模板管理 NSG 流日志。

先决条件

  • 具有活动订阅的 Azure 帐户。 免费创建帐户

  • Insights 提供程序。 有关详细信息,请参阅注册 Insights 提供程序

  • 一个网络安全组。 如果需要创建网络安全组,请参阅创建、更改或删除网络安全组

  • 一个 Azure 存储帐户。 如果需要创建存储帐户,请参阅使用 PowerShell 创建存储帐户

  • Azure Cloud Shell 或本地安装的 Azure PowerShell。

    • 本文中的步骤在 Azure Cloud Shell 中以交互方式运行 Azure PowerShell cmdlet 命令。 要在 Cloud Shell 中运行命令,请选择代码块右上角的“打开 Cloud Shell”。 选择“复制”以复制代码,并将其粘贴到 Cloud Shell 以运行。 也可以从 Azure 门户中运行 Cloud Shell。

    • 也可以在本地安装 Azure PowerShell 以运行 cmdlet。 本文需要 Az PowerShell 模块。 有关详细信息,请参阅如何安装 Azure PowerShell。 要查找已安装的版本,请运行 Get-InstalledModule -Name Az。 如果在本地运行 PowerShell,请使用 Connect-AzAccount cmdlet 登录到 Azure。

注册 Insights 提供程序

必须注册 Microsoft.Insights 提供程序才能成功记录流经网络安全组的流量。 如果你不确定是否已注册 Microsoft.Insights 提供程序,请使用 Register-AzResourceProvider 来注册。

# Register Microsoft.Insights provider.
Register-AzResourceProvider -ProviderNamespace 'Microsoft.Insights'

创建流日志

  1. 分别使用 Get-AzNetworkSecurityGroupGet-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 租户相关联。 用于每个订阅的帐户必须有必要的权限
  2. 使用 New-AzNetworkWatcherFlowLog 创建流日志。 流日志是在网络观察程序默认资源组 NetworkWatcherRG 中创建的。

    # Create a version 1 NSG flow log.
    New-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'eastus' -TargetResourceId $nsg.Id -StorageId $sa.Id -Enabled $true
    

创建流日志和流量分析工作区

  1. 分别使用 Get-AzNetworkSecurityGroupGet-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'
    

    注意

    • 存储帐户不能有任何网络规则仅限 Microsoft 服务或特定虚拟网络进行网络访问。
    • 如果存储帐户位于不同的订阅中,则网络安全组和存储帐户必须与同一 Azure Active Directory 租户相关联。 用于每个订阅的帐户必须有必要的权限
  2. 使用 New-AzOperationalInsightsWorkspace 创建流量分析工作区。

    # Create a traffic analytics workspace and place its properties into a variable.
    $workspace = New-AzOperationalInsightsWorkspace -Name 'myWorkspace' -ResourceGroupName 'myResourceGroup' -Location 'eastus'
    
  3. 使用 New-AzNetworkWatcherFlowLog 创建流日志。 流日志是在网络观察程序默认资源组 NetworkWatcherRG 中创建的。

    # Create a version 1 NSG flow log with traffic analytics.
    New-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'eastus' -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 'eastus' -TargetResourceId $nsg.Id -StorageId $sa.Id -Enabled $true -FormatVersion 2 

列出区域中的所有流日志

使用 Get-AzNetworkWatcherFlowLog 列出订阅中特定区域内的所有 NSG 流日志资源。

# Get all NSG flow logs in East US region.
Get-AzNetworkWatcherFlowLog -Location 'eastus' | format-table Name

注意

若要将 -Location 参数与 Get-AzNetworkWatcherFlowLog cmdlet 结合使用,需要在 NetworkWatcherRG 资源组中拥有额外的“读取者”权限。

查看流日志资源的详细信息

使用 Get-AzNetworkWatcherFlowLog 查看流日志资源的详细信息。

# Get the details of a flow log.
Get-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'eastus'

注意

若要将 -Location 参数与 Get-AzNetworkWatcherFlowLog cmdlet 结合使用,需要在 NetworkWatcherRG 资源组中拥有额外的“读取者”权限。

下载流日志

流日志的存储位置是在创建时定义的。 若要从存储帐户访问和下载流日志,可以使用 Azure 存储资源管理器。 有关详细信息,请参阅存储资源管理器入门

NSG 流日志文件保存到存储账户的路径为:

https://{storageAccountName}.blob.core.windows.net/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 'eastus' -TargetResourceId $nsg.Id -StorageId $sa.Id

删除流日志

若要永久删除 NSG 流日志,请使用 Remove-AzNetworkWatcherFlowLog 命令。 删除流日志会删除其所有设置和关联。 若要再次为同一网络安全组开始流日志记录,必须为其创建新的流日志。

# Delete the flow log.
Remove-AzNetworkWatcherFlowLog -Name 'myFlowLog' -Location 'eastus'

备注

删除流日志不会从存储帐户中删除流日志数据。 存储帐户中存储的流日志数据遵循配置的保留策略。