Megosztás a következőn keresztül:


Kód nélküli összekötő létrehozása a Microsoft Sentinelhez

A Kód nélküli összekötő platform (CCP) lehetővé teszi a partnerek, a fejlett felhasználók és a fejlesztők számára, hogy egyéni összekötőket hozzanak létre az adatok Microsoft Sentinelbe való betöltéséhez.

A központi szerződő fél használatával létrehozott összekötők teljes mértékben SaaS-nek számítanak, és nem vonatkoznak a szolgáltatástelepítésekre vonatkozó követelmények. Ezek közé tartozik az állapotfigyelés és a Microsoft Sentinel teljes támogatása is.

Az alábbi lépések végrehajtásával hozza létre a CCP-összekötőt, és csatlakoztassa az adatforrást a Microsoft Sentinelhez

  • Az adatösszekötő létrehozása
  • Az ARM-sablon létrehozása
  • Az összekötő üzembe helyezése
  • A Microsoft Sentinel csatlakoztatása az adatforráshoz és az adatok betöltése

Ez a cikk bemutatja, hogyan hajthatja végre az egyes lépéseket, és hogyan hozhat létre példakód nélküli összekötőt az út mentén.

Miben különbözik ez a központi szerződő fél az előző verziótól?

A központi szerződő fél kezdeti verzióját 2022 januárjában jelentették be . Azóta továbbfejlesztettük a platformot, és az örökölt kiadás már nem ajánlott. A központi szerződő fél új verziója a következő fő fejlesztésekkel rendelkezik:

  1. A különböző hitelesítési és lapszámozási típusok jobb támogatása.

  2. Támogatja a szabványos adatgyűjtési szabályokat (DCRs).

  3. A kód nélküli összekötő felhasználói felületének és kapcsolatkonfigurációs részei külön-külön vannak. Ez lehetővé teszi több kapcsolattal rendelkező összekötők létrehozását, amelyek korábban nem volt lehetségesek.

Előfeltételek

Az összekötő létrehozása előtt ismerje meg az adatforrást és a Microsoft Sentinel kapcsolódási módját.

  1. Adatgyűjtési végpont (DCE)

    A DCE a DCR követelménye. A naplóelemzési munkaterület DCR-üzemelő példányonként csak egy DCE jön létre. A Microsoft Sentinel-munkaterületen üzembe helyezett összes DCR ugyanazt a DCE-t használja. Ha többet szeretne tudni arról, hogyan hozhat létre egyet, vagy hogy szüksége van-e újra, tekintse meg az Adatgyűjtési végpontok az Azure Monitorban című témakört.

  2. A kimeneti tábla(ok) sémája.

    Fontos tisztában lenni az adatfolyam alakjával és a kimeneti táblában felvenni kívánt mezőkkel. Hivatkozzon az adatforrás dokumentációira, vagy elemezze a megfelelő kimeneti példákat.

Vizsgálja meg a következő összetevőket, és ellenőrizze azokat a Data Connector API-referenciában:

  1. HTTP-kérés- és válaszstruktúra az adatforráshoz

  2. Az adatforrás által igényelt hitelesítés.
    Ha például az adatforráshoz tanúsítványsal aláírt jogkivonat szükséges, az adatösszekötő API-referenciája azt határozza meg, hogy a tanúsítványhitelesítés nem támogatott.

  3. Az adatforrás lapozási beállításai

API-k tesztelése

Javasoljuk, hogy tesztelje az összetevőket egy API-tesztelési eszközzel, például az alábbiak egyikével:

Figyelemfelhívás

Olyan helyzetekben, ahol bizalmas adatokkal rendelkezik, például hitelesítő adatokkal, titkos kódokkal, hozzáférési jogkivonatokkal, API-kulcsokkal és más hasonló információkkal, mindenképpen használjon olyan eszközt, amely a szükséges biztonsági funkciókkal védi az adatokat, offline vagy helyileg működik, nem szinkronizálja az adatokat a felhőbe, és nem követeli meg, hogy online fiókba jelentkezzen be. Így csökkentheti a bizalmas adatok nyilvános közzétételével járó kockázatokat.

Az adatösszekötő létrehozása

A CCP-adatösszekötő létrehozásához négy összetevő szükséges.

  1. Kimeneti tábla definíciója
  2. Adatgyűjtési szabály (DCR)
  3. Adatösszekötő felhasználói felülete
  4. Adatösszekötő csatlakozási szabályai

Minden összetevőnek van egy szakasza, amely részletesen ismerteti a létrehozási és érvényesítési folyamatot. Az ARM-sablon végső csomagolásához vegye ki a JSON-t az egyes összetevőkből.

Kimeneti tábla definíciója

Tipp.

Hagyja ki ezt a lépést, ha az adatok csak standard Log Analytics-táblákba kerülnek. Ilyenek például a CommonSecurityLog és az ASimDnsActivityLogs. A támogatott szabványos adattípusok teljes listájáról további információt az egyéni adatösszekötők adatátalakításának támogatása című témakörben talál.

Ha az adatforrás nem felel meg egy szabványos tábla sémájának, két lehetősége van:

  • Egyéni tábla létrehozása az összes adathoz
  • Egyéni tábla létrehozása egyes adatokhoz, és a megfelelő adatok felosztása standard táblára

A Log Analytics felhasználói felületén egy egyenes előremutató metódussal hozhat létre egyéni táblázatot egy DCR-vel együtt. Ha az egyéni táblát a Tables API-val vagy más programozott módszerrel hozza létre, adja hozzá manuálisan az _CL utótagot a tábla nevéhez. További információ: Egyéni tábla létrehozása.

Az adatok több táblára való felosztásával kapcsolatos további információkért tekintse meg a példaadatokat és az adatokhoz létrehozott egyéni példatáblát .

Adatgyűjtési szabály

Az adatgyűjtési szabályok (DCR-ek) határozzák meg az adatgyűjtési folyamatot az Azure Monitorban. A DCR-ek meghatározzák, hogy milyen adatokat kell gyűjteni, hogyan alakíthatók át az adatok, és hová kell ezeket az adatokat küldeni.

  • Adatösszekötőnként csak egy DCR lesz üzembe helyezve.
  • A DCR-nek ugyanabban a régióban rendelkeznie kell egy megfelelő DCE-vel.
  • A központi szerződő fél adatösszekötőjének üzembe helyezésekor a rendszer létrehozza a DCR-t, ha még nem létezik.

A DCR-ekkel kapcsolatos legfrissebb információkra az alábbi cikkekben olvashat:

A DCE létrehozását bemutató oktatóanyagért, beleértve az egyéni tábla és a DCR létrehozásához használt mintaadatokat, tekintse meg az oktatóanyagot: Adatok küldése az Azure Monitor-naplókba a Logs ingestion API-val (Azure Portal). Az oktatóanyagban szereplő eljárással ellenőrizheti, hogy az adatok megfelelően kerülnek-e be a táblába a DCR-vel.

Ha szeretné megtudni, hogyan hozhat létre összetett, több adatfolyamot tartalmazó DCR-t, tekintse meg a DCR példaszakaszát.

Adatösszekötő felhasználói felülete

Ez az összetevő a Microsoft Sentinel adatösszekötő katalógusában jeleníti meg az adatösszekötő felhasználói felületét. Előfordulhat, hogy minden adatösszekötő csak egy felhasználói felületi definícióval rendelkezik.

Hozza létre az adatösszekötő felhasználói felületét a Data Connector Definition API-val. Az API-elemek részletesebb ismertetéséhez használja az Adatösszekötő definícióinak hivatkozását .

Megjegyzések:

  1. Az kind API-lekérdezési összekötő tulajdonságának mindig a következőnek kell lennie Customizable: .
  2. Mivel ez az API-lekérdezési összekötő típusa, állítsa a típust a connectivityCriteria következőre: hasDataConnectors
  3. A példa instructionSteps egy típusgombot ConnectionToggleButtontartalmaz. Ez a gomb segít aktiválni az adatösszekötő szabályainak üzembe helyezését a megadott kapcsolati paraméterek alapján.

Egy API-tesztelési eszköz használatával hívja meg az adatösszekötő-definíciók API-t az adatösszekötő felhasználói felületének létrehozásához annak ellenőrzéséhez az adatösszekötők gyűjteményében.

Ha egy példából szeretne tanulni, tekintse meg az Adatösszekötő-definíciók hivatkozási példa szakaszát.

Adatkapcsolati szabályok

A CCP-adatösszekötő meghatározására jelenleg kétféle adatkapcsolati szabály használható.

Egy API-teszteszköz használatával hívja meg az adatösszekötő API-t az adatösszekötő létrehozásához, amely egyesíti a csatlakozási szabályokat és a korábbi összetevőket. Ellenőrizze, hogy az összekötő csatlakoztatva van-e a felhasználói felületen.

Bizalmas adatok védelme

Bármilyen hitelesítést is használ a CCP-adatösszekötő, végezze el ezeket a lépéseket a bizalmas adatok biztonságának biztosítása érdekében. A cél az ARM-sablon hitelesítő adatainak továbbítása a központi szerződő fél számára anélkül, hogy olvasható bizalmas objektumokat hagyjon az üzembe helyezési előzményekben.

Címke létrehozása

Az adatösszekötő definíciója létrehoz egy felhasználói felületet, amely biztonsági hitelesítő adatokat kér. Ha például az adatösszekötő az OAuth használatával hitelesít egy naplóforrást, az adatösszekötő definíciós szakasza tartalmazza a OAuthForm típust az utasításokban. Ezzel beállítja az ARM-sablont, hogy kérje a hitelesítő adatokat.

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

Bizalmas bemenet tárolása

Az ARM-telepítési sablon egy szakasza helyet biztosít az adatösszekötőt üzembe helyező rendszergazda számára a jelszó megadásához. Az üzembe helyezés után nem olvasható objektumok bizalmas információinak megőrzésére szolgál securestring . További információkért tekintse meg a paraméterekre vonatkozó biztonsági javaslatokat.

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

A biztonságos összevonási objektumok használata

Végül a központi szerződő fél az adatösszekötő szakasz hitelesítő objektumait használja.

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

Feljegyzés

A hitelesítő objektum "ClientSecret": "[[parameters('Password')]", furcsa szintaxisa nem elírás! Ahhoz, hogy létrehozhassa a paramétereket is használó üzembehelyezési sablont, egy további indítással[ meg kell szabadulnia az adott szakaszban található paraméterektől. Ez lehetővé teszi, hogy a paraméterek az összekötővel való felhasználói interakció alapján rendeljenek hozzá egy értéket.

További információ: Sablonkifejezések feloldó karakterek.

Az üzembehelyezési sablon létrehozása

Manuálisan csomagoljon be egy Azure Resource Management-sablont (ARM) a példasablon kódmintáival útmutatóként. Ezek a kódminták ARM-sablonszakaszokkal vannak elosztva, amelyeket össze kell szúrnia.

Ha Google Cloud Platform (GCP) CCP-adatösszekötőt hoz létre, csomagolja be az üzembehelyezési sablont a GCP CCP-sablon használatával. A GCP CCP-sablon kitöltéséről további információt a GCP adatösszekötő kapcsolati szabályainak referenciaanyagában talál.

A példasablonok mellett a Microsoft Sentinel tartalomközpontban elérhető közzétett megoldások a központi szerződő félt használják adatösszekötőikhez. Tekintse át az alábbi megoldásokat, mint további példákat arra, hogyan varrhatja össze az összetevőket egy ARM-sablonnal.

RestApiPoller CCP-adatösszekötő példák

GCP CCP-adatösszekötő példák

Az összekötő üzembe helyezése

Telepítse a kód nélküli összekötőt egyéni sablonként.

Tipp.

Törölje az előző lépésekben létrehozott erőforrásokat. A DCR és az egyéni tábla az üzembe helyezéssel jön létre. Ha az üzembe helyezés előtt nem távolítja el ezeket az erőforrásokat, nehezebb ellenőrizni a sablont.

  1. Másolja ki az ARM-alapú üzembehelyezési sablon tartalmát.
  2. Kövesse a Rövid útmutató: ARM-sablonok létrehozása és üzembe helyezése az Azure Portal használatával című cikk sablonutasításainak szerkesztését és üzembe helyezését.

A naplózási forrás hálózati elkülönítésének fenntartása

Ha a naplózási forrás hálózati elkülönítést igényel, konfigurálja a központi szerződő fél által használt nyilvános IP-címek engedélyezési listáját.

Az Azure-beli virtuális hálózatok szolgáltatáscímkéket használnak a hálózati hozzáférés-vezérlők definiálásához. A központi szerződő fél számára ez a szolgáltatáscímke a Scuba.

A Búvár szolgáltatás címkéjével társított aktuális IP-címtartomány megkereséséhez lásd: Szolgáltatáscímke-felderítési API használata.

A kód nélküli összekötő ellenőrzése

A kód nélküli összekötő megtekintése az adatösszekötő katalógusában. Nyissa meg az adatösszekötőt, és végezze el a csatlakozáshoz szükséges hitelesítési paramétereket. A sikeres csatlakozás után létrejön a DCR és az egyéni táblák. Tekintse meg a DCR-erőforrást az erőforráscsoportban, valamint a logs analytics munkaterületen található egyéni táblákat.

Feljegyzés

Az adatok betöltése akár 30 percet is igénybe vehet.

Példa

A kód nélküli összekötő létrehozásának minden lépését az alábbi példaszakaszok jelölik.

Ha egy összetett adatforrást szeretne bemutatni több táblába való betöltéssel, ez a példa egy kimeneti táblázat sémáját és egy több kimeneti streamet tartalmazó DCR-t tartalmaz. A DCR-példa ezeket a KQL-átalakításokkal együtt egyesíti. Az adatösszekötő felhasználói felületének definíciója és a kapcsolati szabályok példái ugyanabból a példaadatforrásból folytatódnak. Végül a megoldássablon az összes ilyen példaösszetevőt felhasználva bemutatja, hogyan hozhatja létre a példaként szolgáló CCP-adatösszekötőt.

Példaadatok

Az adatforrás a következő JSON-t adja vissza a végponthoz való csatlakozáskor.

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

Ez a válasz a riasztást és a fájlt tartalmazzaeventType. A fájleseményeket az AsimFileEventLogs nevű normalizált standard táblába kell beolvasni, a riasztási eseményeket pedig egy egyéni táblába kell beolvasni.

Példa egyéni táblázatra

A táblázat szerkezetével kapcsolatos további információkért lásd a Tables API-t. Az egyéni naplótáblák nevének utótagnak _CL kell lennie.

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

Példa adatgyűjtési szabályra

Az alábbi DCR egyetlen streamet Custom-ExampleConnectorInput határoz meg a példa adatforrás használatával, és a kimenetet két táblává alakítja.

  1. Az első adatfolyam a riasztást eventType = az egyéni ExampleConnectorAlerts_CL táblára irányítja.
  2. a második adatfolyam a Fájlt a normalizált standard táblábaASimFileEventLogs irányítjaeventType = .

A példa szerkezetéről további információt az adatgyűjtési szabály struktúrája című témakörben talál.

Ha tesztkörnyezetben szeretné létrehozni ezt a DCR-t, kövesse az Adatgyűjtési szabályok API-t. A példában szereplő {{double curly braces}} elemek olyan változókat jelölnek, amelyek értékeket igényelnek az API-tesztelési eszközök egyszerű használatához. Amikor ezt az erőforrást az ARM-sablonban hozza létre, az itt kifejezett változók paraméterekre cserélődnek.

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

Példa adatösszekötő felhasználói felületének definíciója

Ez a példa az Adatösszekötő definíciók hivatkozásában található.

Példa adatösszekötő kapcsolati szabályaira

Ez a példa az Adatösszekötők hivatkozásban található.

Példa ARM-sablonra

Hozza létre az ARM-alapú üzembehelyezési sablont a következő struktúrával, amely tartalmazza a CCP-adatösszekötő létrehozásához szükséges JSON-összetevők 4 szakaszát:

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

A szakaszok összefűzése egy JSON-kompatibilis szerkesztővel, például a Visual Code-tal a szintaxishibák, például a vesszők, a záró zárójelek és zárójelek minimalizálása érdekében.

A sablonkészítési folyamat irányításához megjegyzések jelennek meg a metaadatokban description vagy a megjegyzéscímkék // beágyazott szövegében. További információkért tekintse meg az ARM-sablon ajánlott eljárásait – megjegyzéseket.

Fontolja meg az ARM-sablon tesztelési eszközkészletének (arm-ttk) használatát a buildelt sablon ellenőrzéséhez. További információ: arm-ttk.

Példa ARM-sablonra – paraméterek

További információkért tekintse meg az ARM-sablonok paramétereit.

Figyelmeztetés

Az erőforrások üzembe helyezése után olvasható objektumok összes jelszavához és titkos kulcsához használható securestring . További információ: Biztonságos bizalmas bemenet és biztonsági javaslatok paraméterekhez.

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

Példa ARM-sablonra – változók

Ezek az ajánlott változók megkönnyítik a sablont. Szükség szerint használjon többé-kevésbé. További információ: Változók ARM-sablonokban.

    "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

Példa ARM-sablonra – erőforrások

Ebben a sablon-útmutatóban 5 ARM-alapú üzembehelyezési erőforrás található, amelyek a 4 CCP-adatösszekötő építőelemeit képezik.

  1. contentTemplates (szülőerőforrás)
  2. dataConnectorDefinitions – További információ: Adatösszekötő felhasználói felülete.
  3. metaadatok
  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!
    ]
}

További információk: