Kusto 쿼리 언어를 사용하여 데이터 쿼리
- 5분
Microsoft Sentinel에서 KQL(Kusto Query Language)을 사용하여 수집된 데이터를 검색하고 필터링할 수 있습니다.
Kusto 쿼리 언어
KQL은 수집된 데이터에 대한 대화형 분석을 만들고, 저장하고, 실행할 수 있는 기능을 제공합니다. Microsoft Sentinel은 KQL을 사용하여 중요한 데이터를 시각화하고 분석합니다. KQL을 사용하여 다음 연산자 중 일부를 포함하는 복잡한 분석 쿼리를 만들 수 있습니다.
- 계산 열
- 조인 함수
- 집계 항목별 그룹화
기본 쿼리 작성 및 실행
쿼리는 데이터를 처리하고 데이터 또는 메타데이터를 수정하지 않고 이 처리 결과를 반환하는 읽기 전용 요청입니다. SQL 쿼리와 마찬가지로 KQL 쿼리는 데이터베이스, 테이블 및 열과 같은 계층 구조로 구성된 스키마 엔터티를 사용합니다. 스키마는 논리적 범주로 그룹화된 테이블의 컬렉션입니다. 쿼리는 세미콜론(;) 구분된 쿼리 문 시퀀스로 구성됩니다.
쿼리를 생성할 때 테이블 이름 또는 검색 명령으로 시작합니다. 예를 들어, 다음 쿼리는 Event 테이블에서 모든 레코드를 검색합니다.
Event
파이프(|) 문자를 사용하여 명령을 구분할 수 있습니다. 첫 번째 명령의 출력은 다음 명령의 입력이 됩니다. 여러 명령을 단일 쿼리에 추가할 수 있습니다. 다음 쿼리는 테이블 Event에서 레코드를 가져온 후, 속성 내 모든 error 용어를 검색합니다.
Event
| search error
테이블 형식 및 스칼라 연산자를 사용하여 쿼리를 생성할 수 있으며, KQL은 이를 여러 테이블 형식 식 문으로 결합하여 쿼리 결과를 생성합니다.
source1 | operator1 | operator2
다음 예제에서 원본은 AzureActivity입니다. 첫 번째 연산자는 논리 식을 기반으로 레코드를 필터링하는 연산자입니다 where. 두 번째 연산자는 다시 where다음과 같습니다.
AzureActivity
| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
기본적으로 Log Analytics는 쿼리를 지난 24시간의 시간 범위로 제한합니다. 다른 시간 범위를 설정하려면 쿼리에 명시적 TimeGenerated 필터를 추가하거나 컨트롤을 Time range 사용할 수 있습니다. 예를 들어 다음 쿼리는 이전 시간의 데이터를 반환합니다.
AzureActivity
| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
| where TimeGenerated > ago (1h)
쿼리를 가장 일반적으로 사용되는 연산자 중 일부와 결합할 수 있습니다.
-
count; 테이블의 행 수를 반환합니다. -
take; 지정된 데이터 행 수까지 반환합니다. -
project; 열의 하위 집합을 선택합니다. -
sort; 하나 이상의 열을 기준으로 입력 테이블의 행을 정렬합니다. -
top; 지정된 열을 기준으로 정렬된 처음 N개 레코드를 반환합니다. -
extend; 파생 열을 계산합니다. -
summarize; 행 그룹을 집합하여 처리합니다. -
render; 결과를 그래픽 출력으로 렌더링합니다.
두 원본(테이블)의 레코드를 결합하려면 연산자를 join 사용할 수 있습니다.
union 연산자는 둘 이상의 테이블을 하나로 결합합니다.
자세한 내용은 Log Analytics의 기능을 사용하여 쿼리 자체를 사용하는 대신 쿼리를 빌드하고 실행하는 Microsoft Log Analytics 자습서 를 참조하세요.
Azure Data Explorer 자습서를 사용하여 KQL에 대해 알아볼 수도 있습니다.
비고
Microsoft Sentinel Log Analytics는 Azure Data Explorer에서 사용되는 모든 KQL 구문을 지원하지 않습니다.
GitHub의 Microsoft Sentinel 리포지토리
GitHub의 Microsoft Sentinel 리포지토리 를 사용하여 환경을 보호하고 위협을 찾는 데 도움이 되는 특수 쿼리 및 통합 문서를 검색할 수도 있습니다. 예를 들어 Microsoft Sentinel GitHub 리포지토리의 다음 쿼리는 사용자 계정에 대한 의심스러운 권한 위임을 표시합니다.
let timeframe = 7d;
AzureActivity
| where TimeGenerated >= ago(timeframe)
| where OperationName == "Create role assignment"
| where ActivityStatus == "Succeeded"
| project Caller, CallerIpAddress
| evaluate basket()
| extend AccountCustomEntity = Caller, IPCustomEntity = CallerIpAddress
쿼리는 관리자가 다른 사용자에게 Azure 리소스에 대한 액세스 권한을 부여하는 IP 주소를 분석합니다. 작업이 유효한 IP 주소가 아닌 경우 쿼리는 의심스러운 활동을 알리며, 추가로 조사할 수 있습니다.
몇 가지 예제를 사용하려면 Azure Portal에서 데모 환경을 사용합니다.
지식 점검
피드백
이 페이지가 도움이 되었나요?
No
이 항목에 대한 도움이 필요하세요?
Ask Learn을 사용하여 이 주제를 명확히 설명하거나 안내하고 싶으신가요?