Analisar dependências de rede

Esta página descreve como gerar e analisar o relatório de dependências de rede no Migration Center.

Visão geral

O relatório de dependências de rede mostra dados agregados diários sobre a conexões com os servidores e bancos de dados. O relatório de dependências de rede mostra todas as conexões com os recursos na infraestrutura e o número de conexões por dia.

Para coletar os dados de dependências de rede, deixe o discovery client ser executado por vários dias e ative a sincronização dos dados com a Central de migração. O cliente de descoberta identifica todas as conexões de rede dos recursos digitalizados. Os recursos de destino na conexão podem ser qualquer recurso no inventário da Central de migração que você descobriu com o discovery client ou importou manualmente, ou até mesmo um recurso desconhecido.

O relatório de dependências de rede é útil nos seguintes cenários:

  • Coletar dados sobre conexões com servidores e bancos de dados para identificar recursos que pertencem ao mesmo aplicativo
  • Identificar conexões de rede de interesse em um grupo de recursos, como todos os servidores que usam a porta padrão do MySQL
  • Como identificar recursos ausentes no seu inventário

Você pode fazer o download do relatório de dependências de rede como um arquivo CSV na Central de migração. Em seguida, você pode realizar sua análise usando o BigQuery e as consultas de amostra fornecidas pela Central de migração; ou usar qualquer outra ferramenta de terceiros.

Limitações

  • Para coletar dados de conexão na sua infraestrutura, use o discovery client.
  • Os dados de conexões de rede são coletados apenas com o método de verificação do SO. A verificação do vSphere não é compatível com a coleta de dados de rede.

Antes de começar

  • Antes de criar um relatório de dependências de rede, você precisa verificar conjunto de dados trabalhando com o discovery client.

  • Antes de analisar o relatório de dependências de rede com o BigQuery, faça o seguinte:

Gerar o relatório de dependências de rede

Para gerar um relatório de dependências de rede, siga estas etapas:

  1. Acesse a página Catálogo de relatórios.

    Acessar o catálogo de relatórios

  2. Clique em Relatório de dependências de rede.

  3. Na lista de grupos, selecione os grupos para os quais você quer gerar o relatório e, em seguida, clique em Exportar.

  4. Na caixa de diálogo exibida, selecione o número de dias para os quais para exportar os dados, de um mínimo de 10 até 90, e clique em Exportar.

  5. Depois que o arquivo for gerado, clique em Fazer o download.

Analisar o relatório de dependências de rede no BigQuery

As seções a seguir fornecem alguns exemplos de consultas para analisar cenários comuns no BigQuery. Antes de executar uma consulta, é necessário fazer upload do arquivo CSV para o BigQuery.

Para usar o BigQuery, você vai receber cobranças de acordo com os preços do BigQuery.

Identificar recursos com mais conexões

A consulta a seguir é útil para identificar os recursos que têm o maior o número de conexões no grupo.

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

Substitua:

  • PROJECT: o projeto do Google Cloud em que você fez o upload do arquivo CSV.
  • DATASET: o conjunto de dados do BigQuery.
  • TABLE: a tabela do BigQuery.

Confira a seguir um exemplo de saída dessa consulta:

LocalVMName TotalCount
VM-x5ua3o2w 9970
VM-glg5np3w 9763
VM-q3z4zfp8 9557
VM-2nnsrt37 9372
VM-1oah56hn 9350

Identificar conexões pela profundidade do gráfico

A consulta a seguir é útil para identificar todos os recursos que se conectam a um determinado com um número específico de conexões intermediárias. Exemplo:

  • Com a profundidade do gráfico igual a 1, você encontra todos os recursos conectados diretamente ao recurso principal.
  • Com a profundidade do gráfico igual a 2, você encontra todos os recursos diretamente conectados a outros recursos, que, por sua vez, estão diretamente conectados ao principal.
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

Substitua:

  • MAIN_ASSET: o nome do recurso que você quer para identificar as conexões.
  • DEPTH: a profundidade do gráfico.

Confira a seguir um exemplo de saída dessa consulta:

LocalVMName Conexões
VM-lv8s148f VM-2z8wp3ey,
VM-66rq2x2y,
VM-94uwyy8h,
VM-ccgmqqmb,
VM-ctqddf0u,
VM-og4n77lb,
...

Filtrar conexões por IP e intervalos de portas

A consulta a seguir permite identificar os recursos que usam endereços IP e portas em intervalos definidos por você.

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))

Substitua:

  • PORT_START: a porta inicial do intervalo de portas, por exemplo, 0.
  • PORT_END: a porta final do intervalo de portas. por exemplo, 1024.
  • IP_START: o endereço IP inicial do intervalo, por exemplo, "10.26.0.0".
  • IP_END: o endereço IP final do intervalo, por exemplo, "10.26.255.255".

Veja a seguir um exemplo de saída dessa consulta:

Dia LocalVMName LocalAssetID LocalGroups LocalIP LocalPort Protocolo LocalProcessName RemoteVMName RemoteAssetID RemoteGroups RemoteIP RemotePort ConnectionCount
2024-04-18 VM-0lf60off projects/982941055174/locations/us-central1/assets/0lf60off Grupo 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 VM-goa5uxhi projects/982941055174/locations/us-central1/assets/goa5uxhi Grupo 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 VM-7vwy31hg projects/982941055174/locations/us-central1/assets/7vwy31hg Grupo 1 10.58.166.132 21 TCP bash VM-2gq0fl37 projects/982941055174/locations/us-central1/assets/2gq0fl37 147.19.84.135 21 514

Identificar recursos não verificados na rede

A consulta a seguir permite que você identifique qualquer recurso não verificado na sua rede. Um recurso não digitalizado é uma conexão com um endereço IP remoto que não está associado a nenhum recurso no inventário do Migration Center. Assim, você pode identificar possíveis recursos ausentes para verificar sua avaliação.

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

Substitua:

  • IP_START: o endereço IP inicial do intervalo, por exemplo, "10.26.0.0".
  • IP_END: o endereço IP final do intervalo, por exemplo, "10.26.255.255".