Vytvoření konektoru bez kódu pro Microsoft Sentinel
Codeless Connector Platform (CCP) poskytuje partnerům, pokročilým uživatelům a vývojářům možnost vytvářet vlastní konektory pro příjem dat do Služby Microsoft Sentinel.
Konektory vytvořené pomocí ústřední protistrany jsou plně SaaS bez požadavků na instalace služeb. Zahrnují také monitorování stavu a plnou podporu z Microsoft Sentinelu.
Pomocí následujícího postupu vytvořte konektor PRO ÚSTŘEDNÍ PROTISTRANu a připojte zdroj dat ke službě Microsoft Sentinel.
- Sestavení datového konektoru
- Vytvoření šablony ARM
- Nasazení konektoru
- Připojte Microsoft Sentinel ke zdroji dat a začněte ingestovat data.
V tomto článku se dozvíte, jak provést jednotlivé kroky a poskytnout ukázkový konektor bez kódu, který se má sestavit.
Jak se tato ústřední protistrana liší od předchozí verze?
Původní verze ústřední protistrany byla oznámena v lednu 2022. Od té doby jsme vylepšili platformu a starší verze se už nedoporučuje. Tato nová verze ústřední protistrany má následující klíčová vylepšení:
Lepší podpora pro různé typy ověřování a stránkování
Podporuje standardní pravidla shromažďování dat (DCR).
Části konfigurace uživatelského rozhraní a připojení konektoru bez kódu jsou teď oddělené. To umožňuje vytvářet konektory s více připojeními, která nebyla dříve možná.
Požadavky
Než začnete vytvářet konektor, porozumíte zdroji dat a tomu, jak se Microsoft Sentinel potřebuje připojit.
Koncový bod shromažďování dat (DCE)
DCE je požadavek na DCR. Pro nasazení DCR pracovního prostoru služby Log Analytics se vytvoří jenom jeden DCE. Každý DCR nasazený pro pracovní prostor Microsoft Sentinelu používá stejný DCE. Další informace o tom, jak vytvořit jeden nebo jestli potřebujete nový, najdete v tématu Koncové body shromažďování dat ve službě Azure Monitor.
Schéma výstupních tabulek
Je důležité porozumět tvaru datového streamu a polím, která chcete zahrnout do výstupní tabulky. Odkazujte na dokumentaci ke zdroji dat nebo analyzujte dostatečné příklady výstupu.
Projděte si následující komponenty a ověřte jejich podporu v referenčních informacích k rozhraní API datového konektoru:
Struktura požadavků a odpovědí HTTP pro zdroj dat
Ověřování vyžadované zdrojem dat
Pokud například váš zdroj dat vyžaduje token podepsaný certifikátem, referenční informace k rozhraní API datového konektoru určují ověřování certifikátů se nepodporuje.Možnosti stránkování zdroje dat
Testování rozhraní API
Doporučujeme otestovat komponenty pomocí nástroje pro testování rozhraní API, jako je jeden z následujících kroků:
- Visual Studio Code s rozšířením z Webu Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge – nástroj konzoly sítě
- Bruno
- kudrna
Upozornění
V situacích, kdy máte citlivá data, jako jsou přihlašovací údaje, tajné kódy, přístupové tokeny, klíče rozhraní API a další podobné informace, nezapomeňte použít nástroj, který chrání vaše data pomocí potřebných funkcí zabezpečení, funguje offline nebo místně, nesynchronizuje vaše data do cloudu a nevyžaduje, abyste se přihlásili k online účtu. Tímto způsobem snížíte riziko zveřejnění citlivých dat veřejnosti.
Sestavení datového konektoru
K sestavení datového konektoru ÚSTŘEDNÍ PROTISTRANy jsou potřeba čtyři komponenty.
- Definice výstupní tabulky
- Pravidlo shromažďování dat (DCR)
- Uživatelské rozhraní datového konektoru
- Pravidla připojení datového konektoru
Každá komponenta obsahuje oddíl, který podrobně popisuje proces vytvoření a ověření. Převezměte JSON z každé komponenty pro konečné balení šablony ARM.
Definice výstupní tabulky
Tip
Tento krok přeskočte, pokud se vaše data ingestují jenom do standardních tabulek Log Analytics. Mezi příklady standardních tabulek patří CommonSecurityLog a ASimDnsActivityLogs. Další informace o úplném seznamu podporovaných standardních datových typů najdete v tématu Podpora transformace dat pro vlastní datové konektory.
Pokud zdroj dat neodpovídá schématu standardní tabulky, máte dvě možnosti:
- Vytvoření vlastní tabulky pro všechna data
- Vytvoření vlastní tabulky pro některá data a rozdělení odpovídajících dat do standardní tabulky
Pomocí uživatelského rozhraní Log Analytics můžete přímou metodu vytvořit vlastní tabulku společně s DCR. Pokud vytvoříte vlastní tabulku pomocí rozhraní TABLE API nebo jiné programové metody, přidejte příponu _CL
ručně do názvu tabulky. Další informace najdete v tématu Vytvoření vlastní tabulky.
Další informace o rozdělení dat na více než jednu tabulku najdete v ukázkových datech a ukázkové vlastní tabulce vytvořené pro tato data.
Pravidlo shromažďování dat
Pravidla shromažďování dat (DCR) definují proces shromažďování dat ve službě Azure Monitor. Pravidla shromažďování dat určují, jaká data se mají shromažďovat, jak tato data transformovat a kam se mají tato data odesílat.
- Na datový konektor se nasadí jenom jeden řadič domény.
- Řadič domény musí mít odpovídající řadič domény ve stejné oblasti.
- Po nasazení datového konektoru PRO ÚSTŘEDNÍ PROTISTRANu se dcR vytvoří, pokud ještě neexistuje.
Nejnovější informace o dcR najdete v těchto článcích:
Kurz demonstrující vytvoření DCE, včetně použití ukázkových dat k vytvoření vlastní tabulky a DCR, najdete v kurzu: Odeslání dat do protokolů služby Azure Monitor pomocí rozhraní API pro příjem protokolů (Azure Portal). Pomocí procesu v tomto kurzu ověřte, že se data správně ingestují do vaší tabulky pomocí dcR.
Pokud chcete zjistit, jak vytvořit komplexní DCR s více toky dat, přečtěte si ukázkovou část DCR.
Uživatelské rozhraní datového konektoru
Tato komponenta vykreslí uživatelské rozhraní datového konektoru v galerii datových konektorů Microsoft Sentinelu. Každý datový konektor může mít pouze jednu definici uživatelského rozhraní.
Sestavte uživatelské rozhraní datového konektoru pomocí rozhraní API pro definici datového konektoru. K podrobnějšímu vysvětlení prvků rozhraní API použijte odkazy na definice datového konektoru jako doplněk.
Poznámky:
- Vlastnost
kind
konektoru pro dotazování rozhraní API by měla býtCustomizable
vždy . - Vzhledem k tomu, že se jedná o typ konektoru dotazování rozhraní API, nastavte typ na
connectivityCriteria
hasDataConnectors
instructionSteps
Příklad obsahuje tlačítko typuConnectionToggleButton
. Toto tlačítko pomáhá aktivovat nasazení pravidel datového konektoru na základě zadaných parametrů připojení.
Pomocí testovacího nástroje rozhraní API můžete volat rozhraní API pro definice datových konektorů k vytvoření uživatelského rozhraní datového konektoru, abyste ho ověřili v galerii datových konektorů.
Pokud se chcete naučit z příkladu, podívejte se na ukázkovou část s definicemi datového konektoru.
Pravidla datového připojení
V současné době jsou k dispozici dva druhy pravidel datového připojení pro definování datového konektoru PRO ÚSTŘEDNÍ PROTISTRANU.
RestApiPoller
Druh umožňuje přizpůsobit stránkování, autorizaci a očekávanou datovou část požadavků a odpovědí pro váš zdroj dat. Další informace najdete v tématu Referenční informace k pravidlům připojení datového konektoru RestApiPoller.GCP
Díky automatické konfiguraci stránkování a očekávaných datových částí pro zdroj dat Google Cloud Platform (GCP) můžete zkrátit dobu vývoje. Další informace najdete v referenčních informacích k pravidlům připojení datového konektoru GCP.
Pomocí nástroje pro testování rozhraní API volejte rozhraní API datového konektoru a vytvořte datový konektor, který kombinuje pravidla připojení a předchozí komponenty. Ověřte, že je konektor připojený v uživatelském rozhraní.
Zabezpečení důvěrného vstupu
Bez ohledu na to, co datový konektor PRO ÚSTŘEDNÍ PROTISTRANu používá, proveďte tyto kroky, abyste zajistili zabezpečení důvěrných informací. Cílem je předat přihlašovací údaje ze šablony ARM ústřední protistraně, aniž byste museli nechat čitelné důvěrné objekty v historii nasazení.
Vytvoření popisku
Definice datového konektoru vytvoří prvek uživatelského rozhraní, který zobrazí výzvu k zadání přihlašovacích údajů zabezpečení. Pokud se například datový konektor ověřuje ve zdroji protokolů pomocí OAuth, část definice datového konektoru obsahuje OAuthForm
typ v pokynech. Tím se šablona ARM nastaví tak, aby se zobrazila výzva k zadání přihlašovacích údajů.
"instructions": [
{
"type": "OAuthForm",
"parameters": {
"UsernameLabel": "Username",
"PasswordLabel": "Password",
"connectButtonLabel": "Connect",
"disconnectButtonLabel": "Disconnect"
}
}
],
Ukládání důvěrných vstupů
Část šablony nasazení ARM poskytuje místo pro správce, který nasazuje datový konektor, aby zadal heslo. Slouží securestring
k zachování důvěrných informací zabezpečených v objektu, který není po nasazení čitelný. Další informace najdete v tématu Doporučení zabezpečení pro parametry.
"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
}
}
Použití objektů securestring
Ústřední protistrana nakonec využívá objekty přihlašovacích údajů v části datového konektoru.
"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"
}
},
Poznámka:
Zvláštní syntaxe objektu "ClientSecret": "[[parameters('Password')]",
přihlašovacích údajů není překlep!
Pokud chcete vytvořit šablonu nasazení, která také používá parametry, musíte uvodit parametry v této části s dodatečným spuštěním[
. To umožňuje parametrům přiřadit hodnotu na základě interakce uživatele s konektorem.
Další informace naleznete v tématu Výrazy šablony řídicí znaky.
Vytvoření šablony nasazení
Šablonu Azure Resource Management (ARM) můžete ručně zabalit pomocí ukázkových ukázek kódu šablony jako průvodce. Tyto ukázky kódu jsou rozdělené oddíly šablony ARM, které je nutné spojit dohromady.
Pokud vytváříte datový konektor GCP (Google Cloud Platform), zabalte šablonu nasazení pomocí ukázkové šablony GCP CCP. Informace o tom, jak vyplnit šablonu GCP CCP, naleznete v referenčních informacích k pravidlům připojení datového konektoru GCP.
Kromě ukázkových šablon používají publikovaná řešení dostupná v centru obsahu Microsoft Sentinelu pro své datové konektory ústřední protistranu. V následujících řešeních si projděte další příklady, jak spojit komponenty do šablony ARM.
RestApiPoller
Příklady datových konektorů PRO ÚSTŘEDNÍ PROTISTRANU
- Zabezpečení prohlížeče Ermes
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Pracovní den
- Atlassian Jira
- Jednotné přihlašování okta
GCP
Příklady datových konektorů PRO ÚSTŘEDNÍ PROTISTRANU
Nasazení konektoru
Nasaďte konektor bez kódu jako vlastní šablonu.
Tip
Odstraňte prostředky, které jste vytvořili v předchozích krocích. Pomocí nasazení se vytvoří DCR a vlastní tabulka. Pokud tyto prostředky před nasazením neodeberete, je obtížnější šablonu ověřit.
- Zkopírujte obsah šablony nasazení ARM.
- Postupujte podle pokynů k úpravám a nasazení šablony z článku Rychlý start: Vytvoření a nasazení šablon ARM pomocí webu Azure Portal.
Údržba izolace sítě pro zdroj protokolování
Pokud zdroj protokolování vyžaduje izolaci sítě, nakonfigurujte seznam povolených veřejných IP adres používaných ústřední protistranou.
Virtuální sítě Azure používají značky služeb k definování řízení přístupu k síti. Pro ústřední protistranu je tato značka služby potápění.
Aktuální rozsah IP adres přidružený ke značce Potápění najdete v tématu Použití rozhraní API zjišťování značek služeb.
Ověření konektoru bez kódu
Zobrazte konektor bez kódu v galerii datových konektorů. Otevřete datový konektor a vyplňte všechny parametry ověřování potřebné pro připojení. Po úspěšném připojení se vytvoří dcR a vlastní tabulky. Prohlédněte si prostředek DCR ve vaší skupině prostředků a všechny vlastní tabulky z pracovního prostoru analýzy protokolů.
Poznámka:
Než se data začnou ingestovat, může to trvat až 30 minut.
Příklad
Každý krok při sestavování konektoru bez kódu je znázorněn v následujících ukázkových částech.
- Ukázková data
- Příklad vlastní tabulky
- Příklad pravidla shromažďování dat
- Příklad definice uživatelského rozhraní datového konektoru
- Příklady pravidel datového připojení
- Použití ukázkových dat s ukázkovou šablonou
Abychom si ukázali složitý zdroj dat s příjmem dat do více než jedné tabulky, tento příklad obsahuje schéma výstupní tabulky a DCR s více výstupními streamy. Příklad DCR je spojuje spolu s jejími transformacemi KQL. Příklady definic uživatelského rozhraní datového konektoru a pravidel připojení pokračují ze stejného ukázkového zdroje dat. Nakonec šablona řešení používá všechny tyto ukázkové komponenty k zobrazení kompletního postupu vytvoření ukázkového datového konektoru ÚSTŘEDNÍ PROTISTRANY.
Příklad dat
Zdroj dat vrátí následující JSON při připojování ke svému koncovému bodu.
[
{
"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"
}
]
Tato odpověď obsahuje eventType
výstrahu a soubor. Události souboru se mají ingestovat do normalizované standardní tabulky AsimFileEventLogs, zatímco události upozornění se mají ingestovat do vlastní tabulky.
Příklad vlastní tabulky
Další informace o struktuře této tabulky najdete v tématu Rozhraní API pro tabulky. Názvy vlastních tabulek protokolů by měly mít příponu _CL
.
{
"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říklad pravidla shromažďování dat
Následující řadič domény definuje jeden datový proud Custom-ExampleConnectorInput
pomocí ukázkového zdroje dat a transformuje výstup do dvou tabulek.
- První tok dat směruje
eventType
= výstrahu na vlastníExampleConnectorAlerts_CL
tabulku. - druhý tok dat směruje
eventType
= soubor do normalizované standardní tabulky.ASimFileEventLogs
Další informace o struktuře tohoto příkladu naleznete v tématu Struktura pravidla shromažďování dat.
Pokud chcete tento řadič domény vytvořit v testovacím prostředí, postupujte podle rozhraní API pravidel shromažďování dat. Prvky příkladu v {{double curly braces}}
indikují proměnné, které vyžadují hodnoty pro snadné použití s testovacím nástrojem rozhraní API. Při vytváření tohoto prostředku v šabloně ARM se proměnné vyjádřené zde vyměňují za parametry.
{
"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říklad definice uživatelského rozhraní datového konektoru
Tento příklad se nachází v referenčních informacích o definicích datového konektoru.
Příklad pravidel připojení datového konektoru
Tento příklad se nachází v referenčních informacích k datovým konektorům.
Příklad šablony ARM
Sestavte šablonu nasazení ARM s následující strukturou, která obsahuje 4 části komponent JSON potřebné k sestavení datového konektoru ÚSTŘEDNÍ PROTISTRANy:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
}
Stehněte oddíly společně s editorem podporujícím JSON, jako je Visual Code, abyste minimalizovali chyby syntaxe, jako jsou čárky a zavírací závorky a závorky.
Pokud chcete vést proces vytváření šablon, komentáře se zobrazí v metadatech description
nebo v textu s zápisem //
komentáře. Další informace najdete v tématu Osvědčené postupy pro šablony ARM – komentáře.
Zvažte použití testovací sady nástrojů pro šablony ARM (arm-ttk) k ověření šablony, kterou vytváříte. Další informace najdete v tématu arm-ttk.
Příklad šablony ARM – parametry
Další informace najdete v tématu Parametry v šablonách ARM.
Upozorňující
Používejte securestring
pro všechna hesla a tajné kódy v objektech čitelných po nasazení prostředků.
Další informace najdete v tématu Zabezpečení důvěrných vstupů a doporučení zabezpečení pro parametry.
{
"$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říklad šablony ARM – proměnné
Tyto doporučené proměnné pomáhají šablonu zjednodušit. Podle potřeby použijte více nebo méně. Další informace najdete v tématu Proměnné v šablonách ARM.
"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říklad šablony ARM – prostředky
V této šabloně jsou k dispozici 5 prostředků nasazení ARM, které jsou součástí stavebních komponent datového konektoru 4 ÚSTŘEDNÍ PROTISTRANY.
- contentTemplates (nadřazený prostředek)
- dataConnectorDefinitions – Další informace najdete v tématu o uživatelském rozhraní datového konektoru.
- metadata
- contentTemplates
- metadata
- RestApiPoller – Další informace najdete v tématu Pravidla datového připojení.
- 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!
]
}
Související obsah
Další informace najdete v tématu
- Informace o řešeních Microsoft Sentinel
- Referenční informace k šabloně ARM datového konektoru