샘플 IdentityDrift 텔레메트리 및 관련 테이블을 Sentinel 데이터 레이크에 수집하여 저장합니다. 이 시리즈의 후속 문서에서 이 데이터를 쿼리할 수 있습니다.
ISV는 다음 방법을 사용하여 Sentinel에 데이터를 수집해야 합니다.
새 KQL 작업을 만들려면 다음 단계를 수행합니다.
작업에 대한 실행 일정을 설정하려면 다음을 수행합니다.
되풀이 레코드가 테이블에 추가되도록 작업 옵션을 예약합니다.
작업을 검토하고 제출하려면 다음을 수행합니다.
SigninLogs, AADRiskyUsers, CommonSecurity_ID_Logs, DeviceProcessEvents 및 SecurityAlerts 테이블에 데이터를 수집하려면 아래 각 탭의 KQL 쿼리를 사용하여 KQL 작업을 만드는 단계를 반복합니다.
KQL 작업에서 다음 쿼리를 사용하여 샘플 위험한 사용자 데이터를 Sentinel 데이터 레이크의 AADRiskyUsers 테이블에 수집합니다.
datatable(
TimeGenerated:datetime,
CorrelationId:string,
Id:string,
IsDeleted:bool,
IsProcessing:bool,
OperationName:string,
RiskDetail:string,
RiskLastUpdatedDateTime:datetime,
RiskLevel:string,
RiskState:string,
UserDisplayName:string,
UserPrincipalName:string
)
[
datetime(2026-03-05T14:22:00Z), "riskcorr-identity-047", "a7d2f8c1-4e2b-48f3-9a06-2e5c7b3d9f1a", false, false, "RiskyUserDetected", "adminConfirmedUserCompromised", datetime(2026-02-28T10:15:00Z), "high", "confirmedCompromised", "U1291", "u1291@contoso.onmicrosoft.com",
datetime(2026-03-05T15:18:00Z), "riskcorr-identity-052", "b9e4a6d2-7f3c-41b8-a2e5-3f6c8d1e2b4a", false, false, "RiskyUserUpdated", "anonymousIpAddress", datetime(2026-02-27T14:42:00Z), "medium", "atRisk", "U3415", "u3415@contoso.onmicrosoft.com",
datetime(2026-03-05T16:33:00Z), "riskcorr-identity-059", "c5f1b7e3-9d4a-42c1-b8f6-5e7d9c2a3f5b", false, false, "RiskyUserUpdated", "userPerformedSecuredPasswordReset", datetime(2026-02-26T11:20:00Z), "medium", "remediated", "U2847", "u2847@contoso.onmicrosoft.com",
];
KQL 작업에서 다음 쿼리를 사용하여 Sentinel 데이터 레이크의 CommonSecurity_ID_Logs 테이블에 샘플 ID 드리프트 로그를 수집합니다.
datatable(
TimeGenerated: datetime,
SourceUserName: string,
SourceIP: string,
DestinationHostName: string,
DeviceCustomString1: string,
DeviceCustomString1Label: string,
AdditionalExtensions: string
)
[
// u1291 – MFA-approved privileged access to AKS
datetime(2026-03-05T09:20:48Z),
"u1291@contoso.onmicrosoft.com",
"185.92.44.17",
"prod-aks-eastus",
"MFA Approved",
"Authentication Status",
"User accessed Kubernetes cluster with ClusterAdmin role",
// u1291 – privilege escalation detected
datetime(2026-03-05T09:22:36Z),
"u1291@contoso.onmicrosoft.com",
"185.92.44.17",
"prod-aks-eastus",
"Privilege Escalation",
"Authentication Status",
"RoleBinding created granting cluster-admin privileges",
// u2847 – sensitive workload interaction
datetime(2026-03-05T11:50:14Z),
"u2847@contoso.onmicrosoft.com",
"185.92.44.17",
"prod-aks-eastus",
"Sensitive Access",
"Authentication Status",
"kubectl exec executed on workload with known ingress vulnerability",
// u3415 – service-level access to backup storage
datetime(2026-03-05T10:45:02Z),
"u3415@contoso.onmicrosoft.com",
"10.10.5.24",
"stgprodbackup01",
"Access Allowed",
"Authentication Status",
"Service account accessed production backup storage"
]
KQL 작업에서 다음 쿼리를 사용하여 샘플 디바이스 프로세스 이벤트를 Sentinel 데이터 레이크의 DeviceProcessEvents 테이블에 수집합니다.
datatable(
TimeGenerated:datetime,
DeviceName:string,
DeviceId:string,
ActionType:string,
FileName:string,
FolderPath:string,
ProcessId:long,
ProcessCommandLine:string,
ProcessIntegrityLevel:string,
AccountName:string,
AccountDomain:string,
InitiatingProcessFileName:string,
InitiatingProcessCommandLine:string,
InitiatingProcessAccountName:string,
InitiatingProcessAccountDomain:string
)
[
// Record 1 – Azure CLI authentication and subscription context
datetime(2026-03-05T09:23:15.445Z),
"WIN-DESKTOP-CONTOSO-401",
"d7e2f9c3a5b1e8d4c6f2",
"ProcessCreated",
"az.exe",
@"C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\",
4156,
"az login",
"Medium",
"u1291",
"contoso.onmicrosoft.com",
"powershell.exe",
"powershell.exe -Command az login",
"u1291",
"contoso.onmicrosoft.com",
// Record 2 – AKS credential retrieval (kubectl context setup)
datetime(2026-03-05T10:47:22.831Z),
"WIN-DESKTOP-CONTOSO-502",
"c3a4b8d2e7f1a5c9e6d4",
"ProcessCreated",
"az.exe",
@"C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\",
5843,
"az aks get-credentials --resource-group rg-prod --name prod-aks-eastus",
"Medium",
"u3415",
"contoso.onmicrosoft.com",
"cmd.exe",
"cmd.exe /c az aks get-credentials --resource-group rg-prod --name prod-aks-eastus",
"u3415",
"contoso.onmicrosoft.com",
// Record 3 – Kubernetes workload inspection
datetime(2026-03-05T11:52:09.567Z),
"WIN-DESKTOP-CONTOSO-603",
"b9c1d5e8f2a4c6d9e1f3",
"ProcessCreated",
"kubectl.exe",
@"C:\Program Files\Kubernetes\",
6521,
"kubectl get pods -A",
"High",
"u2847",
"contoso.onmicrosoft.com",
"explorer.exe",
"explorer.exe",
"u2847",
"contoso.onmicrosoft.com"
]
KQL 작업에서 다음 쿼리를 사용하여 샘플 보안 경고를 Sentinel 데이터 레이크의 SecurityAlerts 테이블에 수집합니다.
datatable(
TimeGenerated: datetime,
DisplayName: string,
AlertName: string,
AlertSeverity: string,
Description: string,
ProviderName: string,
VendorName: string,
AlertType: string,
ConfidenceLevel: string,
IsIncident: bool,
CompromisedEntity: string,
ExtendedProperties: dynamic,
Entities: dynamic,
ProductName: string
)
[
// AKS – malware execution blocked after privilege escalation activity
datetime(2026-03-05T09:24:10Z),
"Microsoft Defender for Cloud Kubernetes malware execution blocked",
"Kubernetes malware execution blocked on node",
"High",
"Malware execution was detected and blocked on a Kubernetes node. The activity occurred shortly after privileged access and RBAC changes were performed on the cluster, increasing confidence of malicious intent.",
"Azure Security Center",
"Microsoft",
"K8S.NODE_MalwareBlocked",
"High",
true,
"prod-aks-eastus",
dynamic({
"ClusterName": "prod-aks-eastus",
"Namespace": "prod",
"NodeRole": "Worker",
"DetectionSource": "microsoftDefenderForContainers",
"SuspiciousActivity": "Malware execution in container runtime",
"RelatedContext": "Recent ClusterAdmin access and RoleBinding creation detected"
}),
dynamic([
{
"Type": "KubernetesCluster",
"Name": "prod-aks-eastus",
"CloudPlatform": "Azure"
},
{
"Type": "Host",
"HostName": "prod-aks-eastus"
}
]),
"Azure Security Center",
// AKS – binary drift blocked on vulnerable workload
datetime(2026-03-05T11:51:58Z),
"Microsoft Defender for Cloud Kubernetes binary drift blocked",
"Kubernetes workload binary drift blocked",
"Medium",
"Execution of a workload binary that drifted from the original container image was detected and blocked. The affected workload resides in a production Kubernetes cluster and is associated with a workload previously accessed via kubectl exec.",
"Azure Security Center",
"Microsoft",
"K8S.NODE_DriftBlocked",
"Medium",
true,
"prod-aks-eastus",
dynamic({
"ClusterName": "prod-aks-eastus",
"Namespace": "prod",
"Workload": "ingress-controller",
"DriftType": "Binary drift from image baseline",
"DetectionSource": "microsoftDefenderForContainers"
}),
dynamic([
{
"Type": "KubernetesCluster",
"Name": "prod-aks-eastus",
"CloudPlatform": "Azure"
},
{
"Type": "Host",
"HostName": "prod-aks-eastus"
}
]),
"Azure Security Center"
];
KQL 작업에서 다음 쿼리를 사용하여 Sentinel 데이터 레이크의 SigninLogs 테이블에 샘플 로그인 로그를 수집합니다.
datatable(
TimeGenerated: datetime,
UserPrincipalName: string,
UserId: string,
AppDisplayName: string,
ClientAppUsed: string,
AuthenticationRequirement: string,
ConditionalAccessStatus: string,
RiskLevelAggregated: string,
RiskState: string,
RiskDetail: string,
Location: dynamic,
IPAddress: string,
DeviceDetail: dynamic,
Status: dynamic
)
[
// Normal sign-in from known device and location (baseline)
datetime(2026-03-08T14:10:00Z),
"u1291@contoso.onmicrosoft.com",
"9214593d-65f8-43fd-c4a5-f80aty691141",
"Microsoft Teams",
"Browser",
"singleFactorAuthentication",
"success",
"low",
"none",
"noRiskDetected",
dynamic({"countryOrRegion":"US","state":"Texas","city":"Dallas"}),
"20.81.45.10",
dynamic({"deviceId":"device-jm-001","operatingSystem":"Windows 11","browser":"Edge","isCompliant":true,"isManaged":true}),
dynamic({"errorCode":0,"failureReason":"None"}),
// Identity drift: new device and new geographic location
datetime(2026-03-08T14:18:00Z),
"u1291@contoso.onmicrosoft.com",
"9214593d-65f8-43fd-c4a5-f80aty691141",
"Azure Portal",
"Browser",
"multiFactorAuthentication",
"success",
"medium",
"atRisk",
"newDevice",
dynamic({"countryOrRegion":"Germany","state":"Berlin","city":"Berlin"}),
"91.198.174.22",
dynamic({"deviceId":"unknown","operatingSystem":"Linux","browser":"Chrome","isCompliant":false,"isManaged":false}),
dynamic({"errorCode":0,"failureReason":"MFA required due to unfamiliar sign-in"}),
// Identity drift: impossible travel detected
datetime(2026-03-08T14:21:00Z),
"u3415@contoso.onmicrosoft.com",
"8214593d-75e8-4efd-c4a5-f80aty691131",
"Microsoft 365",
"Browser",
"multiFactorAuthentication",
"success",
"high",
"confirmedCompromised",
"impossibleTravel",
dynamic({"countryOrRegion":"China","state":"Beijing","city":"Beijing"}),
"101.226.4.6",
dynamic({"deviceId":"unknown","operatingSystem":"macOS","browser":"Safari","isCompliant":false,"isManaged":false}),
dynamic({"errorCode":0,"failureReason":"Impossible travel detected"}),
// Identity drift: sign-in blocked by Conditional Access
datetime(2026-03-08T14:25:00Z),
"u1291@contoso.onmicrosoft.com",
"3214593d-65f8-53fd-c4a5-c80aty691441",
"Azure DevOps",
"Browser",
"singleFactorAuthentication",
"failure",
"high",
"atRisk",
"anomalousToken",
dynamic({"countryOrRegion":"Russia","state":"Moscow","city":"Moscow"}),
"185.199.108.153",
dynamic({"deviceId":"unknown","operatingSystem":"Windows 10","browser":"Firefox","isCompliant":false,"isManaged":false}),
dynamic({"errorCode":53003,"failureReason":"Access blocked by Conditional Access policy"})
];
이제 데이터 레이크가 IdentityDrift, Microsoft Entra ID 및 Microsoft Defender의 샘플 원격 분석 데이터로 채워져 있습니다. 이 데이터를 사용하여 보안 Copilot 에이전트 테스트하고 개발합니다.
Visual Studio Code MCP 도구 사용을 참조하여 Sentinel MCP Server 도구를 탐색하고 프롬프트를 사용하여 데이터를 쿼리합니다.
IdentityDrift용 Security Copilot 에이전트 사용 사례를 빌드하기 전에 다음 프롬프트를 사용하여 MCP 서버를 탐색하여 이 단계에서 수집된 샘플 데이터를 쿼리하여 Sentinel MCP를 사용하여 Sentinel 데이터 레이크에서 데이터를 쿼리하는 방법을 알아봅니다.