您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

快速入门:使用 ARM 模板配置网络安全组流日志

本快速入门介绍如何使用 Azure 资源管理器模板(ARM 模板)和 Azure PowerShell 启用网络安全组 (NSG) 流日志

ARM 模板是定义项目基础结构和配置的 JavaScript 对象表示法 (JSON) 文件。 模板使用声明性语法。 在声明性语法中,你可以在不编写创建部署的编程命令序列的情况下,描述预期部署。

首先,我们将概述 NSG 流日志对象的属性。 我们将提供示例模板。 然后,我们将使用本地 Azure PowerShell 实例部署模板。

如果你的环境满足先决条件,并且你熟悉如何使用 ARM 模板,请选择“部署到 Azure”按钮。 模板将在 Azure 门户中打开。

部署到 Azure

先决条件

如果没有 Azure 订阅,请在开始之前创建一个免费帐户

查看模板

本快速入门中使用的模板来自 Azure 快速入门模板

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Region where you resources are located"
      }
    },
    "NetworkWatcherName": {
      "type": "string",
      "defaultValue": "[concat('NetworkWatcher_', parameters('location'))]",
      "metadata": {
        "description": "Name of the Network Watcher attached to your subscription. Format: NetworkWatcher_<region_name>"
      }
    },
    "FlowLogName": {
      "type": "string",
      "defaultValue": "FlowLog1",
      "metadata": {
        "description": "Chosen name of your Flow log resource"
      }
    },
    "existingNSG": {
      "type": "string",
      "metadata": {
        "description": "Resource ID of the target NSG"
      }
    },
    "RetentionDays": {
      "type": "int",
      "defaultValue": 0,
      "minValue": 0,
      "maxValue": 365,
      "metadata": {
        "description": "Retention period in days. Default is zero which stands for permanent retention. Can be any Integer from 0 to 365"
      }
    },
    "FlowLogsversion": {
      "type": "string",
      "defaultValue": "2",
      "allowedValues": [
        "1",
        "2"
      ],
      "metadata": {
        "description": "FlowLogs Version. Correct values are 1 or 2 (default)"
      }
    },
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat('flowlogs', uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      "name": "deployFlowLogs",
      "resourceGroup": "NetworkWatcherRG",
      "dependsOn": [
        "[variables('storageAccountName')]"
      ],
      "properties": {
        "mode": "Incremental",
        "expressionEvaluationOptions": {
          "scope": "inner"
        },
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "location": {
              "type": "string"
            },
            "NetworkWatcherName": {
              "type": "string"
            },
            "FlowLogName": {
              "type": "string"
            },
            "existingNSG": {
              "type": "string"
            },
            "RetentionDays": {
              "type": "int"
            },
            "FlowLogsversion": {
              "type": "string"
            },
            "storageAccountResourceId": {
              "type": "string"
            }
          },
          "resources": [
            {
              "type": "Microsoft.Network/networkWatchers/flowLogs",
              "apiVersion": "2020-06-01",
              "name": "[concat(parameters('NetworkWatcherName'), '/', parameters('FlowLogName'))]",
              "location": "[parameters('location')]",
              "properties": {
                "targetResourceId": "[parameters('existingNSG')]",
                "storageId": "[parameters('storageAccountResourceId')]",
                "enabled": true,
                "retentionPolicy": {
                  "days": "[parameters('RetentionDays')]",
                  "enabled": true
                },
                "format": {
                  "type": "JSON",
                  "version": "[parameters('FlowLogsversion')]"
                }
              }
            }
          ]
        },
        "parameters": {
          "location": {
            "value": "[parameters('location')]"
          },
          "NetworkWatcherName": {
            "value": "[parameters('NetworkWatcherName')]"
          },
          "FlowLogName": {
            "value": "[parameters('FlowLogName')]"
          },
          "existingNSG": {
            "value": "[parameters('existingNSG')]"
          },
          "RetentionDays": {
            "value": "[parameters('RetentionDays')]"
          },
          "FlowLogsversion": {
            "value": "[parameters('FlowLogsversion')]"
          },
          "storageAccountResourceId": {
            "value": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
          }
        }
      }
    }
  ]
}

该模板中定义了以下资源:

NSG 流日志对象

以下代码显示了 NSG 流日志对象及其参数。 若要创建 Microsoft.Network/networkWatchers/flowLogs 资源,请将此代码添加到模板的资源部分:

{
  "name": "string",
  "type": "Microsoft.Network/networkWatchers/flowLogs",
  "location": "string",
  "apiVersion": "2019-09-01",
  "properties": {
    "targetResourceId": "string",
    "storageId": "string",
    "enabled": "boolean",
    "flowAnalyticsConfiguration": {
      "networkWatcherFlowAnalyticsConfiguration": {
        "enabled": "boolean",
        "workspaceResourceId": "string",
        "trafficAnalyticsInterval": "integer"
      },
      "retentionPolicy": {
        "days": "integer",
        "enabled": "boolean"
      },
      "format": {
        "type": "string",
        "version": "integer"
      }
    }
  }
}

有关 NSG 流日志对象属性的完整概述,请参阅 Microsoft.Network networkWatchers/flowLogs

创建模板

如果你是第一次使用 ARM 模板,请参阅以下文章,了解有关 ARM 模板的详细信息:

下面的示例是一个完整的模板。 它也是最简单的模板版本。 该示例包含设置 NSG 流日志所需传递的最少参数。 有关更多示例,请参阅概述文章根据 Azure 资源管理器模板配置 NSG 流日志

示例

以下模板将为 NSG 启用流日志,然后将日志存储在特定的存储帐户中:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "apiProfile": "2019-09-01",
  "resources": [
    {
      "name": "NetworkWatcher_centraluseuap/Microsoft.NetworkDalanDemoPerimeterNSG",
      "type": "Microsoft.Network/networkWatchers/FlowLogs/",
      "location": "centraluseuap",
      "apiVersion": "2019-09-01",
      "properties": {
        "targetResourceId": "/subscriptions/<subscription Id>/resourceGroups/DalanDemo/providers/Microsoft.Network/networkSecurityGroups/PerimeterNSG",
        "storageId": "/subscriptions/<subscription Id>/resourceGroups/MyCanaryFlowLog/providers/Microsoft.Storage/storageAccounts/storagev2ira",
        "enabled": true,
        "flowAnalyticsConfiguration": {},
        "retentionPolicy": {},
        "format": {}
      }
    }
  ]
}

备注

  • 资源名称的格式为 ParentResource_ChildResource。 在我们的示例中,父资源为区域 Azure 网络观察程序实例:
    • Format:NetworkWatcher_RegionName
    • 示例:NetworkWatcher_centraluseuap
  • targetResourceId 是目标 NSG 的资源 ID。
  • storageId 是目标存储帐户的资源 ID。

部署模板

本教程假定你已有一个资源组和一个可以启用流日志记录的 NSG。

你可以在本地将本文所示的任意示例模板另存为 azuredeploy.json。 更新属性值,使其指向订阅中的有效资源。

若要部署模板,请在 Azure PowerShell 中运行以下命令:

$context = Get-AzSubscription -SubscriptionId <subscription Id>
Set-AzContext $context
New-AzResourceGroupDeployment -Name EnableFlowLog -ResourceGroupName NetworkWatcherRG `
    -TemplateFile "C:\MyTemplates\azuredeploy.json"

备注

这些命令会将资源部署到示例 NetworkWatcherRG 资源组,而不是包含 NSG 的资源组。

验证部署

可通过两个选项来查看部署是否成功:

  • PowerShell 控制台将 ProvisioningState 显示为 Succeeded
  • 转到 NSG 流日志门户页确认所做的更改。

如果部署出现问题,请参阅排查使用 Azure 资源管理器时的常见 Azure 部署错误

清理资源

可以使用完整部署模式删除 Azure 资源。 若要删除流日志资源,请在完整模式下指定部署,而不包含要删除的资源。 详细了解完整部署模式

还可以在 Azure 门户中禁用 NSG 流日志:

  1. 登录到 Azure 门户。
  2. 选择“所有服务”。 在“筛选器”框中,输入“网络观察程序” 。 在搜索结果中,选择“网络观察程序”。
  3. 在“日志”下,选择“NSG 流日志” 。
  4. 在 NSG 列表中,选择要为其禁用流日志的 NSG。
  5. 在“流日志设置”下选择“关闭” 。
  6. 选择“保存”。

后续步骤

本快速入门介绍了如何使用 ARM 模板来启用 NSG 流日志。 接下来,了解如何使用以下选项之一可视化 NSG 流数据: