네트워크 종속 항목 분석

이 페이지에서는 Migration Center에서 네트워크 종속 항목 보고서를 생성하고 분석하는 방법을 설명합니다.

개요

네트워크 종속 항목 보고서는 서버 및 데이터베이스에 연결에 대한 일일 집계 데이터를 제공합니다. 네트워크 종속 항목 보고서를 통해 인프라의 애셋에 대한 모든 연결과 일일 연결 수를 확인할 수 있습니다

네트워크 종속 항목 데이터를 수집하려면 탐색 클라이언트를 며칠 동안 실행하고 Migration Center와의 데이터 동기화를 사용 설정하면 됩니다. 그런 다음 탐색 클라이언트는 스캔된 애셋에서 모든 네트워크 연결을 식별합니다. 연결의 대상 애셋은 탐색 클라이언트로 탐색하거나 수동으로 가져온 Migration Center 인벤토리의 애셋이거나 알 수 없는 애셋일 수 있습니다.

네트워크 종속 항목 보고서는 다음 시나리오에서 유용합니다.

  • 같은 애플리케이션에 속한 애셋을 식별하도록 서버 및 데이터베이스 연결에 대한 데이터 수집
  • 애셋 그룹(예: MySQL 표준 포트를 사용하는 모든 서버) 내에서 관심 있는 네트워크 연결 식별
  • 인벤토리에서 누락된 애셋 확인

Migration Center에서 네트워크 종속 항목 보고서를 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
VM-x5ua3o2w 9970
VM-glg5np3w 9763
VM-q3z4zfp8 9557
VM-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 VM-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 VM-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")