分析网络依赖关系

本页介绍如何生成和分析网络依赖关系 迁移中心内的报告

概览

网络依赖关系报告提供关于 您的服务器和数据库的连接。 通过网络依赖关系报告,您可以查看与资产的所有连接 以及每天的连接数

要收集网络依赖关系数据,您需要 资产识别客户端 并运行几天,并启用与迁移中心同步数据的功能。 然后,资产识别客户端会识别来自 已扫描的资产。关联中的目标资产可以是任何资产 迁移中心资产清单 或者您手动导入的资产识别客户端,甚至是 未知资产。

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

  • 收集与服务器和数据库的连接相关的数据,以识别属于同一应用的资源
  • 识别一组资产(例如使用 MySQL 标准端口的所有服务器)中的感兴趣的网络连接
  • 找出商品目录中缺少的素材资源

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

限制

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

准备工作

  • 在创建网络依赖关系报告之前,您必须了解 与资产识别客户端配合使用。

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

生成网络依赖关系报告

如需生成网络依赖项报告,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往创建报告页面。

    前往“创建报告”页面

  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
VM-glg5np3w 9763
虚拟机 q3z4zfp8 9557
虚拟机 2nnsrt37 9372
VM-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 连接
VM-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"

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

LocalVMName LocalAssetID LocalGroups LocalIP LocalPort 协议 LocalProcessName RemoteVMName RemoteAssetID RemoteGroups RemoteIP RemotePort ConnectionCount
2024-04-18 VM-0lf60off projects/982941055174/locations/us-central1/assets/0lf60off 群组 1 10.0.45.138 272 tcp bash VM-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 VM-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

找出网络中未扫描的资源

您可以使用以下查询来识别网络中的所有未扫描的资源。未扫描的资产是指与未与 Migration Center 广告资源中的任何资产相关联的远程 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"