이 페이지에서는 Migration Center에서 네트워크 종속 항목 보고서를 생성하고 분석하는 방법을 설명합니다.
개요
네트워크 종속 항목 보고서는 서버 및 데이터베이스에 연결에 대한 일일 집계 데이터를 제공합니다. 네트워크 종속 항목 보고서를 통해 인프라의 애셋에 대한 모든 연결과 일일 연결 수를 확인할 수 있습니다
네트워크 종속 항목 데이터를 수집하려면 탐색 클라이언트를 며칠 동안 실행하고 Migration Center와의 데이터 동기화를 사용 설정하면 됩니다. 그런 다음 탐색 클라이언트는 스캔된 애셋에서 모든 네트워크 연결을 식별합니다. 연결의 대상 애셋은 탐색 클라이언트로 탐색하거나 수동으로 가져온 Migration Center 인벤토리의 애셋이거나 알 수 없는 애셋일 수 있습니다.
네트워크 종속 항목 보고서는 다음 시나리오에서 유용합니다.
- 같은 애플리케이션에 속한 애셋을 식별하도록 서버 및 데이터베이스 연결에 대한 데이터 수집
- 애셋 그룹(예: MySQL 표준 포트를 사용하는 모든 서버) 내에서 관심 있는 네트워크 연결 식별
- 인벤토리에서 누락된 애셋 확인
Migration Center에서 네트워크 종속 항목 보고서를 CSV 파일로 다운로드할 수 있습니다. 그런 다음 BigQuery 및 Migration Center에서 제공하는 샘플 쿼리를 사용하여 분석을 수행하거나 다른 서드 파티 도구를 사용할 수 있습니다.
제한사항
- 인프라에서 연결 데이터를 수집하려면 탐색 클라이언트를 사용합니다.
- 네트워크 연결 데이터는 OS 스캔 방법을 통해서만 수집됩니다. vSphere 스캔에서는 네트워크 데이터 수집을 지원하지 않습니다.
시작하기 전에
네트워크 종속 항목 보고서를 만들려면 먼저 탐색 클라이언트로 성능 수집을 수행해야 합니다.
BigQuery로 네트워크 종속 항목 보고서를 분석하기 전에 다음을 수행합니다.
- 로컬 데이터를 BigQuery로 가져오는 방법을 알아보세요.
- 쿼리 실행 방법을 알아보세요.
네트워크 종속 항목 보고서 생성
네트워크 종속 항목 보고서를 생성하려면 다음 단계를 수행합니다.
보고서 카탈로그 페이지로 이동합니다.
네트워크 종속 항목 보고서를 클릭합니다.
그룹 목록에서 보고서를 생성하려는 그룹을 선택한 후 내보내기를 클릭합니다.
대화상자가 표시되면 데이터를 내보낼 일 수를 최소 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 |
---|---|
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"
)