CommunityEscrita e Ediçãogithub.com

microsoft/azure-kusto-irql-graph

Aplica funções de grafo IRQL a resultados de consultas KQL ou IRQL para visualização no Kusto Explorer. Gera mapeamentos Lift_To_Graph e compõe chamadas Graph_Render_View, Graph_Fold_By_Property, Extract_Node_*, Enrich_Node_* e Enrich_Graph_*. Aceita uma consulta fornecida ou uma solicitação básica e limitada em linguagem natural; não é uma habilidade geral de conversão de linguagem natural para KQL/IRQL.

O que é azure-kusto-irql-graph?

Esta habilidade transforma resultados tabulares de consultas KQL ou IRQL em visualizações de grafo interativas no Kusto Explorer. Ela gera um mapeamento JSON `Lift_To_Graph` que define nós e arestas, e então compõe funções de grafo armazenadas, como `Graph_Render_View` para renderização, `Graph_Fold_By_Property` para agrupar nós, e funções de enriquecimento como `Extract_Node_*`, `Enrich_Node_*` e `Enrich_Graph_*`. A habilidade é projetada para trabalhar com consultas existentes, preservando sua lógica de recuperação e filtros, e adicionando apenas as projeções necessárias para o mapeamento. Ela suporta os clusters `kc7001.eastus.kusto.windows.net` e os bancos de dados `ValdyTimes` e `JoJosHospital`, onde as funções de grafo estão pré-implantadas. Antes de gerar um pipeline, a habilidade verifica a disponibilidade das funções necessárias e, se alguma estiver faltando, solicita permissão ao usuário para implantá-las. Se o usuário precisar de análise nativa de grafos (como `graph-match` ou caminhos mais curtos), a habilidade encaminha para a skill `azure-kusto-graph`. A entrada ideal é uma consulta KQL/IRQL funcional e uma descrição do grafo desejado; a habilidade não é um conversor geral de linguagem natural para KQL/IRQL.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/microsoft/agent-skills/tree/main/.github/plugins/azure-kusto-graph-skills/skills/azure-kusto-irql-graph

Installed? Explore more Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Funções de Grafo IRQL -- Resultados de Consultas para Visualização

Aplique a família de funções de grafo IRQL a resultados tabulares. Dada uma consulta KQL ou IRQL e a descrição do grafo fornecida pelo usuário, gere um mapeamento Lift_To_Graph e componha apenas as funções de grafo armazenadas necessárias para visualizar, dobrar, extrair ou enriquecer o grafo no Kusto Explorer. A consulta de origem não precisa usar IRQL.

Escopo e Roteamento

SolicitaçãoUso
Transformar linhas KQL/IRQL fornecidas em um grafo visual decorado com íconesEsta skill: Lift_To_Graph + Graph_Render_View
Dobrar nós ou aplicar Extract_Node_*, Enrich_Node_* ou Enrich_Graph_*Esta skill
Usar make-graph, graph-match, caminhos mais curtos, componentes conectados, modelos de grafo ou snapshotsazure-kusto-graph
Escrever uma investigação não trivial em KQL/IRQL a partir de linguagem naturalUma skill de geração de consultas Kusto ou IRQL, depois esta skill

Se uma solicitação misturar visualização e análise nativa de grafos, use esta skill para a parte de lift/render e azure-kusto-graph para a semântica de operadores. Não substitua funções de lift de grafo por um grafo construído manualmente com arestas primeiro, a menos que o usuário solicite operadores de grafo nativos.

Contrato de Entrada

  • Entrada preferida: uma consulta KQL/IRQL funcional que produza resultados tabulares, mais uma descrição em linguagem natural dos nós, arestas, rótulos, ícones, extrações, enriquecimentos ou dobras desejados.
  • Esta skill não é um conversor de linguagem natural para KQL ou NL para IRQL. Ela transforma resultados de consultas existentes em visualizações de grafo. Para conversão geral de NL para KQL ou NL para IRQL, use uma skill dedicada de geração de consultas (disponível separadamente).
  • Preserve a recuperação, junções, filtros e agregações da consulta fornecida. Adicione apenas projeções ou IDs sintéticos necessários para o mapeamento do grafo.
  • Uma solicitação básica em linguagem natural é suportada apenas quando mapeia diretamente para uma tabela conhecida ou seletor IRQL Get_* com colunas óbvias e filtros simples. Indique a origem assumida e não invente junções, esquemas ou lógica de investigação.
  • Para construção de consultas não triviais, use uma skill separada de geração de consultas Kusto/IRQL primeiro e, em seguida, aplique esta skill à sua saída.
  • Se nenhuma consulta ou esquema de saída estiver disponível e a origem não for trivial, solicite a consulta KQL ou suas colunas de resultado antes de gerar um mapeamento.

Gatilhos de Ativação

Use esta skill quando o usuário:

  • Fornecer resultados KQL/IRQL e solicitar uma visualização ou mapeamento de grafo IRQL
  • Mencionar Lift_To_Graph, Graph_Render_View ou Graph_Fold_By_Property
  • Solicitar mapeamentos de nós/arestas decorados com ícones no Kusto Explorer
  • Quiser dobrar/colapsar nós por uma propriedade compartilhada
  • Solicitar extração ou enriquecimento de grafo por meio de Extract_Node_*, Enrich_Node_* ou Enrich_Graph_*

Não ative esta skill apenas para graph-match, caminhos/componentes de grafo, grafos persistentes ou construção genérica de make-graph; esses pertencem a azure-kusto-graph.

Não é um conversor de linguagem natural para KQL/IRQL. A entrada geralmente deve ser uma consulta KQL ou IRQL funcional cujos resultados precisam de visualização de grafo. Solicitações básicas em NL funcionam apenas para casos triviais de tabela/seletor único. Para conversão geral de NL para KQL ou NL para IRQL, use uma skill dedicada de geração de consultas (disponível separadamente).

Ambiente

  • Cluster: https://kc7001.eastus.kusto.windows.net
  • Bancos de Dados: ValdyTimes, JoJosHospital (funções de grafo pré-implantadas)
  • Renderização: Aplicativo de desktop Kusto Explorer (janela de visualização make-graph)
  • Ferramenta: kusto_query (via Azure MCP Server)

Verificação Preliminar de Funções

Lift_To_Graph e Graph_Render_View são funções armazenadas, não operadores Kusto internos. Antes de gerar ou executar um pipeline de lift em um banco de dados alvo, verifique o que está implantado:

.show functions
| where Name in~ ("Lift_To_Graph", "Graph_Render_View", "Graph_Fold_By_Property")
| project Name
  • Lift_To_Graph e Graph_Render_View são obrigatórias.
  • Graph_Fold_By_Property é obrigatória apenas quando a dobra é solicitada.
  • Verifique qualquer função Extract_Node_*, Enrich_Node_* ou Enrich_Graph_* antes de usá-la; omita enriquecimentos opcionais quando indisponíveis, a menos que o usuário queira implantá-la.
  • Se uma função obrigatória estiver faltando e você tiver permissão para alterar o banco de dados, peça confirmação ao usuário antes de implantar. Em seguida, use as definições de .create-or-alter function em references/DEPLOY_IRQL_FUNCTIONS.md. Execute o bloco .create-or-alter relevante e, em seguida, repita a verificação preliminar para confirmar.
  • Se você não tiver permissões de alteração, informe ao usuário quais funções estão faltando e aponte para references/DEPLOY_IRQL_FUNCTIONS.md para implantação manual.

Família de Funções de Grafo IRQL

Lift_To_Graph(T, mappingJson)

Transforma qualquer resultado tabular KQL em uma tabela unificada de nós + arestas.

Entrada: Qualquer tabela T + uma string de mapeamento JSON. Saída: Linhas com EntityType = "node" ou "edge", prontas para make-graph.

Graph_Render_View(T)

Pega a saída de Lift_To_Graph, divide nós/arestas e chama make-graph para abrir a janela de grafo do Kusto Explorer.

Graph_Fold_By_Property(T, NodeType, PropertyName)

Colapsa nós de um determinado tipo que compartilham um valor de propriedade em um único nó. Reconecta arestas automaticamente.

Funções de Extração e Enriquecimento de Grafo

Estas são funções armazenadas adicionais que já devem estar implantadas no banco de dados alvo. Elas não estão incluídas em references/DEPLOY_IRQL_FUNCTIONS.md. Use .show functions para verificar a disponibilidade antes de incluí-las em um pipeline.

FunçãoOperaçãoPropriedade Chave
Extract_Node_Email_Sender_Domain(T, displayName)Adiciona Domain às props do nóEmailSender
Extract_Node_Employee_Firstname(T, displayName)Adiciona Firstname às props do nóName
Extract_Node_Event_Network_Domain(T, displayName)Adiciona DomainName às props do nóUrl
Enrich_Node_Ip_Employee(T, displayName)Adiciona informações do funcionário aos nós IPClientIp
Enrich_Node_Username_Employee(T, displayName)Adiciona informações do funcionário aos nós de usuárioUsername
Enrich_Node_Event_Authentication_Username(T, displayName)Adiciona contexto de autenticaçãoUsername
Enrich_Node_Ip_Domain(T, displayName)Adiciona domínios DNSClientIp
Enrich_Node_Ip_Event_NetworkOutbound(T, displayName)Adiciona eventos de saídaClientIp
Enrich_Graph_Ip_Employee(T, mappingJson)Expande o grafo com nós de funcionárioClientIp
Enrich_Graph_Username_Employee(T, mappingJson)Expande o grafo com nós de funcionárioUsername
Enrich_Graph_Event_Authentication_Username(T, mappingJson)Expande com nós de autenticaçãoUsername

Esquema JSON de Mapeamento

O mapeamento JSON tem dois arrays: node_types e edges.

node_types[]

CampoObrigatórioDescrição
typeSimRótulo do tipo de nó (ex.: "User", "Host", "IP")
idSimPrefixo para o ID do nó; geralmente igual ao tipo
keySimNome da coluna cujo valor se torna a identidade do nó
propsSimArray de colunas para transportar como propriedades do nó
defaultsNãoObjeto de valores de fallback para propriedades nulas/vazias
defIconNãoURL do ícone padrão para este tipo de nó
displayNameNãoColuna a ser usada para o rótulo de exibição (padrão é id)
colorNãoColuna para obter a cor
sizeNãoColuna para obter o tamanho

edges[]

CampoObrigatórioDescrição
typeSimRótulo do tipo de aresta (ex.: "AuthenticatesTo", "SentEmail")
sourceSim{"id": "<prefixo>", "type": "<TipoDoNo>"}
targetSim{"id": "<prefixo>", "type": "<TipoDoNo>"}
propsNãoArray de colunas para transportar como propriedades da aresta
displayNameNãoColuna para o rótulo da aresta
colorNãoColuna para a cor da aresta

Repositório de Ícones

Use ícones de https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/:

  • IP: Public-IP-Addresses-(Classic).svg
  • Host/VM: Virtual-Machine.svg
  • Usuário: Users.svg
  • Email: Mailbox.svg (ou azure-cds/command-1070-Mail.svg)
  • Processo: App-Services.svg
  • Arquivo: Storage-Accounts.svg
  • Alerta: Activity-Log.svg
  • Domínio: DNS-Zones.svg

Regras de Geração de Mapeamento

Dadas as colunas da consulta fornecida e a descrição do grafo do usuário, gere o JSON de mapeamento:

  1. Identifique entidades -> cada substantivo distinto se torna um node_type
  2. Identifique relacionamentos -> cada verbo/preposição se torna uma edge
  3. Mapeie para colunas -> use colunas reais produzidas pela consulta fornecida; nunca assuma colunas indisponíveis
  4. Defina direção -> origem é o ator, destino é o alvo da ação
  5. Adicione propriedades -> inclua colunas relevantes para a investigação (carimbos de data/hora, resultados, hashes)
  6. Atribua ícones -> escolha do conjunto de ícones acima com base no tipo de entidade

Referência de Colunas (esquema unificado IRQL)

EntidadeColuna ChavePropriedades Disponíveis
UsuárioUsernameUsername, Name, Role, Email
HostHostnameHostname
IPClientIpClientIp
Mensagem de EmailSubjectEnvTime, Subject, Verdict, Url
RemetenteEmailSenderEmailSender, Domain
DestinatárioEmailRecipientEmailRecipient
ProcessoProcessNameEnvTime, ProcessName, ProcessCommandLine, ProcessHash
ArquivoFilenameEnvTime, Filename, Path, Sha256
DomínioDomainNameDomainName
Evento de Autenticação(ID sintético)EnvTime, UserAgent, Result, Description

Seleção de Funções

  1. Comece com o pipeline tabular KQL/IRQL fornecido.
  2. Use Lift_To_Graph(mapeamento) para criar entidades de grafo.
  3. Adicione Extract_Node_*, Enrich_Node_* ou Enrich_Graph_* apenas quando solicitado e compatível com as chaves mapeadas.
  4. Adicione Graph_Fold_By_Property() apenas quando o agrupamento/colapso for solicitado.
  5. Termine a saída visual com Graph_Render_View().
  6. Verifique previamente as funções armazenadas exatas selecionadas para o pipeline.

Padrão de Pipeline

// 1. Preserve a consulta KQL ou IRQL fornecida
<consulta de entrada>
// 2. Eleve para grafo
| invoke Lift_To_Graph(<json_de_mapeamento>)
// 3. Opcionalmente extraia ou enriqueça entidades de grafo
| invoke <Extract_Node_* | Enrich_Node_* | Enrich_Graph_*>()
// 4. Opcionalmente dobre nós quando solicitado
| invoke Graph_Fold_By_Property("<TipoDoNo>", "<NomeDaPropriedade>")
// 5. Renderize
| invoke Graph_Render_View()

Exemplos

Para prompts e exemplos práticos adicionais, consulte references/EXAMPLES.md.

Grafo de autenticação: IP -> AuthEvent -> Usuário -> Host

Consulta de entrada: Get_Event_Authentication_All | where Result == "Failed Login" | take 200

Solicitação de grafo: "Mostre IPs, eventos de autenticação, usuários e hosts; dobre eventos por resultado."

let auth_mapping = '{"node_types":[{"type":"SrcIp","id":"SrcIp","key":"ClientIp","props":["ClientIp"],"defaults":{},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/Public-IP-Addresses-(Classic).svg"},{"type":"Host","id":"Host","key":"Hostname","props":["Hostname"],"defaults":{},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/Virtual-Machine.svg"},{"type":"User","id":"User","key":"Username","props":["Username"],"defaults":{},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/Users.svg"},{"type":"AuthEvent","id":"AuthEvent","key":"AuthEventId","props":["AuthEventId","EnvTime","UserAgent","Result","Description"],"defaults":{"Result":"unknown"},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/Activity-Log.svg"}],"edges":[{"type":"RequestsAuth","source":{"id":"SrcIp","type":"SrcIp"},"target":{"id":"AuthEvent","type":"AuthEvent"},"props":["EnvTime"]},{"type":"TargetsUser","source":{"id":"AuthEvent","type":"AuthEvent"},"target":{"id":"User","type":"User"},"props":["EnvTime"]},{"type":"AgainstHost","source":{"id":"AuthEvent","type":"AuthEvent"},"target":{"id":"Host","type":"Host"},"props":["EnvTime"]}]}';
Get_Event_Authentication_All
| extend AuthEventId = strcat(Username, "_", Hostname, "_", EnvTime)
| where Result == "Failed Login"
| take 200
| invoke Lift_To_Graph(auth_mapping)
| invoke Graph_Fold_By_Property("AuthEvent", "Result")
| invoke Graph_Render_View()

Grafo de email: Remetente -> Mensagem -> Destinatário

Consulta de entrada: Get_Email_All | take 400

Solicitação de grafo: "Visualize o fluxo remetente-para-mensagem-para-destinatário e dobre mensagens por veredito."

let mail_mapping = '{"node_types":[{"type":"EmailMessage","id":"Message","key":"Subject","props":["EnvTime","Subject","Verdict"],"defaults":{},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/Media-File.svg"},{"type":"Sender","id":"Email","key":"EmailSender","props":["EmailSender"],"defaults":{},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-cds/command-1070-Mail.svg"},{"type":"Recipient","id":"Email","key":"EmailRecipient","props":["EmailRecipient"],"defaults":{},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-cds/command-1070-Mail.svg"}],"edges":[{"type":"SentBy","source":{"id":"Message","type":"EmailMessage"},"target":{"id":"Email","type":"Sender"},"props":["EnvTime","Verdict"]},{"type":"DeliveredTo","source":{"id":"Message","type":"EmailMessage"},"target":{"id":"Email","type":"Recipient"},"props":["EnvTime","Verdict"]}]}';
Get_Email_All
| take 400
| invoke Lift_To_Graph(mail_mapping)
| invoke Graph_Fold_By_Property("EmailMessage", "Verdict")
| invoke Graph_Render_View()

Investigação de domínio suspeito (ponta a ponta)

Solicitação básica de origem: "Use eventos de rede de saída para estes domínios suspeitos e faça um grafo das conexões IP-para-domínio enriquecidas com nomes de funcionários."

Este é o fallback limitado: um seletor conhecido, um extrator e um filtro direto.

let suspicious_domain_mapping = '{"node_types":[{"type":"IP","id":"IP","key":"ClientIp","props":["ClientIp"],"defaults":{},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/Public-IP-Addresses-(Classic).svg"},{"type":"Domain","id":"Domain","key":"DomainName","props":["DomainName"],"defaults":{},"defIcon":"https://raw.githubusercontent.com/benc-uk/icon-collection/master/azure-icons/DNS-Zones.svg"}],"edges":[{"type":"ConnectedTo","source":{"id":"IP","type":"IP"},"target":{"id":"Domain","type":"Domain"},"props":["EnvTime"]}]}';
let suspicious_domains = dynamic(["malicious.com", "phishing.net"]);
Get_Event_Network_Outbound_All
| where DomainName in (suspicious_domains)
| project EnvTime, ClientIp, DomainName
| invoke Lift_To_Graph(suspicious_domain_mapping)
| invoke Enrich_Node_Ip_Employee()
| invoke Graph_Render_View()

Individual skills in this repo

This repo contains 12 individual skills — each has its own dedicated page.

microsoft/azure-ai-agents-persistent-dotnet

Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: "PersistentAgentsClient", "persistent agents", "agent threads", "agent runs", "streaming agents", "function calling agents .NET".

microsoft/azure-ai-document-intelligence-dotnet

Azure AI Document Intelligence SDK for .NET. Extract text, tables, and structured data from documents using prebuilt and custom models. Use for invoice processing, receipt extraction, ID document analysis, and custom document models. Triggers: "Document Intelligence", "DocumentIntelligenceClient", "form recognizer", "invoice extraction", "receipt OCR", "document analysis .NET".

microsoft/azure-ai-openai-dotnet

Azure OpenAI SDK for .NET. Client library for Azure OpenAI and OpenAI services. Use for chat completions, embeddings, image generation, audio transcription, and assistants. Triggers: "Azure OpenAI", "AzureOpenAIClient", "ChatClient", "chat completions .NET", "GPT-4", "embeddings", "DALL-E", "Whisper", "OpenAI .NET".

microsoft/azure-ai-projects-dotnet

Azure AI Projects SDK for .NET. High-level client for Azure AI Foundry projects including agents, connections, datasets, deployments, evaluations, and indexes. Use for AI Foundry project management, versioned agents, and orchestration. Triggers: "AI Projects", "AIProjectClient", "Foundry project", "versioned agents", "evaluations", "datasets", "connections", "deployments .NET".

microsoft/azure-ai-voicelive-dotnet

Azure AI Voice Live SDK for .NET. Build real-time voice AI applications with bidirectional WebSocket communication. Use for voice assistants, conversational AI, real-time speech-to-speech, and voice-enabled chatbots. Triggers: "voice live", "real-time voice", "VoiceLiveClient", "VoiceLiveSession", "voice assistant .NET", "bidirectional audio", "speech-to-speech".

microsoft/azure-eventgrid-dotnet

Azure Event Grid SDK for .NET. Client library for publishing and consuming events with Azure Event Grid. Use for event-driven architectures, pub/sub messaging, CloudEvents, and EventGridEvents. Triggers: "Event Grid", "EventGridPublisherClient", "CloudEvent", "EventGridEvent", "publish events .NET", "event-driven", "pub/sub".

microsoft/azure-eventhub-dotnet

Azure Event Hubs SDK for .NET. Use for high-throughput event streaming: sending events (EventHubProducerClient, EventHubBufferedProducerClient), receiving events (EventProcessorClient with checkpointing), partition management, and real-time data ingestion. Triggers: "Event Hubs", "event streaming", "EventHubProducerClient", "EventProcessorClient", "send events", "receive events", "checkpointing", "partition".

microsoft/azure-identity-dotnet

Azure Identity library for .NET. Authentication library for Azure SDK clients using Microsoft Entra ID. Use for DefaultAzureCredential, managed identity, service principals, and developer credentials. Triggers: "Azure Identity", "DefaultAzureCredential", "ManagedIdentityCredential", "ClientSecretCredential", "authentication .NET", "Azure auth", "credential chain".

microsoft/azure-kusto-graph

Build and query Kusto graphs from natural language. Covers transient graphs (make-graph), persistent graph models/snapshots, pattern matching (graph-match), shortest paths, connected components, and graph-to-table export. Generates the edges-first thinking: define edges, define node lookups, union, make-graph. WHEN: make-graph, graph-match, graph-shortest-paths, graph-to-table, graph-mark-components, persistent graph, graph model, graph snapshot, build a graph from data, find paths between nodes, pattern matching in graph, connected components, transient graph, Kusto graph, KQL graph.

microsoft/azure-kusto-irql

Compose IRQL (Incident Response Query Language) queries for Kusto cybersecurity investigations. Translates natural language hunting questions into composable IRQL pipelines using Get_*, Extract_*, and Enrich_* functions. WHEN: IRQL query, security hunt, threat hunting KQL, incident response query, compose hunting pipeline, failed logins, phishing investigation, lateral movement, process execution, file creation events.

microsoft/azure-local

Plan, deploy, operate, and troubleshoot Azure Local (formerly Azure Stack HCI): sizing and prerequisites, Arc registration, lifecycle updates, workloads (Azure Local VMs, AKS on Azure Local, images, disks, logical networks), SDN and network security, and failure triage — starting read-only and confirming before risky changes. WHEN: Azure Local, Azure Stack HCI, Arc resource bridge, custom location, Azure Local VM, Arc VM, AKS on Azure Local, AKS hybrid, SDN, Lifecycle Manager, Azure Local update, disconnected site.

microsoft/azure-local-multi-rack

Plan, deploy, operate, and troubleshoot multi-rack (rack scale) deployments of Azure Local — preintegrated racks scaling to hundreds of machines, built on Network Fabric Controller, Cluster Manager, SAN storage, and managed network fabric. Use for the Microsoft.NetworkCloud and Microsoft.ManagedNetworkFabric control plane. NOT for standard 1-16 node Azure Local, and NOT for rack-aware clusters (two racks as availability zones, up to 8 nodes, synchronous replication) — those are standard scale. WHEN: multi-rack, rack scale Azure Local, aggregation rack, compute rack, Network Fabric Controller, NFC, Cluster Manager, network fabric, isolation domain, az networkcloud, az networkfabric, multi-rack logical network, multi-rack Arc VM.

Habilidades Relacionadas