分析网络依赖关系

本页面介绍了如何在 Migration Center 中生成和分析网络依赖关系报告。

概览

网络依赖项报告提供有关与服务器和数据库的连接的每日汇总数据。 通过网络依赖关系报告,您可以查看与基础架构中资产的所有连接,以及每天的连接数。

如需收集网络依赖项数据,请让资产识别客户端运行几天,并启用与迁移中心同步数据的功能。然后,资产识别客户端会识别来自已扫描资产的所有网络连接。连接中的目标资产可以是您在 Migration Center 目录中通过资产识别客户端发现或手动导入的任何资产,也可以是未知资产。

网络依赖关系报告适用于以下情况:

  • 收集有关与服务器和数据库的连接的数据,以识别属于同一应用的资产,
  • 识别一组资产中相关网络连接,例如,使用 MySQL 标准端口的所有服务器
  • 识别资产库中缺失的资产

您可以从迁移中心以 CSV 文件格式下载网络依赖关系报告。然后,您可以使用 BigQuery 和 Migration Center 提供的示例查询执行分析,也可以使用任何其他第三方工具执行。

限制

  • 如需在基础架构中收集连接数据,请使用发现客户端。
  • 系统只会使用 OS 扫描方法收集网络连接数据。 vSphere 扫描不支持网络数据收集。

准备工作

  • 在创建网络依赖项报告之前,您必须使用资产识别客户端进行性能收集。

  • 在使用 BigQuery 分析网络依赖关系报告之前,请执行以下操作:

生成网络依赖关系报告

要生成网络依赖关系报告,请按以下步骤操作:

  1. 前往报告目录页面。

    转到“报告”目录

  2. 点击网络依赖关系报告

  3. 从群组列表中,选择要为哪些群组生成报告,然后点击导出

  4. 在出现的对话框中,选择要导出数据的天数(介于 10 天到 90 天之间),然后点击导出

  5. 文件生成后,点击下载

分析 BigQuery 中的网络依赖关系报告

以下部分为您提供了一些示例查询,用于分析 BigQuery 中的常见场景。您必须先将 CSV 文件上传到 BigQuery,然后才能运行查询。

使用 BigQuery 时,您需要根据 BigQuery 价格支付费用。

找出关联最多的资产

以下查询有助于确定组中连接数最多的资产。

SELECT
 LocalVMName, SUM(ConnectionCount) as TotalCount
FROM
 PROJECT.DATASET.TABLE
GROUP BY ALL
ORDER BY TotalCount DESC

请替换以下内容:

  • PROJECT:您上传 CSV 文件的 Google Cloud 项目。
  • DATASET:BigQuery 数据集。
  • TABLE:BigQuery 表。

以下是此查询的示例输出:

LocalVMName TotalCount
虚拟机 x5ua3o2w 9970
虚拟机 glg5np3w 9763
虚拟机 q3z4zfp8 9557
虚拟机 2nnsrt37 9372
虚拟机 1oah56hn 9350

按图的深度识别连接

以下查询有助于识别通过特定数量的中间连接连接到指定资源的所有资源。例如:

  • 当图表深度等于 1 时,您会发现所有与主资源直接关联的资源。
  • 将图表深度等于 2 后,您会发现所有资源都直接关联到其他资源,而这些资源又直接与主资源相关联。
DECLARE
 local_vm_name STRING DEFAULT MAIN_ASSET;
DECLARE
 depth INT64 DEFAULT DEPTH;
CREATE TEMP FUNCTION
 recursiveConnections(localVmName STRING,
   connectionsArray ARRAY<STRING>,
   depth INT64)
 RETURNS STRING
 LANGUAGE js AS r"""
 const connections = connectionsArray.map(connection => connection.split('|||'))
   .filter(connectionTuple => connectionTuple[1] !== 'Unscanned Device');
 const connectedAssets = new Set([localVmName]);
 for (let i = 0; i < depth; i++) {
   const currentSet = new Set(connectedAssets);
   for (const connection of connections) {
     /* Look for connections where the asset is the local asset */
     if (currentSet.has(connection[0])) {
       connectedAssets.add(connection[1]);
     }
     /* Look for connections where the asset is the remote asset */
     if (currentSet.has(connection[1])) {
       connectedAssets.add(connection[0]);
     }
   }
 }
 connectedAssets.delete(localVmName);
 return Array.from(connectedAssets).sort().join(', ');
""";
SELECT
 local_vm_name AS LocalVMName,
 recursiveConnections(local_vm_name,
   ARRAY_AGG(CONCAT(LocalVMName, '|||', RemoteVMName)),
   depth) AS Connections
FROM
 PROJECT.DATASET.TABLE

请替换以下内容:

  • MAIN_ASSET:您要标识其连接的资产的名称。
  • DEPTH:图表的深度。

以下是此查询的示例输出:

LocalVMName 连接
虚拟机 lv8s148f VM-2z8wp3ey、
VM-66rq2x2y、
VM-94uwyy8h、
VM-ccgmqqmb、
VM-ctqddf0u、
VM-og4n77lb、
...

按 IP 和端口范围过滤连接

通过以下查询,您可以识别使用您定义的范围内的 IP 地址和端口的资产。

CREATE TEMP FUNCTION
 ipBetween(value STRING,
   low STRING,
   high STRING) AS ( NET.IPV4_TO_INT64(NET.IP_FROM_STRING(value)) BETWEEN NET.IPV4_TO_INT64(NET.IP_FROM_STRING(low))
   AND NET.IPV4_TO_INT64(NET.IP_FROM_STRING(high)) );
SELECT
 *
FROM
 PROJECT.DATASET.TABLE
WHERE
 ((LocalPort BETWEEN PORT_START
     AND PORT_END)
   OR (RemotePort BETWEEN PORT_START
     AND PORT_END))
 AND (ipBetween(LocalIP,
     IP_START,
     IP_END)
   OR ipBetween(RemoteIP,
     IP_START,
     IP_END))

请替换以下内容:

  • PORT_START:端口范围的初始端口,例如 0
  • PORT_END:端口范围的最后一个端口,例如 1024
  • IP_START:范围的初始 IP 地址,例如 "10.26.0.0"
  • IP_END:范围的最终 IP 地址,例如 "10.26.255.255"

以下是此查询的示例输出:

Day LocalVMName LocalAssetID LocalGroups LocalIP LocalPort 协议 LocalProcessName RemoteVMName RemoteAssetID RemoteGroups RemoteIP RemotePort ConnectionCount
2024-04-18 VM-0lf60 关闭 projects/982941055174/locations/us-central1/assets/0lf60off 群组 1 10.0.45.138 272 tcp bash 虚拟机 0spdofr9 projects/982941055174/locations/us-central1/assets/0spdofr9 144.35.88.1 272 499
2024-04-18 虚拟机 Goa5uxhi projects/982941055174/locations/us-central1/assets/goa5uxhi 群组 3 10.187.175.82 781 tcp bash 虚拟机 27i5d2uj projects/982941055174/locations/us-central1/assets/27i5d2uj 22.99.72.109 781 980
2024-04-19 虚拟机 7vwy31hg projects/982941055174/locations/us-central1/assets/7vwy31hg 群组 1 10.58.166.132 21 tcp bash VM-2gq0fl37 projects/982941055174/locations/us-central1/assets/2gq0fl37 147.19.84.135 21 514

识别网络中未扫描的资产

通过以下查询,您可以识别广告联盟中未扫描的资产。 未扫描的资产是指与远程 IP 地址的连接,该 IP 地址未与迁移中心清单中的任何资产相关联。这样,您就可以识别可能需要扫描以进行评估的可能缺失的资产。

CREATE TEMP FUNCTION
 ipBetween(value STRING,
   low STRING,
   high STRING) AS ( NET.IPV4_TO_INT64(NET.IP_FROM_STRING(value)) BETWEEN NET.IPV4_TO_INT64(NET.IP_FROM_STRING(low))
   AND NET.IPV4_TO_INT64(NET.IP_FROM_STRING(high)) );
SELECT
 STRING_AGG(LocalIP, ', ') AS LocalIPs,
 RemoteIP
FROM
 PROJECT.DATASET.TABLE
WHERE
 RemoteVMName = 'Unscanned Device'
 AND ipBetween(LocalIP,
   IP_START,
   IP_END)
 AND ipBetween(RemoteIP,
   IP_START,
   IP_END)
GROUP BY
 RemoteIP

请替换以下内容:

  • IP_START:范围的初始 IP 地址,例如 "10.26.0.0"
  • IP_END:范围的最终 IP 地址,例如 "10.26.255.255"