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

使用 Azure PowerShell 管理 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'

备注

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

后续步骤