Microsoft Sentinel CCF Push Connectors (Preview) – příručka Začínáme

Tato příručka vám pomůže pochopit, sestavit a nasadit konektory bez kódu založené na push modelu pro Microsoft Sentinel pomocí architektury Codeless Connector Framework (CCF) Push (náhled).

Co je CCF push?

Konektory CCF Push umožňují aplikacím odesílat události zabezpečení přímo do Microsoft Sentinelu v reálném čase. Na rozdíl od tradičních konektorů založených na dotazování, které pravidelně načítají data z rozhraní API, umožňují nabízené konektory odesílat data do služby Sentinel, když se v systému vyskytují události.

CcF Push nabízí několik klíčových výhod:

  • Tok dat řízený aplikací: Vaše aplikace řídí, kdy a jak odesílat data, což umožňuje inteligentní strategie dávkování a optimalizované využití sítě.
  • Příjem dat v reálném čase: Okamžitě odesílejte data, jakmile dojde k událostem, aniž byste čekali na intervaly dotazování.
  • Zjednodušená architektura: Není potřeba udržovat koncové body rozhraní API pro dotazování systémem Sentinel.
  • Zřizování založené na šablonách: Nasazení vytvoří šablony ARM pro řadiče domény, vlastní tabulky, registraci aplikace Entra a tajné kódy klienta – obdržíte podrobnosti o připojení ke konfiguraci v odesílající aplikaci.
  • Zabezpečené ověřování: Používá aplikace Microsoft Entra s OAuth 2.0 k zabezpečenému odesílání dat.

Předpoklady

  • Než začnete, musíte mít přístup k úložišti Azure-Sentinel GitHubu pro nástroje pro balení.
  • Oprávnění Microsoft Entra:
    • Oprávnění k vytvoření registrace aplikace v Microsoft Entra ID. Obvykle vyžaduje roli Vývojář aplikací v Entra ID nebo vyšší roli.
    • Oprávnění k vytvoření aplikace s tajnými kódy Pokud toto oprávnění neudělíte, konektor selže z bezpečnostních důvodů.
    • Vydavatel musí mít odpovídající roli pro načtení tokenů z aplikace Microsoft Entra. Tyto tokeny se vyžadují pro ověřování požadavků do koncového bodu shromažďování dat (DCE), což je koncový bod, ve kterém konektor nakonec odešle data. Pokud poskytovatel nemůže načíst tokeny, data se nedají odeslat do DCE.
  • Oprávnění Microsoft Azure:
    • Oprávnění k přiřazení role vydavatele monitorovacích metrik u pravidla shromažďování dat (DCR). Obvykle vyžaduje Azure roli vlastníka RBAC nebo správce uživatelských přístupů.

Jak funguje push CCF

Model push vs. pull model

Pochopení rozdílu mezi modely příjmu dat push a pull vám pomůže zvolit správný typ konektoru pro váš scénář.

Tahové konektory CCF – na bázi dotazování:

V modelu vyžádání změn Microsoft Sentinel pravidelně dotazuje vaše rozhraní API, aby načítala data:

  • Microsoft Sentinel inicializuje připojení k rozhraní API zdroje dat podle nakonfigurovaného plánu.
  • Data přicházejí v pravidelných intervalech dotazování, například každých pět minut.
  • Musíte udržovat veřejně přístupný koncový bod rozhraní API.
  • Infrastruktura dotazování sentinelu spravuje proces shromažďování dat.

Tlačné konektory CCF - Řízené událostmi:

V modelu nabízených oznámení vaše aplikace odesílá data přímo do Microsoft Sentinelu:

  • Aplikace zahájí odesílání dat, když dojde k událostem.
  • Data přicházejí téměř v reálném čase, protože se generují události.
  • Nemusíte udržovat koncový bod rozhraní API.
  • Vaše aplikace řídí dávkování, časování a tok dat.

Tok nabízených dat

Tok push dat CCF se skládá z pěti hlavních kroků:

  1. Konektor nasadíte v Microsoft Sentinelu.

  2. Azure automaticky vytvoří následující prostředky:

    • Aplikace Microsoft Entra s přihlašovacími údaji
    • Pravidlo shromažďování dat (DCR) – definuje, jak zpracovávat data.
    • Koncový bod shromažďování dat (DCE) – adresa URL, kam odesíláte data
    • Vlastní tabulka protokolů – kde se ukládají vaše data
    • Přiřazení rolí – oprávnění pro aplikaci Entra
  3. Zobrazí se následující podrobnosti o připojení:

    • Identifikátor nájemce
    • ID aplikace (klienta)
    • Tajný klíč klienta
    • Identifikátor URI DCE (adresa URL koncového bodu)
    • Neměnné ID DCR
    • Název streamu
  4. Vaše aplikace odešle následující data:

    • Získání tokenu OAuth 2.0 pomocí přihlašovacích údajů aplikace Entra, které byly vygenerovány pomocí CCF. Další informace najdete v toku přihlašovacích údajů klienta OAuth 2.0.
    • Formátuje události jako JSON odpovídající schématu tabulky.
    • Postuje data do koncového bodu DCE
  5. Procesy a ukládání dat v Azure:

    • DcRs transformuje data (volitelné transformace KQL)
    • Data se zapisuje do vlastní tabulky v Log Analytics.
    • Data jsou k dispozici pro dotazy, analýzy a výstrahy ve službě Sentinel.

Artefakty nabízených oznámení CCF

Řešení konektoru CCF Push se skládá ze čtyř hlavních komponent:

  • Definice vlastní tabulky
  • Pravidlo shromažďování dat (DCR)
  • Definice konektoru (UI)
  • Konfigurace Push konektoru

Definice vlastní tabulky

Co je to: Schéma, které definuje strukturu vašich dat v Log Analytics.

Klíčové požadavky:

  • Název tabulky musí končit _CL (vlastní přípona protokolu).
  • Musí obsahovat TimeGenerated sloupec (typ datetime).
  • Typy sloupců: řetězec, int, long, real, bool, datetime, dynamic, guid.
  • Použijte verzi 2025-07-01 rozhraní API nebo novější.
  • Další informace najdete v části Vytvoření vlastní tabulky v protokolech služby Azure Monitor.

Example:

{
  "name": "ContosoSecurityAlerts_CL",
  "type": "Microsoft.OperationalInsights/workspaces/tables",
  "apiVersion": "2025-07-01",
  "properties": {
     "schema": {
        "name": "ContosoSecurityAlerts_CL",
        "columns": [
          {
             "name": "TimeGenerated",
             "type": "datetime"
          },
          {
             "name": "EventSeverity",
             "type": "string"
          },
          {
             "name": "EventType",
             "type": "string"
          },
          {
             "name": "UserName",
             "type": "string"
          },
          {
             "name": "SourceIP",
             "type": "string"
          },
          {
             "name": "DeviceId",
             "type": "string"
          },
          {
             "name": "AlertMessage",
             "type": "string"
          }
        ]
     }
  }
}

Pravidlo shromažďování dat (DCR)

Co je to: Definuje, jak Azure Monitor ingestuje a zpracovává vaše data. Další informace najdete v tématu Pravidla shromažďování dat ve službě Azure Monitor.

Co to dělá:

  • Určuje název vstupního datového proudu (co vaše aplikace používá při odesílání dat).
  • Definuje volitelné transformace KQL pro tvarování a rozšiřování dat.
  • Směruje data do cílové tabulky.
  • Odkazy na koncový bod shromažďování dat (DCE)

Klíčové komponenty:

  • streamDeclarations: Definuje strukturu příchozích dat (musí odpovídat tomu, co vaše aplikace odesílá).
  • destinations: Kam data přejdou (váš pracovní prostor služby Log Analytics)
  • dataFlows: Kanál transformace ze vstupního datového proudu do výstupní tabulky
  • dataCollectionEndpointId: Odkazy na DCE pro příjem dat

Example:

{
  "name": "ContosoSecurityAlertsPushDCR",
  "apiVersion": "2021-09-01-preview",
  "type": "Microsoft.Insights/dataCollectionRules",
  "location": "[parameters('workspace-location')]",
  "properties": {
     "streamDeclarations": {
        "Custom-ContosoSecurityAlerts": {
          "columns": [
             {
                "name": "EventSeverity",
                "type": "string"
             },
             {
                "name": "EventType",
                "type": "string"
             },
             {
                "name": "UserName",
                "type": "string"
             },
             {
                "name": "SourceIP",
                "type": "string"
             },
             {
                "name": "DeviceId",
                "type": "string"
             },
             {
                "name": "AlertMessage",
                "type": "string"
             }
          ]
        }
     },
     "destinations": {
        "logAnalytics": [
          {
             "workspaceResourceId": "[variables('workspaceResourceId')]",
             "name": "clv2ws1"
          }
        ]
     },
     "dataFlows": [
        {
          "streams": [
             "Custom-ContosoSecurityAlerts"
          ],
          "destinations": [
             "clv2ws1"
          ],
          "transformKql": "source | extend TimeGenerated = now()",
          "outputStream": "Custom-ContosoSecurityAlerts_CL"
        }
     ],
     "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]"
  }
}

Important

  • Název datového proudu musí začínat předponou Custom- .
  • transformKql může být jednoduše "source" pro průchozí režim nebo zahrnovat logiku KQL pro transformaci dat.
  • outputStream musí odpovídat názvu tabulky s Custom- předponou a _CL příponou.

Definice konektoru (UI)

Definice konektoru určuje, jak se konektor zobrazí v galerii datových konektorů Microsoft Sentinelu. Další informace najdete v tématu Referenční informace k rozhraní API pro definice datových konektorů.

Definice konektoru zahrnuje:

  • Název, popis a značka konektoru
  • Požadované předpoklady a oprávnění, například přístup k pracovnímu prostoru a oprávnění Entra
  • Pokyny pro nasazení
  • Ovládací prvky uživatelského rozhraní pro zobrazení podrobností o připojení uživatelům

Klíčové prvky uživatelského rozhraní:

  • DeployPushConnectorButton: Spouští automatizované nasazení prostředků
  • CopyableLabel: Zobrazí podrobnosti o připojení po nasazení (používá fillWith parametr).
  • Markdown: Poskytuje formátované pokyny a kontext.
  • IsConnectedQuery: Ověřuje připojení konektoru na základě nedávných dat.

Příklad struktury (zkrácená pro přehlednost):

{
    "name": "ContosoSecurityAlertsPush",
    "apiVersion": "2022-09-01-preview",
    "type": "Microsoft.SecurityInsights/dataConnectorDefinitions",
    "location": "[parameters('workspace-location')]",
    "kind": "Customizable",
    "properties": {
        "connectorUiConfig": {
            "id": "ContosoSecurityAlertsPush",
            "title": "Contoso Security Alerts (Push)",
            "publisher": "Contoso Corporation",
            "descriptionMarkdown": "The [Contoso Security Alerts](https://www.contoso.com/) connector provides the capability to push real-time security alerts from your Contoso application directly into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. This connector ingests alert severity, event types, user information, and network details into a custom Log Analytics table for analysis, alerting, and visualization.",
            "graphQueries": [
                {
                    "metricName": "Security Alerts",
                    "legend": "ContosoSecurityAlerts_CL",
                    "baseQuery": "ContosoSecurityAlerts_CL"
                }
            ],
            "sampleQueries": [
                {
                    "description": "All security alerts",
                    "query": "ContosoSecurityAlerts_CL\n | sort by TimeGenerated desc"
                },
                {
                    "description": "Critical and High severity alerts",
                    "query": "ContosoSecurityAlerts_CL\n | where EventSeverity in ('Critical', 'High')\n | sort by TimeGenerated desc"
                }
            ],
            "dataTypes": [
                {
                    "name": "ContosoSecurityAlerts_CL",
                    "lastDataReceivedQuery": "ContosoSecurityAlerts_CL\n| summarize Time = max(TimeGenerated)\n| where isnotempty(Time)"
                }
            ],
            "connectivityCriteria": [
                {
                    "type": "IsConnectedQuery",
                    "value": [
                        "ContosoSecurityAlerts_CL\n| summarize LastLogReceived = max(TimeGenerated)\n| project IsConnected = LastLogReceived > ago(7d)"
                    ]
                }
            ],
            "availability": {
                "status": 1
            },
            "permissions": {
                "resourceProvider": [
                    {
                        "provider": "Microsoft.OperationalInsights/workspaces",
                        "permissionsDisplayText": "read and write permissions are required.",
                        "providerDisplayName": "Workspace",
                        "scope": "Workspace",
                        "requiredPermissions": {
                            "write": true,
                            "read": true,
                            "delete": true
                        }
                    }
                ],
                "customs": [
                    {
                        "name": "Microsoft Entra",
                        "description": "Permission to create an app registration in Microsoft Entra ID. Typically requires Entra ID Application Developer role or higher."
                    },
                    {
                        "name": "Microsoft Azure",
                        "description": "Permission to assign Monitoring Metrics Publisher role on data collection rule (DCR). Typically requires Azure RBAC Owner or User Access Administrator role."
                    }
                ]
            },
            "instructionSteps": [
                {
                    "title": "1. Create ARM Resources and Provide the Required Permissions",
                    "description": "This connector enables your Contoso application to push security alerts directly to Microsoft Sentinel via the Azure Monitor Ingestion API.",
                    "instructions": [
                        {
                            "type": "Markdown",
                            "parameters": {
                                "content": "#### Automated Configuration and Secure Data Ingestion with Entra Application \nClicking on \"Deploy\" will trigger the creation of a Log Analytics table and a Data Collection Rule (DCR). \nIt will then create an Entra application, link the DCR to it, and set the entered secret in the application. This setup enables data to be sent securely to the DCR using an Entra token."
                            }
                        },
                        {
                            "type": "DeployPushConnectorButton",
                            "parameters": {
                                "label": "Deploy Contoso Push connector resources",
                                "applicationDisplayName": "Contoso Security Alerts Push Connector Application"
                            }
                        }
                    ]
                },
                {
                    "title": "2. Configure Your Contoso Application",
                    "description": "Use the following parameters to configure your Contoso application to push security alerts to the workspace.",
                    "instructions": [
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Tenant ID (Directory ID)",
                                "fillWith": [
                                    "TenantId"
                                ]
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Entra App Registration Application ID",
                                "fillWith": [
                                    "ApplicationId"
                                ],
                                "placeholder": "Deploy push connector to get the App Registration Application ID"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Entra App Registration Secret",
                                "fillWith": [
                                    "ApplicationSecret"
                                ],
                                "placeholder": "Deploy push connector to get the App Registration Secret"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Data Collection Endpoint Uri",
                                "fillWith": [
                                    "DataCollectionEndpoint"
                                ],
                                "placeholder": "Deploy push connector to get the Data Collection Endpoint Uri"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Data Collection Rule Immutable ID",
                                "fillWith": [
                                    "DataCollectionRuleId"
                                ],
                                "placeholder": "Deploy push connector to get the Data Collection Rule Immutable ID"
                            }
                        },
                        {
                            "type": "CopyableLabel",
                            "parameters": {
                                "label": "Stream Name",
                                "value": "Custom-ContosoSecurityAlerts"
                            }
                        },
                        {
                            "type": "Markdown",
                            "parameters": {
                                "content": "#### Configure Contoso Application\nUpdate your Contoso application configuration with the above credentials to enable security alert push to Microsoft Sentinel.\n\nExample configuration:\njson\n{\n \"azure\": {\n \"tenant_id\": \"<Tenant ID>\",\n \"client_id\": \"<Application ID>\",\n \"client_secret\": \"<Application Secret>\",\n \"dce_endpoint\": \"<Data Collection Endpoint Uri>\",\n \"dcr_immutable_id\": \"<Data Collection Rule Immutable ID>\",\n \"stream_name\": \"Custom-ContosoSecurityAlerts\"\n }\n}\n"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

Important

  • Hodnota id in connectorUiConfig musí být jedinečná a musí odpovídat odkazům v konfiguraci datového konektoru.
  • Slouží IsConnectedQuery pro produkční konektory (ověřuje nedávná data) nebo hasDataConnectors pro jednodušší ověřování.
  • Parametry v fillWith jsou v CopyableLabel po nasazení vyplněny automaticky.
  • Pevné hodnoty, jako je název datového proudu, používají parametr value místo fillWith.

Konfigurace push konektoru

Konfigurace push konektoru je instance datového konektoru, která propojuje definici konektoru s nasazenými prostředky.

Konfigurace push konektoru

  • Připojuje definici konektoru (UI) k nasazenému DCR a aplikaci Entra.
  • Ukládá podrobnosti o ověřování (ID aplikace, ID hlavního objektu služby)
  • Zaznamenává konfiguraci DCR (koncový bod, neměnné ID, název streamu)
  • Umožňuje uživatelskému rozhraní načíst a zobrazit podrobnosti o připojení uživatelům.

Vlastnosti klíče:

  • connectorDefinitionName: Musí odpovídat definici konektoru id .
  • dcrConfig: Obsahuje koncový bod DCR, ID pravidla a název datového proudu.
  • auth: Obsahuje ID aplikace Entra a ID služebního principálu.
  • kind: Pro push konektory musí být hodnota "Push".

Příklad:

{
  "name": "ContosoSecurityAlertsPushDCR",
  "apiVersion": "2021-09-01-preview",
  "type": "Microsoft.Insights/dataCollectionRules",
  "location": "[parameters('workspace-location')]",
  "properties": {
    "streamDeclarations": {
      "Custom-ContosoSecurityAlerts": {
        "columns": [
          {
            "name": "EventSeverity",
            "type": "string"
          },
          {
            "name": "EventType",
            "type": "string"
          },
          {
            "name": "UserName",
            "type": "string"
          },
          {
            "name": "SourceIP",
            "type": "string"
          },
          {
            "name": "DeviceId",
            "type": "string"
          },
          {
            "name": "AlertMessage",
            "type": "string"
          }
        ]
      }
    },
    "destinations": {
      "logAnalytics": [
        {
          "workspaceResourceId": "[variables('workspaceResourceId')]",
          "name": "clv2ws1"
        }
      ]
    },
    "dataFlows": [
      {
        "streams": [
          "Custom-ContosoSecurityAlerts"
        ],
        "destinations": [
          "clv2ws1"
        ],
        "transformKql": "source | extend TimeGenerated = now()",
        "outputStream": "Custom-ContosoSecurityAlerts_CL"
      }
    ],
    "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]"
  }
}

Important

  • Musí connectorDefinitionName přesně odpovídat definici konektoru id.
  • streamName musí odpovídat proudu deklarovanému ve vašem DCR.
  • Tento prostředek se automaticky vytvoří během nasazení, když uživatelé vyberou tlačítko DeployPushConnector .

Sestavení prvního konektoru push

V tomto příkladu vytvoříte jednoduchý push konektor, který odesílá výstrahy zabezpečení z vaší aplikace do Sentinel.

Cílem: Odesílání výstrah zabezpečení z aplikace do Služby Sentinel v reálném čase

Vaše aplikace odešle strukturu událostí:

{
  "TimeGenerated": "2025-11-21T10:30:00Z",
  "EventSeverity": "Medium",
  "EventType": "LoginAlert",
  "UserName": "alice@contoso.com",
  "SourceIP": "192.168.1.100",
  "DeviceId": "device-12345",
  "AlertMessage": "Multiple failed login attempts detected"
}

Krok za krokem průvodce vytvořením push konektoru

  1. Klonování úložiště Azure-Sentinel

    Fork pak naklonujte oficiální úložiště Azure-Sentinel do místního počítače. Toto úložiště obsahuje nástroje pro balení a poskytuje standardní strukturu řešení.

    1. Klonování úložiště
      git clone https://github.com/<YOUR_FORK>/Azure-Sentinel.git

    2. Přejděte do adresáře řešení. cd Azure-Sentinel/Solutions
      Struktura úložiště zahrnuje:

    • Nástroje/Create-Azure-Sentinel-Solution/V3/
    • Obsahuje skript pro balení createSolutionV3.ps1.
    • Řešení / Kde vytvoříte řešení konektoru
  2. Vytvořte strukturu složek vašeho řešení vytvořením nového adresáře řešení ve složce Solutions/ podle standardní konvence pojmenování. Vytváření adresářů řešení (z Azure-Sentinelu, řešení/)

    mkdir ContosoSecurityAlerts
    cd ContosoSecurityAlerts
    mkdir Data
    mkdir "Data Connectors"
    mkdir "Data Connectors/ContosoSecurityAlerts_ccf"
    

    Struktura složek vypadá takto:

    Azure-Sentinel/
     └-- Řešení/
        └-- ContosoSecurityAlerts/
            ├-- Data/
            └-- Datové konektory/
                └-- ContosoSecurityAlerts_ccf/

  3. Definování tabulky

    Ve složce ContosoSecurityAlerts_ccf vytvořte soubor s názvem table.json s vlastní definicí tabulky:

    {
      "name": "ContosoSecurityAlerts_CL",
      "type": "Microsoft.OperationalInsights/workspaces/tables",
      "apiVersion": "2025-07-01",
      "properties": {
        "schema": {
          "name": "ContosoSecurityAlerts_CL",
          "columns": [
            {
              "name": "TimeGenerated",
              "type": "datetime"
            },
            {
              "name": "EventSeverity",
              "type": "string"
            },
            {
              "name": "EventType",
              "type": "string"
            },
            {
              "name": "UserName",
              "type": "string"
            },
            {
              "name": "SourceIP",
              "type": "string"
            },
            {
              "name": "DeviceId",
              "type": "string"
            },
            {
              "name": "AlertMessage",
              "type": "string"
            }
          ]
        }
      }
    }
    
  4. Vytvoření DCR

    Ve složce ContosoSecurityAlerts_ccf vytvořte soubor s názvem DCR.json, který definuje vstupní datový proud a směruje data do tabulky:

    {
      "name": "ContosoSecurityAlertsPushDCR",
      "apiVersion": "2021-09-01-preview",
      "type": "Microsoft.Insights/dataCollectionRules",
      "location": "[parameters('workspace-location')]",
      "properties": {
        "streamDeclarations": {
          "Custom-ContosoSecurityAlerts": {
            "columns": [
              {
                "name": "EventSeverity",
                "type": "string"
              },
              {
                "name": "EventType",
                "type": "string"
              },
              {
                "name": "UserName",
                "type": "string"
              },
              {
                "name": "SourceIP",
                "type": "string"
              },
              {
                "name": "DeviceId",
                "type": "string"
              },
              {
                "name": "AlertMessage",
                "type": "string"
              }
            ]
          }
        },
        "destinations": {
          "logAnalytics": [
            {
              "workspaceResourceId": "[variables('workspaceResourceId')]",
              "name": "clv2ws1"
            }
          ]
        },
        "dataFlows": [
          {
            "streams": [
              "Custom-ContosoSecurityAlerts"
            ],
            "destinations": [
              "clv2ws1"
            ],
            "transformKql": "source | extend TimeGenerated = now()",
            "outputStream": "Custom-ContosoSecurityAlerts_CL"
          }
        ],
        "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/    dataCollectionEndpoints/',parameters('workspace'))]"
      }
    }
    
  5. Vytvoření definice konektoru

    Ve složce ContosoSecurityAlerts_ccf vytvořte soubor s názvem connectorDefinition.json, který definuje, jak uživatelé komunikují s konektorem ve službě Sentinel:

    {
        "name": "ContosoSecurityAlertsPush",
        "apiVersion": "2022-09-01-preview",
        "type": "Microsoft.SecurityInsights/dataConnectorDefinitions",
        "location": "[parameters('workspace-location')]",
        "kind": "Customizable",
        "properties": {
            "connectorUiConfig": {
                "id": "ContosoSecurityAlertsPush",
                "title": "Contoso Security Alerts (Push)",
                "publisher": "Contoso Corporation",
                "descriptionMarkdown": "The [Contoso Security Alerts](https://www.contoso.com/) connector provides the capability to push real-time security alerts from your   Contoso application directly into Microsoft Sentinel using the Codeless Connector Framework (CCF) Push pattern. This connector ingests alert severity, event  types, user information, and network details into a custom Log Analytics table for analysis, alerting, and visualization.",
                "graphQueries": [
                    {
                        "metricName": "Security Alerts",
                        "legend": "ContosoSecurityAlerts_CL",
                        "baseQuery": "ContosoSecurityAlerts_CL"
                    }
                ],
                "sampleQueries": [
                    {
                        "description": "All security alerts",
                        "query": "ContosoSecurityAlerts_CL\n | sort by TimeGenerated desc"
                    },
                    {
                        "description": "Critical and High severity alerts",
                        "query": "ContosoSecurityAlerts_CL\n | where EventSeverity in ('Critical', 'High')\n | sort by TimeGenerated desc"
                    }
                ],
                "dataTypes": [
                    {
                        "name": "ContosoSecurityAlerts_CL",
                        "lastDataReceivedQuery": "ContosoSecurityAlerts_CL\n| summarize Time = max(TimeGenerated)\n| where isnotempty(Time)"
                    }
                ],
                "connectivityCriteria": [
                    {
                        "type": "IsConnectedQuery",
                        "value": [
                            "ContosoSecurityAlerts_CL\n| summarize LastLogReceived = max(TimeGenerated)\n| project IsConnected = LastLogReceived > ago(7d)"
                        ]
                    }
                ],
                "availability": {
                    "status": 1
                },
                "permissions": {
                    "resourceProvider": [
                        {
                            "provider": "Microsoft.OperationalInsights/workspaces",
                            "permissionsDisplayText": "read and write permissions are required.",
                            "providerDisplayName": "Workspace",
                            "scope": "Workspace",
                            "requiredPermissions": {
                                "write": true,
                                "read": true,
                                "delete": true
                            }
                        }
                    ],
                    "customs": [
                        {
                            "name": "Microsoft Entra",
                            "description": "Permission to create an app registration in Microsoft Entra ID. Typically requires Entra ID Application Developer role or higher."
                        },
                        {
                            "name": "Microsoft Azure",
                            "description": "Permission to assign Monitoring Metrics Publisher role on data collection rule (DCR). Typically requires Azure RBAC Owner or User   Access Administrator role."
                        }
                    ]
                },
                "instructionSteps": [
                    {
                        "title": "1. Create ARM Resources and Provide the Required Permissions",
                        "description": "This connector enables your Contoso application to push security alerts directly to Microsoft Sentinel via the Azure Monitor Ingestion  API.",
                        "instructions": [
                            {
                                "type": "Markdown",
                                "parameters": {
                                    "content": "#### Automated Configuration and Secure Data Ingestion with Entra Application \nClicking on \"Deploy\" will trigger the creation    of a Log Analytics table and a Data Collection Rule (DCR). \nIt will then create an Entra application, link the DCR to it, and set the     entered secret in the application. This setup enables data to be sent securely to the DCR using an Entra token."
                                }
                            },
                            {
                                "type": "DeployPushConnectorButton",
                                "parameters": {
                                    "label": "Deploy Contoso Push connector resources",
                                    "applicationDisplayName": "Contoso Security Alerts Push Connector Application"
                                }
                            }
                        ]
                    },
                    {
                        "title": "2. Configure Your Contoso Application",
                        "description": "Use the following parameters to configure your Contoso application to push security alerts to the workspace.",
                        "instructions": [
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Tenant ID (Directory ID)",
                                    "fillWith": [
                                        "TenantId"
                                    ]
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Entra App Registration Application ID",
                                    "fillWith": [
                                        "ApplicationId"
                                    ],
                                    "placeholder": "Deploy push connector to get the App Registration Application ID"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Entra App Registration Secret",
                                    "fillWith": [
                                        "ApplicationSecret"
                                    ],
                                    "placeholder": "Deploy push connector to get the App Registration Secret"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Data Collection Endpoint Uri",
                                    "fillWith": [
                                        "DataCollectionEndpoint"
                                    ],
                                    "placeholder": "Deploy push connector to get the Data Collection Endpoint Uri"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Data Collection Rule Immutable ID",
                                    "fillWith": [
                                        "DataCollectionRuleId"
                                    ],
                                    "placeholder": "Deploy push connector to get the Data Collection Rule Immutable ID"
                                }
                            },
                            {
                                "type": "CopyableLabel",
                                "parameters": {
                                    "label": "Stream Name",
                                    "value": "Custom-ContosoSecurityAlerts"
                                }
                            },
                            {
                                "type": "Markdown",
                                "parameters": {
                                    "content": "#### Configure Contoso Application\nUpdate your Contoso application configuration with the above credentials to enable security     alert push to Microsoft Sentinel.\n\nExample configuration:\njson\n{\n \"azure\": {\n \"tenant_id\": \"<Tenant ID>\",\n \"client_id\":  \"<Application ID>\",\n \"client_secret\": \"<Application Secret>\",\n \"dce_endpoint\": \"<Data Collection Endpoint Uri>\",\n   \"dcr_immutable_id\": \"<Data Collection Rule Immutable ID>\",\n \"stream_name\": \"Custom-ContosoSecurityAlerts\"\n }\n}\n"
                                }
                            }
                        ]
                    }
                ]
            }
        }
    }
    
  6. Vytvoření konfigurace datového konektoru

    Ve složce ContosoSecurityAlerts_ccf vytvořte soubor s názvem dataConnector.json, který pro propojení definice konektoru s nasazenými prostředky:

    {
      "name": "ContosoSecurityAlertsPushConnectorPolling",
      "apiVersion": "2024-09-01",
      "type": "Microsoft.SecurityInsights/dataConnectors",
      "kind": "Push",
      "properties": {
        "connectorDefinitionName": "ContosoSecurityAlertsPush",
        "dcrConfig": {
          "streamName": "Custom-ContosoSecurityAlerts",
          "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]",
          "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]"
        },
        "auth": {
          "type": "Push",
          "AppId": "[[parameters('auth').appId]",
          "ServicePrincipalId": "[[parameters('auth').servicePrincipalId]"
        },
        "request": {
          "RetryCount": 1
        },
        "response": {
          "eventsJsonPaths": [
            "$"
          ]
        }
      }
    }
    
  7. Vytváření souborů metadat řešení

    1. Solution_ContosoSecurityAlerts.json Ve složce Data vytvořte Solution_ContosoSecurityAlerts.json podrobnosti o řešení:

      {
           "Name": "ContosoSecurityAlerts",
           "Author": "Contoso Corporation - support@contoso.com",
           "Logo": "<svg width=\"75px\" height=\"75px\" viewBox=\"0 0 75 75\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"75\" height=\"75\" fill=\"#FF6B35\"/><text   x=\"37.   5\" y=\"45\" font-family=\"Arial\" font-size=\"18\" fill=\"white\" text-anchor=\"middle\" font-weight=\"bold\">CONTOSO</text></svg>",
           "Description": "The Contoso Security Alerts solution provides real-time security alert ingestion from your Contoso application into Microsoft Sentinel using the       Codeless Connector Framework (CCF) Push pattern. Your application pushes alert severity, event types, user information, and network details directly to Azure   Monitor     for analysis, alerting, and visualization.",
           "Data Connectors": [
                "Data Connectors/ContosoSecurityAlerts_ccf/connectorDefinition.json"
           ],
           "BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\ContosoSecurityAlerts",
           "Version": "1.0.0",
           "Metadata": "SolutionMetadata.json",
           "TemplateSpec": true,
           "Is1PConnector": false
      }
      

      Important

      Kritické požadavky na pole:

      • BasePath: Aktualizujte skutečnou místní cestu k úložišti Azure-Sentinel.
      • Metadata: Musí odkazovat na SolutionMetadata.json (vytvořený v kroku 6B)
      • Version: Sémantická správa verzí, například 3.0.0
      • TemplateSpec: Vždy true pro řešení Centrálního úložiště obsahu
      • Is1Pconnector: Nastavení false pro partnerské nebo vlastní konektory
    2. Vytvoření SolutionMetadata.json v kořenovém adresáři řešení

      Ve složce ContosoSecurityAlerts vytvořte SolutionMetadata.json v kořenovém adresáři řešení (stejná úroveň jako složka Data):

      {
        "publisherId": "contoso",
        "offerId": "contoso-security-alerts",
        "firstPublishDate": "2025-01-01",
        "lastPublishDate": "2025-01-01",
        "providers": [
           "Contoso"
        ],
        "categories": {
           "domains": [
              "Security - Threat Protection",
              "Security - Cloud Security"
           ]
        },
        "support": {
           "name": "Contoso Corporation",
           "tier": "Partner",
           "link": "https://www.contoso.com/support"
        }
      }
      

      Pro balení centra obsahu potřebujete soubor SolutionMetadata.json:

      • Nástroj pro balení očekává tento soubor v kořenovém adresáři řešení.
      • Obsahuje metadata tržiště pro distribuci Content Hubu.
    3. Vytvoření ReleaseNotes.md v kořenovém adresáři řešení

      Verze Datum změny (DD-MM-YYYY) Historie změn
      3.0.0 DD-MM-YYYY Ukázkové řešení

    Kontrolní seznam pro ověření

    Než budete pokračovat k dalšímu kroku, ověřte:

    • Název složky neobsahuje mezery, například ContosoSecurityAlerts
    • Name pole v Solution_ContosoSecurityAlerts.json přesně odpovídá názvu složky.
    • SolutionMetadata.json existuje v kořenovém adresáři řešení (ne ve složce Data)
    • BasePath odkazuje na vaši skutečnou místní cestu k úložišti Azure-Sentinel
    • Metadata odkazy na pole "SolutionMetadata.json"
    • publisherId a offerId se shodují mezi oběma soubory
  8. Ověření struktury řešení

    Ověřte, že struktura složek odpovídá požadovanému rozložení se všemi soubory na místě:

    Azure-Sentinel/
    └── Solutions/
         └── ContosoSecurityAlerts/                         Folder name (no spaces)
              ├── Data/
              │   └── Solution_ContosoSecurityAlerts.json    From Step 7A
              ├── SolutionMetadata.json                      From Step 7B (at root)
              ├── ReleaseNotes.md                            From Step 7C
              └── Data Connectors/
                    └── ContosoSecurityAlerts_ccf/
                         ├── table.json                         From Step 3
                         ├── DCR.json                           From Step 4
                         ├── connectorDefinition.json           From Step 5
                         └── dataConnector.json                 From Step 6
    
  9. Zabalte své řešení

    Pomocí nástroje pro balení createSolutionV3.ps1 vygenerujte šablonu nasazení ARM.

    # Navigate to the packaging tools directory (from Azure-Sentinel repository root)
    cd Tools/Create-Azure-Sentinel-Solution/V3
    
    # Run the packaging tool
    # When prompted for "Enter solution data folder path:", provide:
    # <REPO_ROOT>Solutions/ContosoSecurityAlerts/Data (Note! This path is absolute)
    .\createSolutionV3.ps1
    

    Skript automaticky:

    • Ověří strukturu dat nebo složek.
    • Procesy artefaktu konektoru

    Očekávaný výstup:

    Skript balení ukazuje neúspěšnou validaci arm-ttk (Sada nástrojů šablon Azure Resource Manageru). Toto selhání je očekávané a normální pro konektory CCF Push:

    Failed arm-ttk (Test-AzTemplate): Package
    Failed arm-ttk (Test-AzTemplate) on solutions: Package
    ************Validating if Package Json files are valid or not***************
    File Solutions\ContosoSecurityAlerts\Package\createUiDefinition.json is a valid Json file!
    File Solutions\ContosoSecurityAlerts\Package\mainTemplate.json is a valid Json file!
    File Solutions\ContosoSecurityAlerts\Package\testParameters.json is a valid Json file!
    

    Balení proběhlo úspěšně, pokud se zobrazí tři ověřovací zprávy JSON potvrzující platné soubory. Ignorujte selhání arm-ttk konektorů CCF Push.

    Další informace najdete v dokumentaci k nástrojům řešení Azure-Sentinel.

  10. Nasazení balíčku řešení

    Nasaďte vygenerovanou šablonu ARM (Package/mainTemplate.json) do svého předplatného Azure.

    1. Na portálu Azure vyhledejte Nasazení vlastní šablony.
    2. V editoru vyberte Vytvořit vlastní šablonu.
    3. Vyberte Načíst soubor a vyberte Package/mainTemplate.json z výstupní složky.
    4. Zvolte Uložit.
    5. Vyplňte parametry nasazení:
      • Předplatné: Vaše předplatné Azure
      • Skupina prostředků: Skupina prostředků obsahující váš pracovní prostor služby Sentinel
      • Oblasti: Stejná oblast jako pracovní prostor služby Sentinel
      • Pracovní prostor: Název vašeho pracovního prostoru Log Analytics
    6. Vyberte Zkontrolovat a vytvořit a potom Vytvořit.

    Toto nasazení zpřístupní konektor v galerii datových konektorů Microsoft Sentinelu.

    Podrobný postup najdete v tématu [Rychlý start: Vytvoření a nasazení šablon ARM pomocí webu Azure Portal](/azure/azure-resource-manager/templates/ quickstart-create-templates-use-the-portal).

  11. Povolení datového konektoru

    Po nasazení balíčku řešení povolte konektor pro zřízení prostředků a generování přihlašovacích údajů.

    1. Na webu Azure Portal přejděte do svého pracovního prostoru Služby Microsoft Sentinel.
    2. Přejít na Konfigurace>Datové konektory
    3. Vyhledejte a vyberte Contoso Security Alerts (Push)
    4. Vyberte otevřít stránku konektoru
    5. Vyberte tlačítko Nasadit konektor pro výstrahy zabezpečení společnosti Contoso.
    6. Počkejte na dokončení nasazení (vytvoří vlastní tabulku, DCR, DCE, aplikaci Entra s přihlašovacími údaji).
    7. Zkopírujte podrobnosti o připojení, které se zobrazí:
      • Identifikátor nájemce
      • ID aplikace (klienta)
      • Tajný klíč klienta
      • Identifikátor URI koncového bodu shromažďování dat
      • Neměnné ID pravidla pro shromažďování dat
      • Název streamu: Custom-ContosoSecurityAlerts
  12. Konfigurace aplikace

    Upravte kód aplikace pomocí přihlašovacích údajů a podrobností o zdroji z Kroku 10. Tento kód používá tok přihlašovacích údajů klienta OAuth 2.0 k ověření ve službě Azure Monitor.

    Caution

    Ochrana přihlašovacích údajů: Nikdy nezakódujte přihlašovací údaje (ID tenanta, ID aplikace, tajný klíč klienta) přímo v kódu aplikace nebo je potvrďte do správy zdrojového kódu. Použijte řešení zabezpečeného úložiště přihlašovacích údajů, například:

    • Azure Key Vault pro produkční aplikace
    • Proměnné prostředí nebo konfigurační soubory (vyloučené ze správy zdrojového kódu)
    • Spravované identity tam, kde je to možné
    • Nástroje pro správu tajemství, které šifrují pověření uložená v neaktivním stavu.

    Ukázkový kód aplikace v Pythonu:

    Následující příklad používá zástupné hodnoty, jako je <Your-Tenant-ID>. Tyto hodnoty nahraďte zabezpečenými odkazy na vaše skutečné přihlašovací údaje.

    import requests
    import json
    from datetime import datetime, timezone
    
    # Connection details from Step 11
    
    tenant_id = "<Your-Tenant-ID>"
    app_id = "<Your-Application-ID>"
    app_secret = "<Your-Client-Secret>"
    dce_uri = "<Your-DCE-URI>"
    dcr_immutable_id = "<Your-DCR-Immutable-ID>"
    stream_name = "Custom-ContosoSecurityAlerts"
    
    
    **Get OAuth token**
    
    token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
    token_data = {
         "client_id": app_id,
         "scope": "https://monitor.azure.com//.default",
         "client_secret": app_secret,
         "grant_type": "client_credentials"
    }
    token_response = requests.post(token_url, data=token_data)
    access_token = token_response.json()["access_token"]
    
    
    # Create event matching your table schema
    
    event = [{
         "TimeGenerated": datetime.now(timezone.utc).isoformat(),
         "EventSeverity": "Medium",
         "EventType": "LoginAlert",
         "UserName": "alice@contoso.com",
         "SourceIP": "192.168.1.100",
         "DeviceId": "device-12345",
         "AlertMessage": "Multiple failed login attempts detected"
    }]
    
    
    # Send to Sentinel
    
    headers = {
         "Authorization": f"Bearer {access_token}",
         "Content-Type": "application/json"
    }
    upload_url = f"{dce_uri}/dataCollectionRules/{dcr_immutable_id}/streams/{stream_name}?api-version=2023-01-01"
    response = requests.post(upload_url, headers=headers, json=event)
    
    print(f"Status: {response.status_code}")
    print("Security alert sent to Sentinel!")
    
  13. Dotazujte se na data

    Po odeslání výstrah odešlete dotaz ve službě Sentinel. Počkejte 5 až 10 minut na první přijetí.

    // View all recent alerts
    ContosoSecurityAlerts_CL
    | where TimeGenerated > ago(1h)
    | order by TimeGenerated desc
    
    // High severity alerts
    ContosoSecurityAlerts_CL
    | where EventSeverity == "High"
    | project TimeGenerated, EventType, UserName, SourceIP, AlertMessage
    
    // Alert summary by severity
    ContosoSecurityAlerts_CL
    | where TimeGenerated > ago(7d)
    | summarize Count=count() by EventSeverity
    

Teď, když rozumíte konektorům CCF Push, proveďte následující kroky:

  1. Navrhněte schéma dat – Identifikujte události, které chcete odeslat, a jejich pole.
  2. Vytvoření artefaktů konektoru – sestavte čtyři soubory JSON (tabulka, DCR, definice konektoru, datový konektor).
  3. Uspořádání struktury řešení – Nastavte složky Data/ a Data Connectors/ se správnými názvy.
  4. Zabalení řešení – slouží createSolutionV3.ps1 ke generování šablon nasazení.
  5. Nasazení a testování – Nasazení do pracovního prostoru služby Sentinel a ověření toku dat
  6. Integrace s vaší aplikací – Přidejte kód pro odesílání událostí v reálném čase.
  7. Vytvářejte výstrahy a sešity – používejte data k monitorování zabezpečení.

Dodatečné zdroje

dokumentace CCF

Azure Monitor a shromažďování dat

Ověřování a zabezpečení

Microsoft Sentinel

Získání pomoci

  • V případě partnerů nezávislých výrobců softwaru vytvářejících integrace kontaktujte: azuresentinelpartner@microsoft.com
  • V případě technických otázek použijte Microsoft Q&A se značkou azure-sentinel.