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

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

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

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

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

分别为要收集其诊断数据的每个 NSG 启用资源日志记录。 相反,如果对活动操作日志感兴趣,则请参阅 Azure 平台日志概述。 如果对通过 NSG 的 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

你需要 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 存储在变量中以供稍后使用。 例如,要检索 myResourceGroup 资源组中存在的名为 myNsg 的 NSG,请输入以下命令:

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

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

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

$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

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

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

使用 az network nsg show 获取和存储要为其启用资源日志记录的 NSG。 例如,要检索 myResourceGroup 资源组中存在的名为 myNsg 的 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]"
            }
        }
}

规则计数器

此规则计数器日志记录了应用到资源的每个规则。 每次应用规则时会记录以下示例数据。 在以下示例中,会对 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 启用 NSG 流日志记录,以便记录所有规则计数器信息以及启动通信的源 IP 地址。 NSG 流日志数据写入 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 平台日志概述

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

    • Microsoft.ClassicNetwork/networkSecurityGroups
    • Microsoft.ClassicNetwork/networkSecurityGroups/securityRules
    • Microsoft.Network/networkSecurityGroups
    • Microsoft.Network/networkSecurityGroups/securityRules
  • 要了解如何记录诊断信息,请参阅使用 Azure 门户记录传入和传出虚拟机的网络流量