网络安全组的资源日志记录

网络安全组 (NSG) 包含的规则可以用来允许或拒绝发往虚拟网络子网和/或网络接口的流量。

为 NSG 启用日志记录时,可以收集以下类型的资源日志信息:

  • 事件:根据 MAC 地址为应用于虚拟机的 NSG 规则记录条目。
  • 规则计数器:跟踪每个 NSG 规则应用于允许或拒绝流量的次数。 每隔 300 秒收集一次这些规则的状态。

资源日志仅适用于通过 Azure 资源管理器 (ARM) 部署模型部署的 NSG。 对于通过经典部署模型部署的 NSG,无法启用资源日志记录。 有关详细信息,请参阅了解部署模型

为每个要从中收集诊断数据的 NSG 单独启用资源日志记录。 如果对 活动 日志感兴趣,请参阅 Azure 平台日志概述。 如果对流经虚拟网络的 IP 流量感兴趣,请参阅 虚拟网络流日志

启用日志记录

可使用 Azure 门户Azure PowerShellAzure CLI 来启用资源日志记录。

Azure 门户

  1. 登录到 Azure 门户

  2. 在 Azure 门户顶部的搜索框中,输入“网络安全组”。 在搜索结果中选择“网络安全组”。

  3. 选择要为其启用日志记录的 NSG。

  4. 在“监视”下,选择“诊断设置”,然后选择“添加诊断设置” 。

    屏幕截图显示了 NSG 的诊断设置,其中突出显示了“添加诊断设置”。

  5. 在“诊断设置”中,输入名称,例如 myNsgDiagnostic

  6. 对于“日志”,请选择“allLogs”或选择单个日志类别。 有关每个类别的详细信息,请参阅日志类别

  7. 在“目标详细信息”下,选择一个或多个目标:

    • 发送到 Log Analytics 工作区。
    • 存档到存储帐户。
    • 流式传输到事件中心。
    • 发送到合作伙伴解决方案。

    有关详细信息,请参阅日志目标

  8. 选择“保存”。

  9. 查看和分析日志。 有关详细信息,请参阅查看和分析日志

Azure PowerShell

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

如果在计算机上运行 PowerShell,需要 Azure PowerShell 模块 1.0.0 或更高版本。 运行 Get-Module -ListAvailable Az 查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需要运行 Connect-AzAccount -Environment AzureChinaCloud cmdlet,以使用具有所需权限的帐户登录到 Azure。

若要启用资源日志记录,需要现有 NSG 的 ID。 如果没有现成的 NSG,可使用 New-AzNetworkSecurityGroup cmdlet 创建一个 NSG。

可使用 Get-AzNetworkSecurityGroup cmdlet 获取要为之启用资源日志记录的 NSG。 将 NSG 存储在变量中以供稍后使用。 例如,要检索 myNsg 资源组中存在的名为 myResourceGroup 的 NSG,请输入以下命令:

$Nsg=Get-AzNetworkSecurityGroup `
  -Name myNsg `
  -ResourceGroupName myResourceGroup

可以将资源日志写入不同的目标类型。 有关详细信息,请参阅日志目标。 在本文中,日志将会发送到 Log Analytics 工作区目标。 如果没有现成的工作区,则可使用 New-AzOperationalInsightsWorkspace cmdlet 创建一个。

使用 Get-AzOperationalInsightsWorkspace cmdlet 检索现有的 Log Analytics 工作区。 例如,要在名为 myWorkspace 的资源组中获取和存储名为 myWorkspaces 的现有工作区,可输入以下命令:

$Oms=Get-AzOperationalInsightsWorkspace `
  -ResourceGroupName myWorkspaces `
  -Name myWorkspace

可以启用两种类别的日志记录。 有关详细信息,请参阅日志类别。 使用 Set-AzDiagnosticSetting cmdlet 为 NSG 启用资源日志记录。 以下示例将事件和规则计数器类别数据记录到 NSG 的工作区。 它使用上一个命令获取的 NSG 和工作区的 ID:

New-AzDiagnosticSetting `
   -Name myDiagnosticSetting `
   -ResourceId $Nsg.Id `
   -WorkspaceId $Oms.ResourceId

要记录到 Log Analytics 工作区之外的目标,请在命令中使用相应的参数。 有关详细信息,请参阅 Azure 资源日志

有关设置的详细信息,请参阅 New-AzDiagnosticSetting

查看和分析日志。 有关详细信息,请参阅查看和分析日志

Azure CLI

如果从计算机运行 CLI,则需要版本 2.0.28 或更高版本。 在计算机上运行 az --version,找到已安装的版本。 如果需要进行升级,请参阅安装 Azure CLI。 如果在本地运行 CLI,则还需要运行 az login,以使用具有所需权限的帐户登录到 Azure。

若要启用资源日志记录,需要现有 NSG 的 ID。 如果没有现成的 NSG,则可使用 az network nsg create 创建一个。

使用 az network nsg show 获取和存储要为其启用资源日志记录的 NSG。 例如,要检索 myNsg 资源组中存在的名为 myResourceGroup 的 NSG,请输入以下命令:

nsgId=$(az network nsg show \
  --name myNsg \
  --resource-group myResourceGroup \
  --query id \
  --output tsv)

可以将资源日志写入不同的目标类型。 有关详细信息,请参阅日志目标。 在本文中,日志作为示例发送到 Log Analytics 工作区目标。 有关详细信息,请参阅日志类别

使用 az monitor diagnostic-settings create 为 NSG 启用资源日志记录。 以下示例将事件和规则计数器类别数据记录到名为myWorkspace的现有工作区,该工作区存在于名为myWorkspaces的资源组中。 它使用您通过上一个命令获取的 NSG ID:

az monitor diagnostic-settings create \
  --name myNsgDiagnostics \
  --resource $nsgId \
  --logs '[ { "category": "NetworkSecurityGroupEvent", "enabled": true, "retentionPolicy": { "days": 30, "enabled": true } }, { "category": "NetworkSecurityGroupRuleCounter", "enabled": true, "retentionPolicy": { "days": 30, "enabled": true } } ]' \
  --workspace myWorkspace \
  --resource-group myWorkspaces

如果没有现成的工作区,则可以使用 Azure 门户Azure PowerShell 创建一个。 可以为两种类别的日志记录启用日志。

如果只想记录一种类别或另一种类别的数据,请在上一个命令中删除不想记录其数据的类别。 如果要记录到 Log Analytics 工作区之外的目标,请使用相应的参数。 有关详细信息,请参阅 Azure 资源日志

查看和分析日志。 有关详细信息,请参阅查看和分析日志

日志目标

可以将诊断数据发送到以下选项:

日志类别

为以下日志类别写入 JSON 格式的数据:

事件

事件日志包含基于 MAC 地址应用于虚拟机的 NSG 规则的信息。 对每个事件记录以下数据。 在以下示例中,会对 IP 地址为 192.168.1.4 和 MAC 地址为 00-0D-3A-92-6A-7C 的虚拟机记录数据。

{
    "time": "[DATE-TIME]",
    "systemId": "[ID]",
    "category": "NetworkSecurityGroupEvent",
    "resourceId": "/SUBSCRIPTIONS/[SUBSCRIPTION-ID]/RESOURCEGROUPS/[RESOURCE-GROUP-NAME]/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/[NSG-NAME]",
    "operationName": "NetworkSecurityGroupEvents",
    "properties": {
        "vnetResourceGuid":"[ID]",
        "subnetPrefix":"192.168.1.0/24",
        "macAddress":"00-0D-3A-92-6A-7C",
        "primaryIPv4Address":"192.168.1.4",
        "ruleName":"[SECURITY-RULE-NAME]",
        "direction":"[DIRECTION-SPECIFIED-IN-RULE]",
        "priority":"[PRIORITY-SPECIFIED-IN-RULE]",
        "type":"[ALLOW-OR-DENY-AS-SPECIFIED-IN-RULE]",
        "conditions":{
            "protocols":"[PROTOCOLS-SPECIFIED-IN-RULE]",
            "destinationPortRange":"[PORT-RANGE-SPECIFIED-IN-RULE]",
            "sourcePortRange":"[PORT-RANGE-SPECIFIED-IN-RULE]",
            "sourceIP":"[SOURCE-IP-OR-RANGE-SPECIFIED-IN-RULE]",
            "destinationIP":"[DESTINATION-IP-OR-RANGE-SPECIFIED-IN-RULE]"
            }
        }
}

规则计数器

规则计数器日志包含应用于资源的每个 NSG 规则的信息。 每次应用规则时会记录以下示例数据。 在以下示例中,会对 IP 地址为 192.168.1.4 和 MAC 地址为 00-0D-3A-92-6A-7C 的虚拟机记录数据。

{
    "time": "[DATE-TIME]",
    "systemId": "[ID]",
    "category": "NetworkSecurityGroupRuleCounter",
    "resourceId": "/SUBSCRIPTIONS/[SUBSCRIPTION ID]/RESOURCEGROUPS/[RESOURCE-GROUP-NAME]/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/[NSG-NAME]",
    "operationName": "NetworkSecurityGroupCounters",
    "properties": {
        "vnetResourceGuid":"[ID]",
        "subnetPrefix":"192.168.1.0/24",
        "macAddress":"00-0D-3A-92-6A-7C",
        "primaryIPv4Address":"192.168.1.4",
        "ruleName":"[SECURITY-RULE-NAME]",
        "direction":"[DIRECTION-SPECIFIED-IN-RULE]",
        "type":"[ALLOW-OR-DENY-AS-SPECIFIED-IN-RULE]",
        "matchedConnections":125
        }
}

注意

不会记录通信的源 IP 地址。 可以为 NSG 的虚拟网络启用 虚拟网络流日志 ,该日志会记录流经虚拟网络的所有 IP 流量。 虚拟网络流日志数据将写入虚拟网络的同一订阅和区域中的 Azure 存储帐户。 可以使用 Azure 网络观察程序的流量分析功能来分析数据。

查看和分析日志

如果将诊断数据发送到:

  • Azure 存储帐户:数据会写入到 PT1H.json 文件。 可找到以下日志:

    • 在路径中找到的事件日志: insights-logs-networksecuritygroupevent/resourceId=/SUBSCRIPTIONS/[ID]/RESOURCEGROUPS/[RESOURCE-GROUP-NAME-FOR-NSG]/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/[NSG NAME]/y=[YEAR]/m=[MONTH]/d=[DAY]/h=[HOUR]/m=[MINUTE]

    • 在路径中找到的规则计数器日志:insights-logs-networksecuritygrouprulecounter/resourceId=/SUBSCRIPTIONS/[ID]/RESOURCEGROUPS/[RESOURCE-GROUP-NAME-FOR-NSG]/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/[NSG NAME]/y=[YEAR]/m=[MONTH/d=[DAY]/h=[HOUR]/m=[MINUTE]

若要了解如何查看资源日志数据,请参阅 Azure 平台日志概述

  • 有关活动日志记录的详细信息,请参阅 Azure 平台日志概述

    默认情况下,为通过 ARM 或经典部署模型创建的 NSG 启用活动日志记录。 若要在活动日志中确定完成了哪些 NSG 相关操作,请查看含有以下资源类型的条目:

    • Microsoft.ClassicNetwork/networkSecurityGroups
    • Microsoft.ClassicNetwork/networkSecurityGroups/securityRules
    • Microsoft.Network/networkSecurityGroups
    • Microsoft.Network/networkSecurityGroups/securityRules
  • 若要了解如何记录符合 NSG 规则的流经虚拟网络的流量诊断信息,请参阅如何管理虚拟网络流日志