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:
A különböző hitelesítési és lapszámozási típusok jobb támogatása.
Támogatja a szabványos adatgyűjtési szabályokat (DCRs).
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.
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.
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:
HTTP-kérés- és válaszstruktúra az adatforráshoz
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.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:
- Visual Studio Code a Visual Studio Marketplace bővítményével
- PowerShell Invoke-RestMethod
- Microsoft Edge – Hálózati konzol eszköz
- Bruno
- csavarodik
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.
- Kimeneti tábla definíciója
- Adatgyűjtési szabály (DCR)
- Adatösszekötő felhasználói felülete
- 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:
- Az
kind
API-lekérdezési összekötő tulajdonságának mindig a következőnek kell lennieCustomizable
: . - Mivel ez az API-lekérdezési összekötő típusa, állítsa a típust a
connectivityCriteria
következőre:hasDataConnectors
- A példa
instructionSteps
egy típusgombotConnectionToggleButton
tartalmaz. 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ó.
RestApiPoller
a kind lehetővé teszi az adatforrás lapozási, engedélyezési és várt kérési/válasz-hasznos adatainak testreszabását. További információ: RestApiPoller adatösszekötő kapcsolati szabályokra vonatkozó referencia.GCP
A kind lehetővé teszi a fejlesztési idő csökkentését a Lapozás és a várt válasz hasznos adatok automatikus konfigurálásával a Google Cloud Platform (GCP) adatforráshoz. További információ: GCP-adatösszekötő kapcsolati szabályainak referencia
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
- Ermes Browser Security
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Munkanap
- Atlassian Jira
- Okta egyszeri bejelentkezés
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.
- Másolja ki az ARM-alapú üzembehelyezési sablon tartalmát.
- 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.
- Példaadatok
- Példa egyéni táblázatra
- Példa adatgyűjtési szabályra
- Példa adatösszekötő felhasználói felületének definíciója
- Példa adatkapcsolati szabályokra
- Példaadatok használata példasablonnal
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.
- Az első adatfolyam a riasztást
eventType
= az egyéniExampleConnectorAlerts_CL
táblára irányítja. - a második adatfolyam a Fájlt a normalizált standard táblába
ASimFileEventLogs
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.
- contentTemplates (szülőerőforrás)
- metaadatok
- dataCollectionRules – További információ: Adatgyűjtési szabály.
- táblák – További információ: Kimeneti tábla definíciója.
- dataConnectorDefinitions – További információ: Adatösszekötő felhasználói felülete.
- metaadatok
- contentTemplates
- metaadatok
- RestApiPoller – További információ: Adatkapcsolati szabályok.
- 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!
]
}
Kapcsolódó tartalom
További információk: