Microsoft Sentinel CCF-liittimet (esikatselu) – aloitusopas

Tämän oppaan avulla voit ymmärtää, luoda ja ottaa käyttöön push-pohjaisia koodittomia liittimiä Microsoft Sentinel käyttämällä CCF(Codeless Connector Framework) Pushia (esikatselu).

Mikä on CCF-työntö?

CCF Push -yhdistimien avulla sovelluksesi voivat lähettää suojaustapahtumia suoraan Microsoft Sentinel reaaliaikaisesti. Toisin kuin perinteiset kyselypohjaiset liittimet, jotka noutavat tietoja säännöllisesti ohjelmointirajapinnoista, push-liittimien avulla voit lähettää tietoja Sentinel, kun järjestelmässä tapahtuu tapahtumia.

CCF Push tarjoaa useita keskeisiä etuja:

  • Sovelluksen ohjaama tiedonkulku: Sovelluksesi valvoo, milloin ja miten tietoja lähetetään, ottamalla käyttöön älykkäät erästrategiat ja optimoidun verkon käytön.
  • Reaaliaikainen tietojen käsittely: Lähetä tiedot heti tapahtumien tapahtumisen jälkeen odottamatta kyselyjen aikavälejä.
  • Yksinkertaistettu arkkitehtuuri: Sentinel kyselyä varten ei tarvitse säilyttää ohjelmointirajapinnan päätepisteitä.
  • Mallipohjainen valmistelu: Käyttöönotto luo ARM-malleja dcr-pyyntöjä, mukautettuja taulukoita, Entra sovelluksen rekisteröintiä ja asiakassalaisuuksia varten . Saat lähetyssovelluksessa määritettävät yhteystiedot.
  • Suojattu todennus: Käyttää Microsoft Entra-sovelluksia OAuth 2.0:n kanssa suojattuun tietojen lähettämiseen.

Ennakkovaatimukset

  • Ennen kuin aloitat, sinulla on oltava pääsy Azure-Sentinel GitHub-säilöön paketointityökaluja varten.
  • Microsoft Entra käyttöoikeudet:
    • Sovelluksen rekisteröinnin luontioikeus Microsoft Entra ID. Yleensä tarvitaan Entra ID Application Developer -rooli tai uudempi rooli.
    • Salaista sovellusta luotaessa. Jos et myönnä tätä käyttöoikeutta, liitin epäonnistuu tietoturvasyistä.
    • Julkaisijalla on oltava tarvittava rooli tunnusten noutamiseen Microsoft Entra sovelluksesta. Näitä tunnuksia tarvitaan pyyntöjen todentamiseen tietojen keräämisen päätepisteeseen (DCE), joka on päätepiste, johon yhdistin lopulta työntää tietojaan. Jos toimittaja ei voi noutaa tunnuksia, tietoja ei voi lähettää DCE:hen.
  • Microsoft Azure käyttöoikeudet:
    • Oikeus määrittää valvontamittarien julkaisijan rooli tiedonkeräyssäännölle (DCR). Yleensä tarvitaan Azure RBAC-omistajan tai käyttöoikeuksien järjestelmänvalvojan rooli.

Miten CCF-työntö toimii

Push-malli vs. pull-malli

Push- ja pull-tietojen käsittelymallien välisen eron ymmärtäminen auttaa valitsemaan skenaariollesi oikean liitintyypin.

CCF-pull-yhdistimet – kyselypohjainen:

Pull-mallissa Microsoft Sentinel säännöllisesti kyselyitä ohjelmointirajapintaasi tietojen noutamiseksi:

  • Microsoft Sentinel käynnistää yhteydet tietolähteen ohjelmointirajapintaan määritetyn aikataulun mukaisesti.
  • Tietoja saapuu säännöllisin väliajoin, esimerkiksi viiden minuutin välein.
  • Sinun on ylläpidettävä julkisesti käytettävää ohjelmointirajapinnan päätepistettä.
  • Sentinel kyselyinfrastruktuuri hallitsee tiedonkeräysprosessia.

CCF-push-liittimet – tapahtumapohjainen:

Push-mallissa sovelluksesi lähettää tiedot suoraan Microsoft Sentinel:

  • Sovelluksesi käynnistää tietojen lähettämisen tapahtumien tapahtuessa.
  • Tiedot saapuvat lähes reaaliaikaisesti, kun tapahtumia luodaan.
  • Sinun ei tarvitse ylläpitää ohjelmointirajapinnan päätepistettä.
  • Sovelluksesi hallitsee erän, ajoituksen ja tiedonkulun optimointia.

Push-tietovuo

CCF:n push-tietovuo koostuu viidestä päävaihetta:

  1. Ota liitin käyttöön Microsoft Sentinel.

  2. Azure luo automaattisesti seuraavat resurssit:

    • Microsoft Entra sovellus tunnistetiedoilla
    • Tietojen keräämissääntö (DCR) – määrittää, miten tietoja käsitellään
    • Tietojen keräämisen päätepiste (DCE) – URL-osoite, johon lähetät tietoja
    • Mukautettu lokitaulukko - johon tiedot on tallennettu
    • Roolimääritykset – Entra sovelluksen käyttöoikeudet
  3. Saat seuraavat yhteystiedot:

    • Vuokraajan tunnus
    • Sovelluksen (asiakkaan) tunnus
    • Asiakasohjelman salasana
    • DCE URI (päätepisteen URL-osoite)
    • DCR:n muuttumaton tunnus
    • Stream nimi
  4. Sovelluksesi lähettää seuraavat tiedot:

    • Noutaa OAuth 2.0 -tunnuksen käyttämällä CCF:n luomia Entra sovelluksen tunnistetietoja. Lisätietoja on artikkelissa OAuth 2.0 -asiakkaan tunnistetietojen kulku
    • Muotoilee tapahtumat JSON-muotoon, joka vastaa taulukon rakennetta
    • POSTs-tiedot DCE-päätepisteeseen
  5. Azure käsittelee ja tallentaa tietoja:

    • DcR-muutokset muuntavat tiedot (valinnaiset KQL-muunnokset)
    • Tiedot kirjoitetaan mukautettuun taulukkoon Log Analyticsissa
    • Tiedot ovat käytettävissä kyselyille, analytiikalle ja hälytyksille Sentinel

CCF push -artefaktit

CCF Push -liitinratkaisu koostuu neljästä pääkomponentista:

  • Mukautetun taulukon määritys
  • Tiedonkeruusääntö (DCR)
  • Liittimen määritys (UI)
  • Push-yhdistimen määritys

Mukautetun taulukon määritys

Mikä se on: Rakenne, joka määrittää tietosi rakenteen Log Analyticsissa.

Tärkeimmät vaatimukset:

  • Taulukon nimen lopussa on oltava _CL (mukautettu lokin jälkiliite).
  • Sarakkeen TimeGenerated (datetime-tyyppi) on oltava mukana.
  • Saraketyypit: merkkijono, kokonaisluku, pitkä, todellinen, totuusarvo, päivämäärä/aika, dynaaminen, GUID-tunnus.
  • Käytä ohjelmointirajapinnan versiota tai uudempaa versiota 2025-07-01 .
  • Lisätietoja on artikkelissa Mukautetun taulukon luominen valvontalokien Azure.

Esimerkki:

{
  "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"
          }
        ]
     }
  }
}

Tiedonkeruusääntö (DCR)

Mikä se on: Määrittää, miten Azure tietojen valvonta ja käsittely. Lisätietoja on Azure Monitorin tietojenkeruusääntöjen ohjeartikkelissa.

Mitä se tekee:

  • Määrittää syötevirran nimen (mitä sovelluksesi käyttää tietoja lähetettäessä)
  • Määrittää valinnaiset KQL-muunnokset tietojen muotoiluun ja täydentämiseen
  • Reitittää tiedot kohdetaulukkoon
  • Linkit tietojen keräämisen päätepisteeseen (DCE)

Avainosat:

  • streamDeclarations: Määrittää saapuvien tietojen rakenteen (sen on vastattava sovelluksen lähettämiä tietoja)
  • destinations: Tietojen sijainti (Log Analytics -työtila)
  • dataFlows: Muunnosputki syötevirrasta tulostaulukkoon
  • dataCollectionEndpointId: Linkit tietojen käsittelystä DCE:hen

Esimerkki:

{
  "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'))]"
  }
}

Tärkeää

  • Stream nimen alussa on oltava Custom- etuliite.
  • transformKql voi olla vain "source" läpivientiä varten tai sisällyttää KQL-logiikan tietojen muuntamiseen.
  • outputStream taulukon nimen Custom- on vastattava etuliitettä ja _CL jälkiliitettä.

Liittimen määritys (UI)

Liittimen määritys määrittää, miltä liitin näyttää Microsoft Sentinel-tietoyhdistimien valikoimassa. Lisätietoja on kohdassa Tietoyhdistimen määritysten ohjelmointirajapinnan viite.

Liittimen määritelmä sisältää seuraavat:

  • Liittimen otsikko, kuvaus ja brändäys
  • Tarvittavat edellytykset ja käyttöoikeudet, kuten työtilan käyttöoikeus ja Entra käyttöoikeudet
  • Käyttöönoton ohjeet
  • Käyttöliittymän ohjausobjektit, joiden avulla voit näyttää yhteyden tiedot käyttäjille

Käyttöliittymän tärkeimmät elementit:

  • DeployPushConnectorButton: Käynnistää automatisoidun resurssien käyttöönoton
  • CopyableLabel: Näyttää yhteyden tiedot käyttöönoton jälkeen (käyttää fillWith parametria)
  • Markdown: Sisältää muotoiltuja ohjeita ja kontekstin
  • IsConnectedQuery: Vahvistaa yhdistimen yhteyden viimeisimpien tietojen perusteella

Esimerkkirakenne (lyhenne selkeydestä):

{
    "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"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

Tärkeää

  • Kohteen idconnectorUiConfig on oltava yksilöllinen ja vastattava viittauksia tietoyhdistimen määrityksissä.
  • Käytä IsConnectedQuery tuotantoyhdistimiä (vahvistaa viimeisimmät tiedot) tai hasDataConnectors yksinkertaisempaa vahvistusta varten.
  • Kohteen fillWith parametrit CopyableLabel täytetään automaattisesti käyttöönoton jälkeen.
  • Kiinteät arvot, kuten virran nimi, käyttävät parametria - value parametrin fillWithsijaan.

Push-yhdistimen määritys

Push-yhdistimen määritys on tietoliittimen esiintymä, joka linkittää liittimen määrityksen käyttöön otettuihin resursseihin.

Push-yhdistimen määritys

  • Linkittää liittimen määrityksen käyttöön otettuun DCR- ja Entra sovellukseen
  • Tallentaa todennustiedot (sovellustunnus, palvelun päänimen tunnus)
  • Tallentaa DCR-määritykset (päätepiste, muuttumaton tunnus, virran nimi)
  • Ottaa käyttöön käyttöliittymän, joka noutaa ja näyttää yhteyden tiedot käyttäjille

Tärkeimmät ominaisuudet:

  • connectorDefinitionName: On vastattava id liittimen määritystä
  • dcrConfig: Sisältää DCR-päätepisteen, säännön tunnuksen ja virran nimen
  • auth: Sisältää Entra sovellustunnuksen ja palvelun päänimen tunnuksen
  • kind: On oltava push-liitinten push-muotoinen

Esimerkki:

{
  "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'))]"
  }
}

Tärkeää

  • - connectorDefinitionName kohteen on vastattava tarkalleen liittimen määrityksen idkohdetta .
  • Kohteen streamName on vastattava DCR:ssä määritettyä virtaa.
  • Tämä resurssi luodaan automaattisesti käyttöönoton aikana, kun käyttäjät valitsevat DeployPushConnector-painikkeen .

Ensimmäisen push-liittimen luominen

Tässä esimerkissä luot yksinkertaisen palveluliittimen, joka lähettää suojausilmoituksia sovelluksestasi Sentinel.

Tavoite: Lähetä suojaushälytyksiä sovelluksesta reaaliaikaisesti Sentinel

Sovelluksesi lähettää tapahtumarakenteen:

{
  "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"
}

Vaiheittaiset ohjeet push-liittimen luomiseen

  1. Kloonaa Azure-Sentinel säilö

    Kloonaa sitten virallinen Azure-Sentinel säilö paikalliseen tietokoneeseen. Tämä säilö sisältää pakkaustyökalut ja vakioratkaisurakenteen.

    1. Kloonaa säilö
      git clone https://github.com/<YOUR_FORK>/Azure-Sentinel.git

    2. Siirry ratkaisujen hakemistoon cd Azure-Sentinel/Solutions
      Säilön rakenne sisältää seuraavat:

    • Työkalut/Create-Azure-Sentinel-Solution/V3/
    • Sisältää createSolutionV3.ps1-pakkauskomentosarjan
    • Ratkaisut/ Missä luot liitinratkaisusi
  2. Luo ratkaisukansiorakenne Luo uusi ratkaisuhakemisto Ratkaisut/kansioon vakionimeämiskäytännön mukaisesti. Ratkaisuhakemistojen luominen (Azure-Sentinel/Ratkaisut/)

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

    Kansiorakenne näyttää seuraavalta:

    Azure Sentinel/
     └-ratkaisut/
        └?? ContosoSecurityAlerts/
            ├?? Tiedot/
            └uu tietoliittimet/
                ContosoSecurityAlerts_ccf/

  3. Määritä taulukko

    Luo ContosoSecurityAlerts_ccf-kansioon tiedosto nimeltä table.json käyttäen mukautettua taulukkomääritystä:

    {
      "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. Luo DCR

    Luo ContosoSecurityAlerts_ccf-kansioon tiedosto nimeltä DCR.json, joka määrittää syötevirran ja reitittää tiedot taulukkoon:

    {
      "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. Liittimen määrityksen luominen

    Luo ContosoSecurityAlerts_ccf-kansioon tiedosto nimeltä connectorDefinition.json, joka määrittää, miten käyttäjät käyttävät liitintä 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. Luo tietoyhdistimen määritys

    Luo ContosoSecurityAlerts_ccf-kansioon tiedosto nimeltä dataConnector.json, joka linkittää liittimen määrityksen käyttöön otettuihin resursseihin:

    {
      "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. Ratkaisun metatietojen Files luominen

    1. Solution_ContosoSecurityAlerts.json Luo Solution_ContosoSecurityAlerts.json Tiedot-kansiossa ratkaisusi tiedoilla:

      {
           "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
      }
      

      Tärkeää

      Kriittiset kenttävaatimukset:

      • BasePath: Päivitä todelliseen paikalliseen polkuusi Azure-Sentinel säilöön
      • Metadata: On viitattava SolutionMetadata.json (luotu vaiheessa 6B)
      • Version: Semanttinen versiointi, esimerkiksi 3.0.0
      • TemplateSpec: Aina true sisältökeskuksen ratkaisuille
      • Is1Pconnector: Määritä - false arvo kumppanille/mukautetuille liittimille
    2. SolutionMetadata.json luominen ratkaisun pääkansiossa

      Luo ContosoSecurityAlerts-kansiossa SolutionMetadata.json ratkaisun päähakemistoon (sama taso kuin Tiedot-kansio):

      {
        "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"
        }
      }
      

      Tarvitset SolutionMetadata.json -tiedoston sisältökeskuksen pakkaamista varten:

      • Pakkaustyökalu odottaa tätä tiedostoa ratkaisun pääkansiossa
      • Se sisältää Marketplacen metatietoja sisältökeskuksen jakelua varten
    3. ReleaseNotes.md luominen ratkaisun pääkansiossa

      Versio Muokkauspäivämäärä (PP-KK-VVVV) Muutoshistoria
      3.0.0 PP-KK-VVVV Esimerkkiratkaisu

    Kelpoisuustarkistusluettelo

    Ennen kuin jatkat seuraavaan vaiheeseen, tarkista seuraavat:

    • Kansion nimessä ei ole välilyöntejä, esimerkiksi ContosoSecurityAlerts
    • Name Solution_ContosoSecurityAlerts.json kenttä vastaa kansion nimeä täsmälleen
    • SolutionMetadata.json on ratkaisun pääkansiossa (ei Tietokansiossa)
    • BasePath viittaa todelliseen paikalliseen Azure-Sentinel säilön polkuun
    • Metadata kenttäviittaukset "SolutionMetadata.json"
    • publisherId ja offerId vastaavat toisiaan molemmissa tiedostoissa
  8. Ratkaisun rakenteen tarkistaminen

    Vahvista, että kansiorakenne vastaa vaadittua asettelua ja että kaikki tiedostot ovat paikoillaan:

    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. Pakkaa ratkaisusi

    luo ARMcreateSolutionV3.ps1 käyttöönottomalli käyttämällä createSolutionV3.ps1-pakkaustyökalua.

    # 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
    

    Komentosarja automaattisesti:

    • Vahvistaa tietojen/kansion rakenteen
    • Käsittelee liittimen artefaktit

    Odotettu tuloste:

    Pakkauskomentosarja näyttää epäonnistuneen arm-ttk-vahvistuksen (Azure Resource Manager Template Toolkit). Tämä virhe on odotettu ja normaali CCF-push-liittimille:

    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!
    

    Pakkaus onnistui, jos näet kolme kelvollista tiedostoa vahvistavaa JSON-vahvistusviestiä. Voit ohittaa arm-ttk virheen CCF Push -liittimien kohdalla.

    Lisätietoja on Azure-Sentinel Solutions Tools -dokumentaatiossa.

  10. Ratkaisupaketin käyttöönotto

    Ota luotu ARM-malli (Package/mainTemplate.json) käyttöön Azure-tilauksessasi.

    1. Tee Azure-portaali hakusanalla Ota käyttöön mukautettu malli
    2. Valitse Luo oma mallisi editorissa
    3. Valitse Lataa tiedosto ja valitse Package/mainTemplate.json kohdekansiosta
    4. Valitse Tallenna
    5. Täytä käyttöönottoparametrit:
      • Tilaus: Azure-tilauksesi
      • Resurssiryhmä: Sentinel työtilan sisältävä resurssiryhmä
      • Alue: Sama alue kuin Sentinel työtilasi
      • Työtilan: Log Analytics -työtilasi nimi
    6. Valitse Tarkista + Luo ja sitten Luo

    Tämä käyttöönotto tuo liittimen käytettäväksi Microsoft Sentinel tietoyhdistimien valikoimassa.

    Yksityiskohtaiset ohjeet ovat kohdassa [Pikaopas: ARM-mallien luominen ja käyttöönotto käyttämällä Azure-portaali](/azure/azure-resource-manager/templates/ quickstart-create-templates-use-the-portal).

  11. Ota tietoyhdistin käyttöön

    Kun olet ottanut ratkaisupaketin käyttöön, ota liitin käyttöön resurssien valmistelemiseksi ja tunnistetietojen luomiseksi.

    1. Siirry Azure-portaali Microsoft Sentinel-työtilaan
    2. Siirry kohtaanMääritystietoliittimet>
    3. Etsi ja valitse Contoso-suojausilmoitukset (Push)
    4. Valitse Avaa liitin -sivu
    5. Valitse Ota käyttöön Contoson suojausilmoitukset -liitinpainike
    6. Odota käyttöönoton valmistumista (luo mukautetun taulukon, DCR:n, DCE:n Entra sovelluksen tunnistetiedoilla)
    7. Kopioi näkyviin tulevat yhteyden tiedot:
      • Vuokraajan tunnus
      • Sovelluksen (asiakkaan) tunnus
      • Asiakasohjelman salasana
      • Tietojen keräämisen päätepisteen URI-tunnus
      • Tiedonkeräyssäännön muuttumaton tunnus
      • Stream nimi:Custom-ContosoSecurityAlerts
  12. Sovelluksen määrittäminen

    Päivitä sovelluskoodisi tunnistetiedoilla ja resurssitiedoilla vaiheesta 10. Koodi käyttää OAuth 2.0 -asiakkaan tunnistetietojen kulkua todentamiseen Azure Monitorin avulla.

    Varoitus

    Suojaa tunnistetietosi: Älä koskaan koodata tunnistetietoja (vuokraajatunnus, sovellustunnus, asiakassalaisuus) suoraan sovelluskoodissasi tai vahvista niitä lähteenhallintaan. Käytä suojattuja tunnistetietojen tallennusratkaisuja, kuten:

    • Azure Key Vault tuotantosovelluksille
    • Ympäristömuuttujat tai määritystiedostot (eivät kuulu lähteenhallintaan)
    • Tarvittaessa hallitut käyttäjätiedot
    • Salaisten koodien hallintatyökalut, jotka salaavat lepäävät tunnistetiedot

    Python-esimerkkisovelluksen koodi:

    Seuraavassa esimerkissä käytetään paikkamerkkiarvoja, kuten <Your-Tenant-ID>. Korvaa nämä arvot turvallisilla viittauksilla todellisiin tunnistetietoihisi.

    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. Kyselyn tekeminen tiedoista

    Kun ilmoitukset on lähetetty, tee kysely Sentinel. Ensimmäinen käsittely 5–10 minuuttia.

    // 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
    

Seuraavat vaiheet

Nyt kun ymmärrät CCF Push -yhdistimet, toimi seuraavasti:

  1. Suunnittele tietorakenne – Tunnista lähetettävät tapahtumat ja niiden kentät.
  2. Liittimen artefaktien luominen : luo neljä JSON-tiedostoa (taulukko, DCR, liittimen määritys, tietoliitin).
  3. Järjestä ratkaisun rakenne : määritä data/ ja tietoyhdistimet/ kansiot asianmukaisella nimeämisellä.
  4. Pakkaa ratkaisusi – Käytä createSolutionV3.ps1 käyttöönottomallien luomiseen.
  5. Käyttöönotto ja testaus– Ota käyttöön Sentinel työtilassa ja vahvista tiedonkulku.
  6. Integrointi sovellukseen – Lisää koodi, jos haluat lähettää tapahtumia reaaliaikaisesti.
  7. Luo ilmoituksia ja työkirjoja – Käytä tietoja suojauksen valvontaan.

Lisäresurssit

CCF-dokumentaatio

Azure Valvonta ja tiedonkeruu

Todentaminen ja suojaus

Microsoft Sentinel

Ohjeiden hakeminen

  • Jos ISV-kumppanit rakentavat integrointeja, ota yhteyttä: azuresentinelpartner@microsoft.com
  • Jos sinulla on teknisiä kysymyksiä, käytä Microsoft Q&A :ta tunnisteella "azure-sentinel".