Luo kooditon liitin Microsoft Sentinel varten

CCF (Codeless Connector Framework) tarjoaa kumppaneille, kokeneille käyttäjille ja kehittäjille mahdollisuuden luoda mukautettuja liittimiä tietojen Microsoft Sentinel.

CCF:n avulla luodut liittimet ovat täysin SaaS-liittimiä, mutta palveluasennuksia ei vaadita. Niihin sisältyy myös terveyden seuranta ja Microsoft Sentinel täysi tuki.

Luo CCF-liitin seuraavien ohjeiden avulla ja yhdistä tietolähde Microsoft Sentinel

  • Luo tietoyhdistin
  • ARM-mallin luominen
  • Ota liitin käyttöön
  • Yhdistä Microsoft Sentinel tietolähteeseen ja aloita tietojen käyttö

Tässä artikkelissa kerrotaan, miten jokainen vaihe suoritetaan, ja annetaan samalla esimerkki koodittomasta liittimestä .

Jos olet ohjelmistokehityskumppani ja tarvitset tukea CCF-tietoliittimen luomiseen, ota yhteyttä Microsoft Sentinel -kumppaneihin osoitteessaAzureSentinelPartner@microsoft.com.

Miten tämä CCF eroaa edellisestä versiosta?

CCF:n alkuperäinen versio julkistettiin tammikuussa 2022. Sen jälkeen olemme parantaneet käyttöympäristöä, eikä vanhaa julkaisua enää suositella. Tässä CCF:n uudessa versiossa on seuraavat keskeiset parannukset:

  1. Parempi tuki eri todennus- ja sivutustyypeille.

  2. Tukee tavallisia tiedonkeruusääntöjä (DCR).

  3. Koodittoman liittimen käyttöliittymän ja yhteyden määritysosat ovat nyt erillisiä. Näin voidaan luoda liittimiä, joissa on useita yhteyksiä, mikä ei ollut aiemmin mahdollista.

Ennakkovaatimukset

Ennen kuin luot liittimen, tutustu tietolähteeseen ja siihen, miten Microsoft Sentinel on muodostettava yhteys.

  1. Tietojen keräämisen päätepiste (DCE)

    DCE on dcr-pyyntöä koskeva vaatimus. Vain yksi DCE luodaan lokianalyysin työtilan DCR-käyttöönottoa kohden. Jokainen Microsoft Sentinel työtilassa käyttöönotettu DCR käyttää samaa DCE:tä. Lisätietoja uuden luomisesta tai siitä, tarvitsetko uuden, on kohdassa Tietojen keräämisen päätepisteet Azure Monitorissa.

  2. Tulostustaulukon tai -taulukoiden rakenne.

    On tärkeää ymmärtää tietovirran muoto ja kentät, jotka haluat sisällyttää tulostetaulukkoon. Viittaa tietolähteen dokumentaatioon tai analysoi riittävät tulosteesimerkit.

Tutki seuraavia komponentteja ja tarkista niiden tuki Data Connector -ohjelmointirajapintaviittaus -kohdassa:

  1. HTTP-pyyntö- ja vastausrakenne tietolähteeseen

  2. Tietolähteen edellyttämä todennus.
    Jos tietolähteesi esimerkiksi edellyttää varmenteella allekirjoitettua tunnusta, tietoyhdistimen ohjelmointirajapintaviittaus määrittää, ettei varmennetodennusta tueta.

  3. Tietolähteen sivutusasetukset

Ohjelmointirajapintoja testataan

Suosittelemme testaamaan komponentit ohjelmointirajapinnan testaustyökalulla, jolla on jokin seuraavista:

Varoitus

Tilanteissa, joissa sinulla on luottamuksellisia tietoja, kuten tunnistetietoja, salaisuuksia, käyttöoikeustunnuksia, ohjelmointirajapinta-avaimia ja muita vastaavia tietoja, varmista, että käytät työkalua, joka suojaa tiedot tarvittavilla suojausominaisuuksilla, toimii offline-tilassa tai paikallisesti, ei synkronoi tietojasi pilvipalveluun eikä edellytä kirjautumista online-tilille. Näin voit vähentää luottamuksellisten tietojen yleisölle altistumisen riskiä.

Luo tietoyhdistin

Vihje

Jos olet itsenäinen ohjelmistotoimittaja (ISV) ja tarvitset tukea, kun luot Microsoft Sentinel-integrointia Microsoft Sentinel Codeless Connector Frameworkin avulla, Microsoft App Assure -tiimi voi ehkä auttaa. Ota yhteyttä App Assure -tiimiin lähettämällä sähköpostia osoitteeseen azuresentinelpartner@microsoft.com.

CCF-tietoliittimen luomiseen tarvitaan neljä osaa.

  1. Tulostetaulukon määritys
  2. Tiedonkeruusääntö (DCR)
  3. Tietoliittimen käyttöliittymä
  4. Tietoyhdistimen yhteyssäännöt

Kullakin osalla on osio, jossa on yksityiskohtaiset tiedot prosessista, jonka avulla se voidaan luoda ja vahvistaa. Ota JSON kustakin komponentista ARM-mallin lopullista pakkausta varten.

Tulostetaulukon määritys

Vihje

Ohita tämä vaihe, jos tietojasi käytetään vain tavallisissa Log Analytics -taulukoissa. Esimerkkejä vakiotaulukoista ovat CommonSecurityLog ja ASimDnsActivityLogs. Lisätietoja tuetuista vakiotietotyypeistä on kohdassa Mukautettujen tietoliittimien tietojen muunnostuki.

Jos tietolähteesi ei vastaa vakiotaulukon rakennetta, sinulla on kaksi vaihtoehtoa:

  • Luo mukautettu taulukko kaikille tiedoille
  • Luo mukautettu taulukko joillekin tiedoille ja jaa vaatimusten mukaiset tiedot vakiotaulukkoon

Log Analytics -käyttöliittymän avulla voit luoda mukautetun taulukon yhdessä DCR:n kanssa käyttämällä suoraan eteenpäin -menetelmää. Jos luot mukautetun taulukon käyttämällä Taulukoiden ohjelmointirajapintaa tai muuta ohjelmallista menetelmää, lisää _CL jälkiliite manuaalisesti taulukon nimeen. Lisätietoja on artikkelissa Mukautetun taulukon luominen.

Jos haluat lisätietoja tietojen jakamisesta useampaan kuin yhteen taulukkoon, katso esimerkkitiedot ja esimerkki mukautetusta taulukosta , joka on luotu näitä tietoja varten.

Tiedonkeruusääntö

Tietojen keräämisen säännöt määrittävät tiedonkeruuprosessin Azure Monitorissa. DcR-määritykset määrittävät, mitä tietoja kerätään, miten tiedot muunnetaan ja mihin ne lähetetään.

  • Yhdellä tietoyhdistimellä otetaan käyttöön vain yksi DCR.
  • Dcr-toiminnolla on oltava vastaava DCE samalla alueella.
  • Kun CCF-tietoyhdistin otetaan käyttöön, dcr luodaan, jos sitä ei vielä ole olemassa.

Tutustu dcr-asetusten uusimpiin tietoihin seuraavissa artikkeleissa:

Opetusohjelma, jossa esitellään DCE:n luominen, mukaan lukien mallitietojen käyttäminen mukautetun taulukon ja DCR:n luomiseen, on artikkelissa Opetusohjelma: Tietojen lähettäminen Azure Valvontalokit lokien käsittely -ohjelmointirajapinnan avulla (Azure-portaali). Tämän opetusohjelman prosessin avulla voit varmistaa, että tiedot on otettu oikein taulukkoon DCR:n avulla.

Lisätietoja monimutkaisen DCR:n luomisesta useilla tietovuoilla on DCR-esimerkkiosiossa.

Tietoliittimen käyttöliittymä

Tämä osa hahmontaa tietoliittimen käyttöliittymän Microsoft Sentinel tietoyhdistimien valikoimassa. Jokaisella tietoyhdistimellä voi olla vain yksi käyttöliittymämääritelmä.

Luo tietoliittimen käyttöliittymä Data Connector Definition -ohjelmointirajapinnan avulla. Käytä tietoyhdistimen määritysviittausta lisäosana ohjelmointirajapintaelementtien yksityiskohtaisempaan selittämiseen.

Muistiinpanoja:

  1. Ohjelmointirajapintakyselyn kind liittimen ominaisuuden on aina oltava Customizable.
  2. Koska tämä on ohjelmointirajapinnan kyselyliitintyyppi, määritä connectivityCriteria tyypiksi hasDataConnectors
  3. Esimerkki instructionSteps sisältää painikkeen, jonka tyyppi on ConnectionToggleButton. Tämä painike auttaa käynnistämään tietoyhdistimen sääntöjen käyttöönoton määritettyjen yhteysparametrien perusteella.

Ohjelmointirajapinnan testaustyökalun avulla voit kutsua tietoyhdistimen määritysten ohjelmointirajapintaa tietoliittimen käyttöliittymän luomiseksi, jotta se voidaan vahvistaa tietoyhdistimien valikoimassa.

Jos haluat oppia esimerkistä, katso tietoyhdistimen määritysten viittausesimerkki -osio.

Tietoyhteyssäännöt

Tällä hetkellä CCF-tietoliittimen määrittämiseen voi käyttää kolmenlaisia tietoyhteyssääntöjä.

Ohjelmointirajapinnan testaustyökalun avulla voit kutsua tietoyhdistimen ohjelmointirajapintaa ja luoda tietoliittimen, joka yhdistää yhteyssäännöt ja aiemmat osat. Varmista, että liitin on nyt yhdistetty käyttöliittymässä.

Luottamuksellisen syötteen suojaaminen

Riippumatta siitä, mitä todennusta CCF-tietoyhdistin käyttää, varmista, että luottamukselliset tiedot pysyvät suojattuina. Tavoitteena on välittää ARM-mallin tunnistetiedot CCF:lle jättämättä luettavissa olevia luottamuksellisia objekteja käyttöönottohistoriaasi.

Luo selite

Tietoyhdistimen määritys luo käyttöliittymäelementin suojaustunnistetietojen kysymistä varten. Jos tietoliittimesi esimerkiksi todennetaan lokilähteeseen OAuth-todennusta käyttämällä, tietoyhdistimen määritysosio sisältää OAuthForm -tyypin ohjeissa. Tämä määrittää ARM-mallin tunnistetietojen kysymistä varten.

"instructions": [
    {
        "type": "OAuthForm",
        "parameters": {
        "UsernameLabel": "Username",
        "PasswordLabel": "Password",
        "connectButtonLabel": "Connect",
        "disconnectButtonLabel": "Disconnect"
        }
    }
],

Luottamuksellisen syötteen tallentaminen

ARM-käyttöönottomallin osassa on paikka, jossa järjestelmänvalvoja voi ottaa tietoliittimen käyttöön salasanan syöttämiseksi. Käytä securestring pitämään luottamukselliset tiedot suojattuina objektissa, jota ei voi lukea käyttöönoton jälkeen. Lisätietoja on kohdassa Parametrien suojaussuositukset.

"mainTemplate": {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "[variables('dataConnectorCCPVersion')]",
    "parameters": {
        "Username": {
            "type": "securestring",
            "minLength": 1,
            "metadata": {
                "description": "Enter the username to connect to your data source."
        },
        "Password": {
            "type": "securestring",
            "minLength": 1,
            "metadata": {
                "description": "Enter the API key, client secret or password required to connect."
            }
        },
    // more deployment template information
    }
}

Securestring-objektien käyttäminen

Lopuksi CCF käyttää tunnistetieto-objekteja tietoyhdistimen osiossa.

"auth": {
    "type": "OAuth2",
    "ClientSecret": "[[parameters('Password')]",
    "ClientId": "[[parameters('Username')]",
    "GrantType": "client_credentials",
    "TokenEndpoint": "https://api.contoso.com/oauth/token",
    "TokenEndpointHeaders": {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    "TokenEndpointQueryParameters": {
        "grant_type": "client_credentials"
    }
},

Huomautus

Tunnistetieto-objektin "ClientSecret": "[[parameters('Password')]", outo syntaksi ei ole kirjoitusvirhe! Jotta voit luoda käyttöönottomallin, joka käyttää myös parametreja, sinun on poistuttava kyseisen osan parametreista ylimääräisen aloituskohdan avulla[. Näin parametrit voivat määrittää arvon sen perusteella, miten käyttäjä on vuorovaikutuksessa liittimen kanssa.

Lisätietoja on artikkelissa Mallilausekkeiden ohjausmerkit.

Käyttöönottomallin luominen

Pakkaa Azure Resource Management (ARM) -malli manuaalisesti ohjeeksi käyttämällä esimerkkimallikoodimalleja. Nämä koodinäytteet jaetaan ARM-malliosioilla, jotka on liitettävä yhteen.

Jos olet luomassa Google Cloud Platform (GCP) CCF -tietoyhdistintä, pakkaa käyttöönottomalli GCP CCF -mallin avulla. Lisätietoja GCP CCF -mallin täyttämisestä on artikkelissa GCP-tietoliittimen yhteyssääntöjen viite.

Esimerkkimallien lisäksi Microsoft Sentinel sisältökeskuksessa käytettävissä olevat julkaistut ratkaisut käyttävät CCF:ää tietoliittimilleen. Tarkastele seuraavia ratkaisuja uusina esimerkkeinä siitä, miten voit ommella komponentit yhteen ARM-malliin.

RestApiPoller Esimerkkejä CCF-tietoyhdistimestä

GCP Esimerkkejä CCF-tietoyhdistimestä

Ota liitin käyttöön

Ota kooditon liitin käyttöön mukautettuna mallina.

Vihje

Poista edellisissä vaiheissa luomasi resurssit. Dcr ja mukautettu taulukko luodaan käyttöönoton yhteydessä. Jos et poista näitä resursseja ennen käyttöönottoa, mallin tarkistaminen on vaikeampaa.

  1. Kopioi ARM-käyttöönottomallin sisältö.
  2. Noudata Muokkaa ja ota käyttöön mallia -ohjeita artikkelista Pikaopas: ARM-mallien luominen ja käyttöönotto Azure-portaali avulla.

Verkon eristämisen ylläpitäminen kirjauslähdettä varten

Jos lokilähteesi edellyttää verkon eristämistä, määritä CCF:n käyttämien julkisten IP-osoitteiden sallittujen osoitteiden luettelo.

Azure näennäisverkot määrittävät verkkokäytön hallintatoiminnot palvelutunnisteiden avulla. CCF:n osalta kyseinen palvelutunniste on Scuba.

Löydät scuba-palvelutunnisteeseen liittyvän nykyisen IP-alueen ohjeartikkelista Palvelutunnisteiden etsinnän ohjelmointirajapinnan käyttäminen.

Vahvista kooditon liitin

Tarkastele koodaamatonta liitintä tietoyhdistimien valikoimassa. Avaa tietoyhdistin ja täytä yhteyden muodostamisessa tarvittavat todennusparametrit. Kun yhteys on muodostettu, dcr ja mukautetut taulukot luodaan. Tarkastele dcr-resurssia resurssiryhmässäsi ja logs-analytiikan työtilan mukautettuja taulukoita.

Huomautus

Voi kestää jopa 30 minuuttia, ennen kuin tiedot alkavat käyttää.

Esimerkki

Koodittoman liittimen luomisen jokainen vaihe esitetään seuraavissa esimerkkiosioissa.

Tässä esimerkissä esitellään monimutkainen tietolähde, joka on liitetty useampaan kuin yhteen taulukkoon, tulostetaulukon rakenne ja DCR, jossa on useita tulostevirtoja. Dcr-esimerkissä ne kootaan yhteen KQL-muunnosten kanssa. Tietoyhdistimen käyttöliittymän määritys- ja yhteyssääntöjen esimerkit jatkavat tästä samasta esimerkkitietolähteestä. Lopuksi ratkaisumalli käyttää kaikkia näitä esimerkkiosia näyttääkseen, miten luodaan esimerkki CCF-tietoyhdistin.

Esimerkkitiedot

Tietolähde palauttaa seuraavan JSON:n, kun se muodostaa yhteyden päätepisteeseensä.

[
        {
        "ts": "3/6/2023 8:15:15 AM",
        "eventType": "Alert",
        "deviceMac": "bc:27:c6:21:1c:70",
        "clientMac": "",
        "srcIp": "10.12.11.106",
        "destIp": "121.93.178.13",
        "protocol": "tcp/ip",
        "priority": "0",
        "message": "This is an alert message"
        },
        {
        "ts": "3/6/2023 8:14:54 AM",
        "eventType": "File",
        "srcIp": "178.175.128.249",
        "destIp": "234.113.125.105",
        "fileType": "MS_EXE",
        "fileSizeBytes": 193688,
        "disposition": "Malicious"
        }
]

Tämä vastaus sisältää eventTypeilmoituksen ja tiedoston. Tiedostotapahtumat on tarkoitus käyttää normalisoituun vakiotaulukkoon , AsimFileEventLogs, kun taas ilmoitustapahtumat käsitellään mukautettuun taulukkoon.

Esimerkki mukautetusta taulukosta

Lisätietoja tämän taulukon rakenteesta on kohdassa Taulukoiden ohjelmointirajapinta. Mukautettujen lokitaulukoiden nimissä on oltava _CL jälkiliite.

{
"properties": {
    "schema": {
        "name": "ExampleConnectorAlerts_CL",
        "columns": [
        {
          "name": "TimeGenerated",
          "type": "datetime"
        },
        {
          "name": "SourceIP",
          "type": "string"
        },
        {
          "name": "DestIP",
          "type": "string"
        },
        {
          "name": "Message",
          "type": "string"
        },
        {
          "name": "Priority",
          "type": "int"
        }
        ]
      }
    }
}

Esimerkki tiedonkeräyssäännöstä

Seuraava DCR määrittää yksittäisen virran Custom-ExampleConnectorInput käyttämällä esimerkkitietolähdettä ja muuntaa tuloksen kahdeksi taulukoksi.

  1. Ensimmäinen tietovuo ohjaa eventType = Ilmoituksen mukautettuun ExampleConnectorAlerts_CL taulukkoon.
  2. toinen tietovuo ohjaa eventType = tiedoston normalisoituun vakiotaulukkoon,ASimFileEventLogs

Lisätietoja tämän esimerkin rakenteesta on kohdassa Tiedonkeräyssäännön rakenne.

Voit luoda tämän dcr:n testiympäristössä noudattamalla tietojen keräämisen sääntöjen ohjelmointirajapintaa. Esimerkin {{double curly braces}} elementit ilmaisevat muuttujia, jotka vaativat arvoja, jotta niitä olisi helppo käyttää ohjelmointirajapinnan testaustyökalulla. Kun luot tämän resurssin ARM-mallissa, tässä ilmaistut muuttujat vaihdetaan parametreihin.

{
  "location": "{{location}}",
  "properties": {
    "dataCollectionEndpointId": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Insights/dataCollectionEndpoints/{{dataCollectionEndpointName}}",
    "streamDeclarations": {
      "Custom-ExampleConnectorInput": {
        "columns": [
          {
            "name": "ts",
            "type": "datetime"
          },
          {
            "name": "eventType",
            "type": "string"
          },
          {
            "name": "deviceMac",
            "type": "string"
          },
          {
            "name": "clientMac",
            "type": "string"
          },
          {
            "name": "srcIp",
            "type": "string"
          },
          {
            "name": "destIp",
            "type": "string"
          },
          {
            "name": "protocol",
            "type": "string"
          },
          {
            "name": "priority",
            "type": "string"
          },
          {
            "name": "message",
            "type": "string"
          },
          {
            "name": "fileType",
            "type": "string"
          },
          {
            "name": "fileSizeBytes",
            "type": "int"
          },
          {
            "name": "disposition",
            "type": "string"
          }
        ]
      }
    },
    "destinations": {
      "logAnalytics": [
        {
          "workspaceResourceId": "/subscriptions/{{subscriptionId}}/resourcegroups/{{resourceGroupName}}/providers/microsoft.operationalinsights/workspaces/{{workspaceName}}",
          "name": "{{uniqueFriendlyDestinationName}}"
        }
      ]
    },
    "dataFlows": [
      {
        "streams": [
          "Custom-ExampleConnectorInput"
        ],
        "destinations": [
          "{{uniqueFriendlyDestinationName}}"
        ],
        "transformKql": "source | where eventType == \"Alert\" | project TimeGenerated = ts, SourceIP = srcIp, DestIP = destIp, Message = message, Priority = priority \n",
        "outputStream": "Custom-ExampleConnectorAlerts_CL"
      },
      {
        "streams": [
          "Custom-ExampleConnectorInput"
        ],
        "destinations": [
          "{{uniqueFriendlyDestinationName}}"
        ],
        "transformKql": "source | where eventType == \"File\" | project-rename TimeGenerated = ts, EventOriginalType = eventType, SrcIpAddr = srcIp, DstIpAddr = destIp, FileContentType = fileType, FileSize = fileSizeBytes, EventOriginalSeverity = disposition \n",
        "outputStream": "Microsoft-ASimFileEventLogs"
      }
    ]
  }
}

Esimerkki tietoliittimen käyttöliittymän määrityksestä

Tämä esimerkki sijaitsee Tietoyhdistimen määritysviittaus -kohdassa.

Esimerkkitietoyhdistimen yhteyssäännöistä

Tämä esimerkki sijaitsee tietoliittimien viittauksessa.

Esimerkki ARM-mallista

Luo ARM-käyttöönottomalli seuraavalla rakenteella, joka sisältää CCF-tietoliittimen luomiseen tarvittavat 4 JSON-osaa:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [],
}

Ompele osat yhteen JSON-editorin, kuten Visual Coden, kanssa, jotta syntaksivirheet, kuten pilkut ja suljesulkeet ja sulkeet, voidaan minimoida.

Mallin luontiprosessin ohjaamiseksi kommentit näkyvät metatiedoissadescription tai tekstiin sidottuina kommenttimerkinnällä // . Lisätietoja on artikkelissa ARM-mallin parhaat käytännöt – kommentit.

Harkitse ARM-mallitestityökalupaketin (arm-ttk) käyttöä luomasi mallin vahvistamiseksi. Lisätietoja on kohdassa arm-ttk.

Esimerkki ARM-mallista - parametrit

Lisätietoja on artikkelissa ARM-mallien parametrit.

Varoitus

Käytä securestring kaikkiin salasanoihin ja salaisuuksiin objekteissa, jotka voidaan lukea resurssien käyttöönoton jälkeen. Lisätietoja on kohdassa Luottamuksellisten suojattu syöte ja parametrien suojaussuositukset.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "string",
            "minLength": 1,
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "Not used, but needed to pass the arm-ttk test, 'Location-Should-Not-Be-Hardcoded'. Instead the `workspace-location` derived from the log analytics workspace is used."
            }
        },
        "workspace-location": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "[concat('Region to deploy solution resources -- separate from location selection',parameters('location'))]"
            }
        },
        "subscription": {
            "defaultValue": "[last(split(subscription().id, '/'))]",
            "type": "string",
            "metadata": {
                "description": "subscription id where Microsoft Sentinel is configured"
            }
        },
        "resourceGroupName": {
            "defaultValue": "[resourceGroup().name]",
            "type": "string",
            "metadata": {
                "description": "resource group name where Microsoft Sentinel is configured"
            }
        },
        "workspace": {
            "defaultValue": "",
            "type": "string",
            "metadata": {
                "description": "the log analytics workspace enabled for Microsoft Sentinel"
            }
        }
    },
    // Next is the variables section here
}

Esimerkki ARM-mallista – muuttujat

Nämä suositellut muuttujat auttavat yksinkertaistamaan mallia. Käytä enemmän tai vähemmän tarpeen mukaan. Lisätietoja on artikkelissa ARM-mallien muuttujat.

    "variables": {
        "workspaceResourceId": "[resourceId('microsoft.OperationalInsights/Workspaces', parameters('workspace'))]",
        "_solutionName": "Solution name", // Enter your solution name 
        "_solutionVersion": "3.0.0", // must be 3.0.0 or above
        "_solutionAuthor": "Contoso", // Enter the name of the author
        "_packageIcon": "<img src=\"{LogoLink}\" width=\"75px\" height=\"75px\">", // Enter the http link for the logo. NOTE: This field is only recommended for Azure Global Cloud.
        "_solutionId": "azuresentinel.azure-sentinel-solution-azuresentinel.azure-sentinel-MySolution", // Enter a name for your solution with this format but exchange the 'MySolution' portion
        "dataConnectorVersionConnectorDefinition": "1.0.0",
        "dataConnectorVersionConnections": "1.0.0",
        "_solutionTier": "Community", // This designates the appropriate support - all custom data connectors are "Community"
        "_dataConnectorContentIdConnectorDefinition": "MySolutionTemplateConnectorDefinition", // Enter a name for the connector
        "dataConnectorTemplateNameConnectorDefinition": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]",
        "_dataConnectorContentIdConnections": "MySolutionTemplateConnections", // Enter a name for the connections this connector makes
        "dataConnectorTemplateNameConnections": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnections')))]",
        "_logAnalyticsTableId1": "ExampleConnectorAlerts_CL" // Enter the custom table name - not needed if you are ingesting data into standard tables
		// Enter more variables as needed "":""
    },
    // Next is the resources sections here

Esimerkki ARM-mallista – resurssit

Tässä mallioppaassa on viisi ARM-käyttöönottoresurssia, jotka sisältävät 4 CCF-tietoliittimen rakennusosaa.

  1. contentTemplates (pääresurssi)
  2. dataConnectorDefinitions – Lisätietoja on kohdassa Tietoliittimen käyttöliittymä.
  3. Metatiedot
  4. contentTemplates
  5. contentPackages
    "resources": [
        // resource section 1 - contentTemplates
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
            "apiVersion": "2023-04-01-preview",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnectorDefinition'))]",
            "location": "[parameters('workspace-location')]",
            "dependsOn": [
                "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
            ],
            "properties": {
                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                "displayName": "[concat(variables('_solutionName'), variables('dataConnectorTemplateNameConnectorDefinition'))]",
                "contentKind": "DataConnector",
                "mainTemplate": {
                    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
                    "contentVersion": "[variables('dataConnectorVersionConnectorDefinition')]",
                    "parameters": {},
                    "variables": {},
                    "resources": [
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition')))]",
                            "apiVersion": "2022-01-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
                            "properties": {
                                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]",
                                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                                "kind": "DataConnector",
                                "version": "[variables('dataConnectorVersionConnectorDefinition')]",
                                "source": {
                                    "sourceId": "[variables('_solutionId')]",
                                    "name": "[variables('_solutionName')]",
                                    "kind": "Solution"
                                },
                                "author": {
                                    "name": "[variables('_solutionAuthor')]"
                                },
                                "support": {
                                    "name": "[variables('_solutionAuthor')]",
                                    "tier": "[variables('_solutionTier')]"
                                },
                                "dependencies": {
                                    "criteria": [
                                        {
                                            "version": "[variables('dataConnectorVersionConnections')]",
                                            "contentId": "[variables('_dataConnectorContentIdConnections')]",
                                            "kind": "ResourcesDataConnector"
                                        }
                                    ]
                                }
                            }
                        },
                        {
                            "name": "MyDCRV1", // Enter your DCR name
                            "apiVersion": "2021-09-01-preview",
                            "type": "Microsoft.Insights/dataCollectionRules",
                            "location": "[parameters('workspace-location')]",
                            "kind": null,
                            "properties": 
							{ 
                                // Enter your DCR properties here.
                                //  Consider using these variables:
                                //  "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]",
                                //  "workspaceResourceId": "[variables('workspaceResourceId')]",
							}
                        },
                        {
                            "name": "[variables('_logAnalyticsTableId1')]",
                            "apiVersion": "2022-10-01",
                            "type": "Microsoft.OperationalInsights/workspaces/tables",
                            "location": "[parameters('workspace-location')]",
                            "kind": null,
                            "properties": 
							{
								// Enter your log analytics table schema here. 
                                //  Consider using this variable for the name property:
                                //  "name": "[variables('_logAnalyticsTableId1')]",
							}			
                        }
						// Enter more tables if needed.
                    ]
                },
                "packageKind": "Solution",
                "packageVersion": "[variables('_solutionVersion')]",
                "packageName": "[variables('_solutionName')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnectorDefinition'))))]",
                "packageId": "[variables('_solutionId')]",
                "contentSchemaVersion": "3.0.0",
                "version": "[variables('_solutionVersion')]"
            }
        },
        // resource 2 section here
        // resource section 2 - dataConnectorDefinitions
        {
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition'))]",
            "apiVersion": "2022-09-01-preview",
            "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions",
            "location": "[parameters('workspace-location')]",
            "kind": "Customizable",
            "properties": 
			{
				//Enter your data connector definition properties here
				//"connectorUiConfig": {
				//	"graphQueriesTableName": "[variables('_logAnalyticsTableId1')]",
                //}, 
			}
        },
        // resource 3 section here
        // resource section 3 - metadata
        {
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition')))]",
            "apiVersion": "2022-01-01-preview",
            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
            "properties": {
                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]",
                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                "kind": "DataConnector",
                "version": "[variables('dataConnectorVersionConnectorDefinition')]",
                "source": {
                    "sourceId": "[variables('_solutionId')]",
                    "name": "[variables('_solutionName')]",
                    "kind": "Solution"
                },
                "author": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "support": {
                    "name": "[variables('_solutionAuthor')]",
                    "tier": "[variables('_solutionTier')]"
                },
                "dependencies": {
                    "criteria": [
                        {
                            "version": "[variables('dataConnectorVersionConnections')]",
                            "contentId": "[variables('_dataConnectorContentIdConnections')]",
                            "kind": "ResourcesDataConnector"
                        }
                    ]
                }
            }
        },
        // resource 4 section here
        // resource section 4 - contentTemplates
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
            "apiVersion": "2023-04-01-preview",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]",
            "location": "[parameters('workspace-location')]",
            "dependsOn": [
                "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
            ],
            "properties": {
                "contentId": "[variables('_dataConnectorContentIdConnections')]",
                "displayName": "[concat(variables('_solutionName'), variables('dataConnectorTemplateNameConnections'))]",
                "contentKind": "ResourcesDataConnector",
                "mainTemplate": {
                    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
                    "contentVersion": "[variables('dataConnectorVersionConnections')]",
                    "parameters":
                    // These parameters are used by the data connector primarily as properties for the administrator to enter in the UI when configuring the connector
					{
                        "connectorDefinitionName": {
                            "defaultValue": "connectorDefinitionName",
                            "type": "string",
                            "minLength": 1
                        },
                        "workspace": {
                            "defaultValue": "[parameters('workspace')]",
                            "type": "string"
                        },
                        "dcrConfig": {
                            "defaultValue": {
                                "dataCollectionEndpoint": "data collection Endpoint",
                                "dataCollectionRuleImmutableId": "data collection rule immutableId"
                            },
                            "type": "object"
                        }
						// Enter additional parameters, for example:
						//"domainname": {
                        //    "defaultValue": "domain name",
                        //    "type": "string",
                        //    "minLength": 1
                        //},
                        //"apikey": {
                        //    "defaultValue": "",
                        //    "type": "securestring",
                        //    "minLength": 1
                        //}
                    },
                    "variables": {
                        "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]"
                    },
                    "resources": [
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnections')))]",
                            "apiVersion": "2022-01-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
                            "properties": {
                                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]",
                                "contentId": "[variables('_dataConnectorContentIdConnections')]",
                                "kind": "ResourcesDataConnector",
                                "version": "[variables('dataConnectorVersionConnections')]",
                                "source": {
                                    "sourceId": "[variables('_solutionId')]",
                                    "name": "[variables('_solutionName')]",
                                    "kind": "Solution"
                                },
                                "author": {
                                    "name": "[variables('_solutionAuthor')]"
                                },
                                "support": {
                                    "name": "[variables('_solutionAuthor')]",
                                    "tier": "[variables('_solutionTier')]"
                                }
                            }
                        },
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', 'MyDataConnector')]", // Replace the last part of the name with your data connector name
                            //  To create several connections using this template, make the name dynamic. For example, use the 'concat' function to add the connector name with a GUID using the 'guid' function.
                            "apiVersion": "2022-12-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors",
                            "location": "[parameters('workspace-location')]",
                            "kind": "RestApiPoller",
                            "properties": 
							{
								// Enter your data connector properties here. If you want to use UI parameters remember to escape the parameter like this: "[[parameters('paramName')]"
								//  Use parameters as needed. For example:	
                                // "dataType": "My product security event API",
                                // "response": {
                                //   "eventsJsonPaths": [
                                //        "$"
                                //    ],
                                //    "format": "json"
                                // },
                                // "paging": {
                                //    "pagingType": "LinkHeader"
                                // },
                                // "connectorDefinitionName": "[[parameters('connectorDefinitionName')]",
                                // "auth": {
                                //   "apiKeyName": "Authorization",
                                //    "ApiKey": "[[parameters('apikey')]",
                                //    "apiKeyIdentifier": "SSWS",
                                //    "type": "APIKey"
                                //} ,
                                // "request": {
                                //   "apiEndpoint": "[[concat('https://',parameters('domainname'),'/api/v1/logs')]",
                                //    "rateLimitQPS": 10,
                                //   "queryWindowInMin": 5,
                                //   "httpMethod": "GET",
                                //    "retryCount": 3,
                                //    "timeoutInSeconds": 60,
                                //    "headers": {
                                //        "Accept": "application/json",
                                //        "User-Agent": "My-Data-Source"
                                //    },
                                //    "startTimeAttributeName": "since",
								//    "endTimeAttributeName": "until"		     
                                // },
                                // "dcrConfig": {
                                //    "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]",
                                //    "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]",
                                //    "streamName": "Custom-ExampleConnectorAlerts_CL" //This input stream should be the same as the inputStream property configured for the DataCollectionRule 
                                // },
                                // "isActive": true
                            }
                        }
                    ]
                },
                "packageKind": "Solution",
                "packageVersion": "[variables('_solutionVersion')]",
                "packageName": "[variables('_solutionName')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]",
                "packageId": "[variables('_solutionId')]",
                "contentSchemaVersion": "3.0.0",
                "version": "[variables('_solutionVersion')]"
            }
        },
        // resource 5 section here
        // resource section 5 - contentPackages
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('_solutionId'))]",
            "location": "[parameters('workspace-location')]",
            "apiVersion": "2023-04-01-preview",
            "properties": {
                "version": "[variables('_solutionVersion')]",
                "kind": "Solution",
                "contentSchemaVersion": "3.0.0",
                "contentId": "[variables('_solutionId')]",
                "source": {
                    "kind": "Solution",
                    "name": "[variables('_solutionName')]",
                    "sourceId": "[variables('_solutionId')]"
                },
                "author": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "support": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "dependencies": {
                    "operator": "AND",
                    "criteria": [
                        {
                            "kind": "DataConnector",
                            "contentId": "[variables('dataConnectorVersionConnectorDefinition')]",
                            "version": "[variables('_dataConnectorContentIdConnectorDefinition')]"
                        }
                    ]
                },
                "firstPublishDate": "2023-12-05",
                "providers": [
                    "[variables('_solutionAuthor')]"
                ],
                "contentKind": "Solution",
                "packageId": "[variables('_solutionId')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]",
                "displayName": "[variables('_solutionName')]",
                "publisherDisplayName": "[variables('_solutionId')]",
                "descriptionHtml": "test",
                "icon": "[variables('_packageIcon')]"
            }
        }
        // that's the end!
    ]
}

Lisätietoja on kohdassa