Skapa en kodlös anslutningsapp för Microsoft Sentinel
Codeless Connector Platform (CCP) ger partner, avancerade användare och utvecklare möjlighet att skapa anpassade anslutningsappar för inmatning av data till Microsoft Sentinel.
Anslutningsappar som skapats med hjälp av CCP är helt SaaS, utan krav för tjänstinstallationer. De omfattar även hälsoövervakning och fullständigt stöd från Microsoft Sentinel.
Använd följande steg för att skapa din CCP-anslutningsapp och ansluta datakällan till Microsoft Sentinel
- Skapa dataanslutningsappen
- Skapa ARM-mallen
- Distribuera anslutningsappen
- Ansluta Microsoft Sentinel till din datakälla och börja mata in data
Den här artikeln visar hur du slutför varje steg och tillhandahåller ett exempel på en kodlös anslutningsapp som du kan skapa längs vägen.
Hur skiljer sig den här centrala motparten från den tidigare versionen?
Den första versionen av den centrala motparten tillkännagavs i januari 2022. Sedan dess har vi förbättrat plattformen och den äldre versionen rekommenderas inte längre. Den här nya versionen av den centrala motparten har följande viktiga förbättringar:
Bättre stöd för olika typer av autentisering och sidnumrering.
Stöder standardregler för datainsamling (DCR).
Användargränssnittet och anslutningskonfigurationsdelarna i den kodlösa anslutningsappen är separata nu. Detta gör det möjligt att skapa anslutningsappar med flera anslutningar som inte var möjliga tidigare.
Förutsättningar
Innan du skapar en anslutningsapp bör du förstå din datakälla och hur Microsoft Sentinel behöver ansluta.
Datainsamlingsslutpunkt (DCE)
En DCE är ett krav för en DCR. Endast en DCE skapas per DCR-distribution för Log Analytics-arbetsytan. Varje DCR som distribueras för en Microsoft Sentinel-arbetsyta använder samma DCE. Mer information om hur du skapar en eller om du behöver en ny finns i Datainsamlingsslutpunkter i Azure Monitor.
Schema för utdatatabellerna.
Det är viktigt att förstå formen på dataströmmen och de fält som du vill inkludera i utdatatabellen. Referera till dokumentationen för datakällan eller analysera tillräckliga utdataexempel.
Granska följande komponenter och kontrollera stödet för dem i API-referensen för Data Connector:
HTTP-begäran och svarsstruktur till datakällan
Autentisering som krävs av datakällan.
Om datakällan till exempel kräver en token signerad med ett certifikat anger API-referensen för dataanslutningsappen att certifikatautentisering inte stöds.Sidnumreringsalternativ för datakällan
Testa API:er
Vi rekommenderar att du testar dina komponenter med ett API-testverktyg som något av följande:
- Visual Studio Code med ett tillägg från Visual Studio Marketplace
- PowerShell Invoke-RestMethod
- Microsoft Edge – verktyg för nätverkskonsol
- Bruno
- hårlock
Varning
För scenarier där du har känsliga data, till exempel autentiseringsuppgifter, hemligheter, åtkomsttoken, API-nycklar och annan liknande information, bör du använda ett verktyg som skyddar dina data med nödvändiga säkerhetsfunktioner, fungerar offline eller lokalt, inte synkroniserar dina data till molnet och inte kräver att du loggar in på ett onlinekonto. På så sätt minskar du risken för att exponera känsliga data för allmänheten.
Skapa dataanslutningsappen
Det krävs fyra komponenter för att skapa CCP-dataanslutningen.
- Definition av utdatatabell
- Datainsamlingsregel (DCR)
- Användargränssnitt för dataanslutning
- Anslutningsregler för dataanslutning
Varje komponent har ett avsnitt som beskriver processen för att skapa och verifiera. Ta JSON från varje komponent för den slutliga paketeringen av ARM-mallen.
Definition av utdatatabell
Dricks
Hoppa över det här steget om dina data bara matas in i Standard Log Analytics-tabeller. Exempel på standardtabeller är CommonSecurityLog och ASimDnsActivityLogs. Mer information om den fullständiga listan över standarddatatyper som stöds finns i Stöd för datatransformering för anpassade dataanslutningar.
Om datakällan inte överensstämmer med schemat för en standardtabell har du två alternativ:
- Skapa en anpassad tabell för alla data
- Skapa en anpassad tabell för vissa data och dela upp överensstämmande data i en standardtabell
Använd Log Analytics-användargränssnittet för en enkel metod för att skapa en anpassad tabell tillsammans med en DCR. Om du skapar den anpassade tabellen med hjälp av tabell-API:et eller en annan programmatisk metod lägger du till suffixet _CL
manuellt i tabellnamnet. Mer information finns i Skapa en anpassad tabell.
Mer information om hur du delar upp dina data i mer än en tabell finns i exempeldata och den anpassade exempeltabell som skapats för dessa data.
Datainsamlingsregel
Datainsamlingsregler definierar datainsamlingsprocessen i Azure Monitor. DCR anger vilka data som ska samlas in, hur du transformerar dessa data och var dessa data ska skickas.
- Det finns bara en DCR som distribueras per dataanslutning.
- En DCR måste ha en motsvarande DCE i samma region.
- När CCP-dataanslutningen distribueras skapas DCR om den inte redan finns.
Referera till den senaste informationen om domänkontrollanter i dessa artiklar:
En självstudiekurs som visar hur du skapar en DOMÄNKONTROLLant, inklusive användning av exempeldata för att skapa den anpassade tabellen och DCR, finns i Självstudie: Skicka data till Azure Monitor-loggar med LOGS-inmatnings-API (Azure Portal). Använd processen i den här självstudien för att kontrollera att data matas in korrekt i tabellen med din DCR.
Information om hur du skapar en komplex DCR med flera dataflöden finns i dcr-exempelavsnittet.
Användargränssnitt för dataanslutning
Den här komponenten renderar användargränssnittet för dataanslutningsappen i microsoft Sentinel-galleriet för dataanslutning. Varje dataanslutning kan bara ha en användargränssnittsdefinition.
Skapa användargränssnittet för dataanslutningsappen med API:et för dataanslutningsdefinition. Använd referensen för dataanslutningsdefinitioner som ett tillägg för att förklara API-elementen i detalj.
Anteckningar:
- Egenskapen
kind
för API-avsökningsanslutningsappen ska alltid varaCustomizable
. - Eftersom det här är en typ av API-avsökningsanslutningsapp anger du
connectivityCriteria
typen tillhasDataConnectors
instructionSteps
Exemplet innehåller en knapp av typenConnectionToggleButton
. Med den här knappen kan du utlösa distributionen av regler för dataanslutning baserat på de angivna anslutningsparametrarna.
Använd ett API-testverktyg för att anropa API:et för dataanslutningsdefinitioner för att skapa användargränssnittet för dataanslutningsappen för att verifiera det i galleriet för dataanslutningsappar.
Mer information om ett exempel finns i referensexemplet för dataanslutningsdefinitioner.
Regler för dataanslutning
Det finns för närvarande två typer av dataanslutningsregler som kan användas för att definiera din CCP-dataanslutning.
RestApiPoller
kind låter dig anpassa växling, auktorisering och förväntade nyttolaster för begäran/svar för din datakälla. Mer information finns i Referens för anslutningsregler för RestApiPoller-dataanslutning.GCP
du kan minska din utvecklingstid genom att automatiskt konfigurera växling och förväntade svarsnyttolaster för din Datakälla för Google Cloud Platform (GCP). Mer information finns i referensen för anslutningsregler för GCP-dataanslutning
Använd ett API-testverktyg för att anropa API:et för dataanslutning för att skapa den dataanslutning som kombinerar anslutningsreglerna och tidigare komponenter. Kontrollera att anslutningsappen nu är ansluten i användargränssnittet.
Skydda konfidentiella indata
Oavsett vilken autentisering som används av din CCP-dataanslutning, vidta dessa åtgärder för att säkerställa att konfidentiell information hålls säker. Målet är att överföra autentiseringsuppgifter från ARM-mallen till den centrala motparten utan att lämna läsbara konfidentiella objekt i distributionshistoriken.
Skapa etikett
Definitionen för dataanslutningsappen skapar ett gränssnittselement för att fråga efter säkerhetsautentiseringsuppgifter. Om dataanslutningsappen till exempel autentiserar till en loggkälla med OAuth innehåller definitionsavsnittet för dataanslutningsappen OAuthForm
typen i anvisningarna. Detta konfigurerar ARM-mallen för att fråga efter autentiseringsuppgifterna.
"instructions": [
{
"type": "OAuthForm",
"parameters": {
"UsernameLabel": "Username",
"PasswordLabel": "Password",
"connectButtonLabel": "Connect",
"disconnectButtonLabel": "Disconnect"
}
}
],
Lagra konfidentiella indata
Ett avsnitt i ARM-distributionsmallen innehåller en plats där administratören distribuerar dataanslutningen för att ange lösenordet. Använd securestring
för att skydda konfidentiell information i ett objekt som inte kan läsas efter distributionen. Mer information finns i Säkerhetsrekommendationer för parametrar.
"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
}
}
Använda securestring-objekten
Slutligen använder CCP autentiseringsobjekten i avsnittet dataanslutning.
"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"
}
},
Kommentar
Den konstiga syntaxen för autentiseringsobjektet "ClientSecret": "[[parameters('Password')]",
är inte ett skrivfel!
För att kunna skapa distributionsmallen som också använder parametrar måste du undvika parametrarna i det avsnittet med en extra start[
. På så sätt kan parametrarna tilldela ett värde baserat på användarinteraktionen med anslutningsappen.
Mer information finns i Escape-tecken för malluttryck.
Skapa distributionsmallen
Paketera en ARM-mall (Azure Resource Management) manuellt med hjälp av exempelmallens kodexempel som din guide. Dessa kodexempel delas upp av ARM-mallavsnitt som du måste skarva ihop.
Om du skapar en ccp-dataanslutning för Google Cloud Platform (GCP) paketera du distributionsmallen med hjälp av exempelmallen GCP CCP. Information om hur du fyller i GCP CCP-mallen finns i referensen för anslutningsregler för GCP-dataanslutning.
Utöver exempelmallarna använder publicerade lösningar som är tillgängliga i Microsoft Sentinel-innehållshubben ccp för sina dataanslutningar. Granska följande lösningar som fler exempel på hur du sammanfogar komponenterna i en ARM-mall.
RestApiPoller
Exempel på CCP-dataanslutning
- Ermes Webbläsarsäkerhet
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Arbetsdag
- Atlassian Jira
- Okta enkel inloggning
GCP
Exempel på CCP-dataanslutning
Distribuera anslutningsappen
Distribuera din kodlösa anslutningsapp som en anpassad mall.
Dricks
Ta bort resurser som du skapade i föregående steg. DCR och den anpassade tabellen skapas med distributionen. Om du inte tar bort dessa resurser innan du distribuerar är det svårare att verifiera mallen.
- Kopiera innehållet i ARM-distributionsmallen.
- Följ anvisningarna för att redigera och distribuera mallen från artikeln Snabbstart: Skapa och distribuera ARM-mallar med hjälp av Azure Portal.
Underhålla nätverksisolering för loggningskälla
Om loggningskällan kräver nätverksisolering konfigurerar du en lista över offentliga IP-adresser som används av den centrala motparten.
Virtuella Azure-nätverk använder tjänsttaggar för att definiera nätverksåtkomstkontroller. För CCP är den tjänsttaggen Scuba.
Information om hur du hittar det aktuella IP-intervallet som är associerat med taggen Scuba-tjänsten finns i Använda API:et för identifiering av tjänsttagg.
Verifiera den kodlösa anslutningsappen
Visa din kodlösa anslutningsapp i dataanslutningsgalleriet. Öppna dataanslutningsappen och slutför alla autentiseringsparametrar som krävs för att ansluta. När du har anslutit skapas DCR och anpassade tabeller. Visa DCR-resursen i resursgruppen och eventuella anpassade tabeller från logs analytics-arbetsytan.
Kommentar
Det kan ta upp till 30 minuter innan data börjar matas in.
Exempel
Varje steg i att skapa den kodlösa anslutningsappen visas i följande exempelavsnitt.
- Exempeldata
- Exempel på anpassad tabell
- Exempel på datainsamlingsregel
- Exempel på användargränssnittsdefinition för dataanslutning
- Exempel på regler för dataanslutning
- Använda exempeldata med exempelmall
För att demonstrera en komplex datakälla med inmatning till mer än en tabell har det här exemplet ett utdatatabellschema och en DCR med flera utdataströmmar. DCR-exemplet sätter ihop dessa tillsammans med dess KQL-transformeringar. Exempel på dataanslutningsgränssnittsdefinitioner och anslutningsregler fortsätter från samma exempeldatakälla. Slutligen använder lösningsmallen alla dessa exempelkomponenter för att visa hur du skapar exempel på CCP-dataanslutning.
Exempeldata
En datakälla returnerar följande JSON vid anslutning till dess slutpunkt.
[
{
"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"
}
]
Det här svaret innehåller aviseringar eventType
och filer. Filhändelserna ska matas in i den normaliserade standardtabellen, AsimFileEventLogs, medan aviseringshändelserna ska matas in i en anpassad tabell.
Exempel på anpassad tabell
Mer information om tabellens struktur finns i Tabell-API. Namn på anpassade loggtabeller bör ha ett _CL
suffix.
{
"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"
}
]
}
}
}
Exempel på datainsamlingsregel
Följande DCR definierar en enda ström Custom-ExampleConnectorInput
med hjälp av exempeldatakällan och omvandlar utdata till två tabeller.
- Det första dataflödet dirigerar
eventType
= Avisering till den anpassadeExampleConnectorAlerts_CL
tabellen. - det andra dataflödet dirigerar
eventType
= Filen till den normaliserade standardtabellen.ASimFileEventLogs
Mer information om strukturen i det här exemplet finns i Struktur för en datainsamlingsregel.
Om du vill skapa den här domänkontrollanten i en testmiljö följer du API:et datainsamlingsregler. Element i exemplet i {{double curly braces}}
anger variabler som kräver värden för enkel användning med ett API-testverktyg. När du skapar den här resursen i ARM-mallen byts variablerna som uttrycks här mot parametrar.
{
"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"
}
]
}
}
Exempel på användargränssnittsdefinition för dataanslutning
Det här exemplet finns i referensen för dataanslutningsdefinitioner.
Exempel på anslutningsregler för dataanslutning
Det här exemplet finns i referensen för dataanslutningsappar.
Exempel på ARM-mall
Skapa ARM-distributionsmallen med följande struktur, som innehåller de 4 avsnitt av JSON-komponenter som krävs för att skapa CCP-dataanslutningen:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
}
Sammanfoga avsnitten med en JSON-medveten redigerare som Visual Code för att minimera syntaxfel som kommatecken och avslutande hakparenteser och parenteser.
För att vägleda mallens byggprocess visas kommentarer i metadata description
eller infogade med //
kommentarskommentation. Mer information finns i metodtips för ARM-mallar – kommentarer.
Överväg att använda testverktyget för ARM-mallar (arm-ttk) för att verifiera mallen som du skapar. Mer information finns i arm-ttk.
Exempel på ARM-mall – parametrar
Mer information finns i Parametrar i ARM-mallar.
Varning
Använd securestring
för alla lösenord och hemligheter i objekt som kan läsas efter resursdistributionen.
Mer information finns i Skydda konfidentiella indata och säkerhetsrekommendationer för parametrar.
{
"$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
}
Exempel på ARM-mall – variabler
Dessa rekommenderade variabler förenklar mallen. Använd mer eller mindre efter behov. Mer information finns i Variabler i ARM-mallar.
"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
Exempel på ARM-mall – resurser
Det finns 5 ARM-distributionsresurser i den här mallguiden som rymmer byggkomponenterna för 4 CCP-dataanslutningsappar.
- contentTemplates (en överordnad resurs)
- metadata
- dataCollectionRules – Mer information finns i Datainsamlingsregel.
- tabeller – Mer information finns i Utdatatabelldefinition.
- dataConnectorDefinitions – Mer information finns i Användargränssnitt för dataanslutning.
- metadata
- contentTemplates
- metadata
- RestApiPoller – Mer information finns i Regler för dataanslutning.
- 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!
]
}
Relaterat innehåll
Mer information finns i