本页介绍如何生成和分析网络依赖关系 迁移中心内的报告
概览
网络依赖关系报告提供关于 您的服务器和数据库的连接。 通过网络依赖关系报告,您可以查看与资产的所有连接 以及每天的连接数
要收集网络依赖关系数据,您需要 资产识别客户端 并运行几天,并启用与迁移中心同步数据的功能。 然后,资产识别客户端会识别来自 已扫描的资产。关联中的目标资产可以是任何资产 迁移中心资产清单 或者您手动导入的资产识别客户端,甚至是 未知资产。
网络依赖关系报告适用于以下情况:
- 收集与服务器和数据库的连接相关的数据,以识别属于同一应用的资源
- 识别一组资产(例如使用 MySQL 标准端口的所有服务器)中的感兴趣的网络连接
- 找出商品目录中缺少的素材资源
您可以从迁移中心下载网络依赖项报告的 CSV 文件。然后,您可以使用 BigQuery 和 Migration Center 提供的示例查询, 或使用任何其他第三方工具。
限制
- 如需收集基础架构中的连接数据,请使用 资产识别客户端。
- 系统只会使用 OS 扫描方法收集网络连接数据。 vSphere 扫描不支持网络数据收集。
准备工作
在创建网络依赖关系报告之前,您必须了解 与资产识别客户端配合使用。
在使用 BigQuery 分析网络依赖关系报告之前, 执行以下操作:
- 了解如何 将本地数据导入 BigQuery。
- 了解如何 运行查询。
生成网络依赖关系报告
如需生成网络依赖项报告,请按以下步骤操作:
在 Google Cloud 控制台中,前往创建报告页面。
点击网络依赖项导出。
从群组列表中,选择您要为其生成的群组 该报告,然后点击导出。
在显示的对话框中,选择 要导出数据,最少要选择 10 个,最多 90 个,然后点击 导出。
文件生成后,点击下载。
分析 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"
。