收集 Azure NSG 流日志

支持的平台:

本文档介绍了如何使用 Microsoft Azure Blob Storage V2 设置 Google Security Operations Feed,以收集 Microsoft Azure NSG 流日志。

准备工作

确保您满足以下前提条件:

  • Google SecOps 实例
  • Microsoft Azure 门户的特权访问权限,包括:
    • 创建存储账号
    • 配置网络安全组 (NSG)
    • 配置网络观察程序
    • 管理访问密钥
  • Azure 订阅,并在 NSG 所在的区域启用了网络观察程序

配置 Azure 存储账号

为了存储和整理从 Azure 收集的日志数据,您必须设置存储账号并检索 Google SecOps 所需的连接凭据。

创建存储账号

  1. Azure 门户中,搜索存储账号
  2. 点击 + 创建
  3. 提供以下配置详细信息:

    设置
    订阅 选择您的 Azure 订阅
    资源组 选择现有组或创建新组
    存储账号名称 输入唯一名称(例如 nsgflowlogs
    区域 选择区域(例如 East US
    性能 标准(推荐)
    冗余 GRS(地理位置冗余存储)或 LRS(本地冗余存储)
  4. 点击检查 + 创建

  5. 查看账号概览,然后点击创建

  6. 等待部署完成。

获取存储账号凭据

  1. 前往您刚刚创建的存储账号
  2. 依次选择安全性 + 网络> 访问密钥
  3. 点击显示密钥
  4. 复制并保存以下内容以供日后使用:
    • 存储账号名称nsgflowlogs
    • 密钥 1密钥 2:共享访问密钥(采用 base64 编码的 512 位随机字符串)

获取 Blob 服务端点

  1. 在同一存储账号中,选择端点
  2. 复制并保存 Blob 服务端点网址。
    • 示例:https://nsgflowlogs.blob.core.windows.net/

配置网络安全组流日志

  1. Azure 门户中,搜索网络观察程序
  2. 依次选择日志 > NSG 流日志
  3. 点击 + 创建以创建新的流日志。
  4. 提供以下配置详细信息:
    • 订阅:选择您的订阅。
    • 网络安全组:选择要为其启用流日志的 NSG。
    • 存储账号:选择您之前创建的存储账号。
    • 保留期限(天数):选择日志的保留天数(例如 90 天)。
    • 流日志版本:选择版本 2(推荐)。
    • 启用流量分析:可选,如果您想在 Azure 中进行额外的分析,请启用此选项。
  5. 点击创建以启用 NSG 流日志。

  6. Azure 门户中,搜索网络安全组

  7. 选择要配置的 NSG

  8. 依次选择监控 > 流日志

  9. 点击创建,然后按照上述相同步骤操作。

在 Google SecOps 中配置 Feed 以注入 Microsoft Azure NSG 流日志

配置 Azure 环境后,您必须在 Google SecOps 控制台中创建 Feed,以自动执行数据提取流程。

设置 Feed

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 Azure NSG Flow Logs)。
  5. 选择 Microsoft Azure Blob Storage V2 作为来源类型
  6. 选择 Microsoft Azure NSG 流作为日志类型
  7. 点击下一步

配置 Feed 参数

  1. 为以下输入参数指定值:

    • Azure URI:输入包含容器路径的 Blob 服务端点网址

      https://<storage-account-name>.blob.core.windows.net/insights-logs-networksecuritygroupflowevent/
      
      • 替换以下内容:

        • <storage-account-name>:您的 Azure 存储账号名称。

          • 示例

            https://nsgflowlogs.blob.core.windows.net/insights-logs-networksecuritygroupflowevent/
            
    • 来源删除选项:根据您的偏好选择删除选项:

      • 永不:转移后永不删除任何文件。
      • 成功后:成功转移后删除所有文件和空目录。
    • 文件存在时间上限:输入要包含的文件的修改时间范围(以天为单位)。默认值为 180 天。

    • 共享密钥:输入您从存储账号中捕获的共享密钥值(访问密钥)。

    • 资产命名空间资产命名空间

    • 提取标签:应用于相应 Feed 中所有事件的标签。

  2. 点击下一步

  3. 最终确定界面中查看新的 Feed 配置,然后点击提交

配置 Azure 存储防火墙(如果已启用)

如果您的 Azure 存储账号使用防火墙,则必须添加 Google SecOps IP 范围。

  1. Azure 门户中,前往您的存储账号
  2. 依次选择安全和网络> 网络
  3. 防火墙和虚拟网络下,选择从所选虚拟网络和 IP 地址启用
  4. 防火墙部分的地址范围下,点击 + 添加 IP 范围
  5. 以 CIDR 表示法添加每个 Google SecOps IP 范围。

    如需获取当前的 IP 范围,请执行以下操作:

  6. 点击保存

如需详细了解 Google Security Operations Feed,请参阅 Google Security Operations Feed 文档。如需了解每种 Feed 类型的要求,请参阅按类型划分的 Feed 配置

如果您在创建 Feed 时遇到问题,请与 Google 安全运营支持团队联系

UDM 映射表

日志字段 UDM 映射 逻辑
ClientOperationId udm.additional.fields 键“ClientOperationId”设置为 ClientOperationId 的值。
CorrelationRequestId udm.additional.fields 键“CorrelationRequestId”设置为 CorrelationRequestId 的值。
GatewayManagerVersion udm.additional.fields 键“GatewayManagerVersion”设置为 GatewayManagerVersion 的值。
flow_tuple.column9 (flowstate) udm.additional.fields 对于版本 2 日志,如果 flowstate 为“B”/“b”,则将键“flow_state”设置为“BEGIN”;如果为“C”/“c”,则设置为“CONTINUE”;如果为“E”/“e”,则设置为“END”。
properties.addressfamily udm.additional.fields 键“Address Family”设置为 properties.addressfamily 的值。
properties.locprf udm.additional.fields 键“Local Pref”设置为 properties.locprf 的值。
properties.path udm.additional.fields 键“Path”设置为 properties.path 的值。
properties.peeringType udm.additional.fields 键“Peering Type”设置为 properties.peeringType 的值。
properties.weight udm.additional.fields 键“Weight”设置为 properties.weight 的值。
flow_tuple.column1 udm.metadata.collected_timestamp 从 CSV flowtupleValue 的第一列获取的值,并从 UNIX 纪元进行转换。
record.time / time udm.metadata.event_timestamp record.time(对于 records 数组事件)或 time(对于其他事件)中提取并解析的值。
udm.metadata.event_type 如果主实体和目标实体均已确定,或者对于所有内部流元组事件,则设置为 NETWORK_FLOW。如果仅标识了主体,则设置为 STATUS_UPDATE。否则,请将其设置为 GENERIC_EVENT
record.operationName / operationName udm.metadata.product_event_type record.operationNameoperationName 获取的值。
record.flowLogGUID udm.metadata.product_log_id record.flowLogGUID 中获取的值。
record.flowLogVersion / record.properties.Version / version udm.metadata.product_version record.flowLogVersionrecord.properties.Version(通过 version 变量)或顶级 version 字段获取的值。
flow_tuple.column7 (trafficFlow) udm.network.direction 如果 trafficFlow 为“I”,则值为 INBOUND;如果 trafficFlow 为“O”,则值为 OUTBOUND
flow_tuple.column6 (protocol) udm.network.ip_protocol 如果 protocol 为“T”,则值为 TCP;如果 protocol 为“U”,则值为 UDP
flow_tuple.column11 / flow_tuple.column13 udm.network.received_bytes 对于版本 2 日志,如果 trafficFlow 为“I”,则值取自 bytesSentSourceToDestinationV2(第 11 列)。如果 trafficFlow 为“O”,则值取自 bytesSentFromDestinationToSourceV2(第 13 列)。
flow_tuple.column11 / flow_tuple.column13 udm.network.sent_bytes 对于版本 2 日志,如果 trafficFlow 为“I”,则值取自 bytesSentFromDestinationToSourceV2(第 13 列)。如果 trafficFlow 为“O”,则值取自 bytesSentSourceToDestinationV2(第 11 列)。
properties.deviceName udm.principal.asset.hostname properties.deviceName 中获取的值。
record.properties.primaryIPv4Address / properties.primaryIPv4Address / SrcIP_s_s / properties.network udm.principal.asset.ip 值取自 record.properties.primaryIPv4Addressproperties.primaryIPv4AddressSrcIP_s_s 或从 properties.network 中通过 Grok 提取。
properties.vnetResourceGuid udm.principal.asset_id 值构造为“vnetResourceGuid: %{properties_vnetResourceGuid}”。从 properties.vnetResourceGuid 中提取 GUID。
properties.deviceName udm.principal.hostname properties.deviceName 中获取的值。
record.properties.primaryIPv4Address / flow_tuple.column2 / properties.primaryIPv4Address / SrcIP_s_s / properties.network udm.principal.ip record.properties.primaryIPv4AddresssourceIP(CSV 的第 2 列)、properties.primaryIPv4AddressSrcIP_s_s 获取的值或从 properties.network 中通过 grok 提取的值。
record.macAddress / record.properties.macAddress / properties.macAddress / MACAddress_s_s udm.principal.mac 值取自 record.macAddressrecord.properties.macAddressproperties.macAddressMACAddress_s_s。短划线替换为英文冒号。
flow_tuple.column4 / properties.network udm.principal.port sourcePort(CSV 的第 4 列)获取的值或从 properties.network 中通过 grok 提取的值。
properties.serviceKey udm.principal.resource.attribute.labels 键“Service Key”设置为 properties.serviceKey 的值。
properties.conditions.destinationPortRange udm.security_result.about.labels 键“Conditions_destinationPortRange”设置为 properties.conditions.destinationPortRange 的值。
properties.conditions.sourcePortRange udm.security_result.about.labels 键“Conditions_sourcePortRange”设置为 properties.conditions.sourcePortRange 的值。
record.properties.direction / properties.direction udm.security_result.about.labels 键“Direction”设置为 record.properties.directionproperties.direction 的值。
properties.priority udm.security_result.about.labels 键“Priority”设置为 properties.priority 的值。
record.properties.type / properties.type udm.security_result.about.labels 键“ruleType”设置为 record.properties.typeproperties.type 的值。
record.flowLogResourceID udm.security_result.about.resource.name record.flowLogResourceID 中获取的值。
flow_tuple.column8 (trafficDecision) udm.security_result.action 如果 trafficDecision 为“A”,则值为 ALLOW;如果 trafficDecision 为“D”,则值为 BLOCK
flow.aclID udm.security_result.detection_fields aclID[%{Index}] 设置为 flow.aclID 的值。
flowGroup.flowTuples udm.security_result.detection_fields flowTuple[%{Index}][%{Index1}][%{Index2}] 设置为流元组字符串的值。
flowGroup.rule udm.security_result.detection_fields rule[%{Index}][%{Index1}] 设置为 flowGroup.rule 的值。
record.properties.ruleName / flow.rule / properties.ruleName udm.security_result.rule_name 取自 record.properties.ruleNameflow.ruleproperties.ruleName 的值。
record.category / category udm.security_result.rule_type record.categorycategory 获取的值。
level udm.security_result.severity 如果 level 包含“信息”,则设置为 INFORMATIONAL
record.resourceId / resourceId udm.target.application appname 字段获取的值,该字段是从 record.resourceIdresourceId 中通过 Grok 提取的。
properties.nexthop / DestIP_s_s udm.target.asset.ip DestIP_s_s 获取的值或从 properties.nexthop 中通过 Grok 提取的值。
record.systemId / systemId udm.target.asset_id 该值的构造方式为“系统 ID:%{systemId}”。
udm.target.cloud.environment 设置为 MICROSOFT_AZURE
flow_tuple.column3 / properties.nexthop / DestIP_s_s udm.target.ip destinationIP(CSV 的第 3 列)、DestIP_s_s 获取的值或从 properties.nexthop 中通过 grok 提取的值。
flowTuple.mac udm.target.mac flowTuple.mac 获取的值,并使用英文冒号设置格式。
flow_tuple.column5 / DestPort_d_d udm.target.port destinationPort(CSV 的第 5 列)或 DestPort_d_d 获取的值。
record.resourceId / resourceId udm.target.resource.attribute.labels 键“NSG Name”设置为通过 grok 从资源 ID 中提取的 rscname 的值。
record.resourceId / resourceId udm.target.resource.attribute.labels 键“Resource Group”设置为通过 grok 从资源 ID 中提取的 rscgrp 的值。
record.resourceId / resourceId udm.target.resource.attribute.labels 键“Subcription Id”设置为通过 grok 从资源 ID 中提取的 subcriptionid 的值。
record.resourceId / resourceid udm.target.resource.product_object_id record.resourceIdresourceid 获取的值。
udm.target.resource.resource_type 设置为 STORAGE_BUCKET
udm.metadata.product_name 设置为 Azure NSG Flow
udm.metadata.vendor_name 设置为 Microsoft
record.time event.idm.read_only_udm.metadata.event_timestamp 从变更日志映射
record.flowLogGUID event.idm.read_only_udm.metadata.product_log_id 从变更日志映射
record.flowLogResourceID event.idm.read_only_udm.security_result.about.resource.name 从变更日志映射
record.flowLogVersion event.idm.read_only_udm.metadata.product_version 从变更日志映射
record.macAddress event.idm.read_only_udm.principal.mac 从变更日志映射
record.operationName event.idm.read_only_udm.metadata.product_event_type 从变更日志映射
records.flowRecords.flows.aclID event.idm.read_only_udm.security_result.detection_fields 从变更日志映射
record.flowRecords.flows.flowGroups.rule event.idm.read_only_udm.security_result.detection_fields 从变更日志映射
record.flowRecords.flows.flowGroups.flowTuples event.idm.read_only_udm.security_result.detection_fields 从变更日志映射
properties.direction", "properties.conditions.sourcePortRange", "properties.conditions.destinationPortRange", "properties_priority" and "properties.type security_result.about.labels 从变更日志映射
record_resourceId target.resource.product_object_id 从变更日志映射
subcriptionid", "rscgrp" and "rscname target.resource.attribute.labels 从变更日志映射

更新日志

查看相应解析器的更改日志

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。