收集 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 所需的连接凭据。
创建存储账号
- 在 Azure 门户中,搜索存储账号。
- 点击 + 创建。
提供以下配置详细信息:
设置 值 订阅 选择您的 Azure 订阅 资源组 选择现有组或创建新组 存储账号名称 输入唯一名称(例如 nsgflowlogs)区域 选择区域(例如 East US)性能 标准(推荐) 冗余 GRS(地理位置冗余存储)或 LRS(本地冗余存储) 点击检查 + 创建。
查看账号概览,然后点击创建。
等待部署完成。
获取存储账号凭据
- 前往您刚刚创建的存储账号。
- 依次选择安全性 + 网络> 访问密钥。
- 点击显示密钥。
- 复制并保存以下内容以供日后使用:
- 存储账号名称:
nsgflowlogs - 密钥 1 或密钥 2:共享访问密钥(采用 base64 编码的 512 位随机字符串)
- 存储账号名称:
获取 Blob 服务端点
- 在同一存储账号中,选择端点。
- 复制并保存 Blob 服务端点网址。
- 示例:
https://nsgflowlogs.blob.core.windows.net/
- 示例:
配置网络安全组流日志
- 在 Azure 门户中,搜索网络观察程序。
- 依次选择日志 > NSG 流日志。
- 点击 + 创建以创建新的流日志。
- 提供以下配置详细信息:
- 订阅:选择您的订阅。
- 网络安全组:选择要为其启用流日志的 NSG。
- 存储账号:选择您之前创建的存储账号。
- 保留期限(天数):选择日志的保留天数(例如 90 天)。
- 流日志版本:选择版本 2(推荐)。
- 启用流量分析:可选,如果您想在 Azure 中进行额外的分析,请启用此选项。
点击创建以启用 NSG 流日志。
在 Azure 门户中,搜索网络安全组。
选择要配置的 NSG。
依次选择监控 > 流日志。
点击创建,然后按照上述相同步骤操作。
在 Google SecOps 中配置 Feed 以注入 Microsoft Azure NSG 流日志
配置 Azure 环境后,您必须在 Google SecOps 控制台中创建 Feed,以自动执行数据提取流程。
设置 Feed
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
Azure NSG Flow Logs)。 - 选择 Microsoft Azure Blob Storage V2 作为来源类型。
- 选择 Microsoft Azure NSG 流作为日志类型。
- 点击下一步。
配置 Feed 参数
为以下输入参数指定值:
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 中所有事件的标签。
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
配置 Azure 存储防火墙(如果已启用)
如果您的 Azure 存储账号使用防火墙,则必须添加 Google SecOps IP 范围。
- 在 Azure 门户中,前往您的存储账号。
- 依次选择安全和网络> 网络。
- 在防火墙和虚拟网络下,选择从所选虚拟网络和 IP 地址启用。
- 在防火墙部分的地址范围下,点击 + 添加 IP 范围。
以 CIDR 表示法添加每个 Google SecOps IP 范围。
如需获取当前的 IP 范围,请执行以下操作:
- 请参阅 IP 许可名单文档
- 或者使用 Feed Management API 以编程方式检索这些信息
点击保存。
如需详细了解 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.operationName 或 operationName 获取的值。 |
record.flowLogGUID |
udm.metadata.product_log_id |
从 record.flowLogGUID 中获取的值。 |
record.flowLogVersion / record.properties.Version / version |
udm.metadata.product_version |
从 record.flowLogVersion、record.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.primaryIPv4Address、properties.primaryIPv4Address、SrcIP_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.primaryIPv4Address、sourceIP(CSV 的第 2 列)、properties.primaryIPv4Address、SrcIP_s_s 获取的值或从 properties.network 中通过 grok 提取的值。 |
record.macAddress / record.properties.macAddress / properties.macAddress / MACAddress_s_s |
udm.principal.mac |
值取自 record.macAddress、record.properties.macAddress、properties.macAddress 或 MACAddress_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.direction 或 properties.direction 的值。 |
properties.priority |
udm.security_result.about.labels |
键“Priority”设置为 properties.priority 的值。 |
record.properties.type / properties.type |
udm.security_result.about.labels |
键“ruleType”设置为 record.properties.type 或 properties.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.ruleName、flow.rule 或 properties.ruleName 的值。 |
record.category / category |
udm.security_result.rule_type |
从 record.category 或 category 获取的值。 |
level |
udm.security_result.severity |
如果 level 包含“信息”,则设置为 INFORMATIONAL。 |
record.resourceId / resourceId |
udm.target.application |
从 appname 字段获取的值,该字段是从 record.resourceId 或 resourceId 中通过 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.resourceId 或 resourceid 获取的值。 |
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 专业人士的解答。