Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Codeless Connector Framework (CCF) ger partner, avancerade användare och utvecklare möjlighet att skapa anpassade anslutningsappar för att mata in data till Microsoft Sentinel.
Anslutningsappar som skapas med ccf ä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 ccf-anslutningsappen och ansluta datakällan till Microsoft Sentinel
- Skapa dataanslutningsappen
- Skapa ARM-mallen
- Distribuera anslutningsappen
- Anslut Microsoft Sentinel till datakällan 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.
Om du är en programutvecklingspartner och behöver support för att skapa en CCF-dataanslutning kontaktar du Microsoft Sentinel Partners på AzureSentinelPartner@microsoft.com för att få hjälp.
Hur skiljer sig denna CCF från den tidigare versionen?
Den första versionen av CCF 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 CCF 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 för 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örhandskrav
Innan du skapar en anslutningsapp bör du förstå din datakälla och hur Microsoft Sentinel behöver ansluta.
Slutpunkt för datainsamling (DCE)
En DCE är ett krav för en DCR. Endast en DCE skapas per DCR-distribution för Log Analytics-arbetsytan. Varje domänkontrollant 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 referensen för Data Connector-API:et:
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 till 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
- Curl
Försiktighet
I scenarier där du har känsliga data, till exempel autentiseringsuppgifter, hemligheter, åtkomsttoken, API-nycklar och annan liknande information, ser du till att 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
Tips
Om du är oberoende programvaruleverantör (ISV) och behöver support när du skapar en Microsoft Sentinel-integrering med hjälp av Microsoft Sentinel Codeless Connector Framework kan Microsoft App Assure-teamet kanske hjälpa till. Om du vill engagera App Assure-teamet skickar du ett e-postmeddelande till azuresentinelpartner@microsoft.com.
Det krävs fyra komponenter för att skapa CCF-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
Tips
Hoppa över det här steget om dina data bara matas in i log analytics-standardtabeller. 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 till 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 tabell-API: et eller någon 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 till mer än en tabell finns i exempeldata och den anpassade exempeltabell som skapats för dessa data.
Datainsamlingsregel
Datainsamlingsregler (DCR) definierar datainsamlingsprocessen i Azure Monitor. DCR anger vilka data som ska samlas in, hur dessa data ska transformeras 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 CCF-dataanslutningen distribueras skapas DCR om den inte redan finns.
Referera till den senaste informationen om DCR:er 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 Övervaka loggar med logs ingestion 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 avsnittet DCR-exempel.
Användargränssnitt för dataanslutning
Den här komponenten renderar användargränssnittet för dataanslutningen i galleriet Microsoft Sentinel dataanslutning. Varje dataanslutning kan bara ha en UI-definition.
Skapa användargränssnittet för dataanslutningsappen med DEFINITION-API:et för dataanslutningsappen. Använd referensen för definitioner för dataanslutningsappen som ett tillägg för att förklara API-elementen mer detaljerat.
Kommentarer:
- Egenskapen
kindför API-avsökningsanslutningsappen ska alltid varaCustomizable. - Eftersom det här är en typ av API-avsökningsanslutningsapp anger du
connectivityCriteriatypen tillhasDataConnectors -
instructionStepsExemplet innehåller en knapp av typenConnectionToggleButton. Den här knappen hjälper till att 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 definitioner för dataanslutningsappar.
Regler för dataanslutning
Det finns för närvarande tre typer av dataanslutningsregler som kan användas för att definiera ccf-dataanslutningen.
-
RestApiPollermed kind kan du anpassa sidindelning, 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. -
GCPkan du minska din utvecklingstid genom att automatiskt konfigurera sidindelning och förväntade svarsnyttolaster för din GCP-datakälla (Google Cloud Platform). Mer information finns i referens för anslutningsregel för GCP-dataanslutning -
StorageAccountBlobContainergör att du kan mata in från en Azure Storage Blob-datakälla. Mer information finns i API-referensen för Azure Storage Blob Connectors.
Använd ett API-testverktyg för att anropa API:et för dataanslutning för att skapa dataanslutningen 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 ccf-dataanslutningen bör du 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 CCF 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 din dataanslutning 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 dataanslutningsappen 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 CCF autentiseringsobjekten i avsnittet för dataanslutningsappen.
"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"
}
},
Obs!
Den märkliga syntaxen för autentiseringsuppgiftsobjektet "ClientSecret": "[[parameters('Password')]", är inte ett skrivfel!
För att kunna skapa distributionsmallen som även 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 manuellt en arm-mall (Azure Resource Management) med hjälp av exempelmallens kodexempel som vägledning. Dessa kodexempel delas upp av ARM-mallavsnitt som du måste skarva ihop.
Om du skapar en CCF-dataanslutning för Google Cloud Platform (GCP) paketera du distributionsmallen med GCP CCF-exempelmallen. Information om hur du fyller i GCP CCF-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 CCF för sina dataanslutningar. Granska följande lösningar som fler exempel på hur du sammanfogar komponenterna i en ARM-mall.
RestApiPoller Exempel på CCF-dataanslutningsprogram
- Säkerhet för Ermes-webbläsare
- Palo Alto Prisma Cloud CWPP
- Sophos Endpoint Protection
- Arbetsdag
- Atlassian Jira
- Okta enkel inloggning
GCP Exempel på CCF-dataanslutningsprogram
Distribuera anslutningsappen
Distribuera din kodlösa anslutningsapp som en anpassad mall.
Tips
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 i 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 tillåtna offentliga IP-adresser som används av CCF.
Azure virtuella nätverk använder tjänsttaggar för att definiera nätverksåtkomstkontroller. För CCF är den tjänsttaggen Scuba.
Information om hur du hittar det aktuella IP-intervallet som är associerat med scuba-tjänsttaggen finns i Använda API:et för identifiering av tjänsttaggar.
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.
Obs!
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å UI-definition för dataanslutningsapp
- 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, innehåller det här exemplet ett utdatatabellschema och en DCR med flera utdataströmmar. DCR-exemplet sätter ihop dessa tillsammans med dess KQL-transformeringar. Exemplen på definitioner av användargränssnitt och anslutningsregler för dataanslutningar fortsätter från samma exempeldatakälla. Slutligen använder lösningsmallen alla dessa exempelkomponenter för att visa hur du skapar exempel på CCF-dataanslutningen.
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 eventTypeaviseringar 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 strukturen i den här tabellen finns i Tabell-API. Namn på anpassade loggtabeller ska 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_CLtabellen. - 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 för 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 de variabler 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å UI-definition för dataanslutningsapp
Det här exemplet finns i referensen för definitioner för dataanslutningsappen.
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 CCF-dataanslutningen:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
}
Sy ihop 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 mallskapandeprocessen visas kommentarer i metadatadescription eller infogade med // kommentarsnotation. Mer information finns i Metodtips för ARM-mall – 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
De här rekommenderade variablerna 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 där 4 CCF-komponenter för dataanslutningsappen skapas.
-
contentTemplates (en överordnad resurs)
- Metadata
- dataCollectionRules – Mer information finns i Datainsamlingsregel.
- tables – Mer information finns i Definition av utdatatabell.
- 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