Share via


Skapa en kodlös anslutningsapp för Microsoft Sentinel (offentlig förhandsversion)

Codeless Anslut or Platform (CCP) ger partner, avancerade användare och utvecklare möjlighet att skapa anpassade anslutningsappar för inmatning av data till Microsoft Sentinel.

Anslut orer 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.

Viktigt!

Codeless Anslut or Platform (CCP) är för närvarande i förhandsversion. Tilläggsvillkoren för Azure Preview innehåller ytterligare juridiska villkor som gäller för Azure-funktioner som är i betaversion, förhandsversion eller på annat sätt ännu inte har släppts i allmän tillgänglighet.

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
  • Anslut 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:

  1. Bättre stöd för olika typer av autentisering och sidnumrering.

  2. Stöder standardregler för datainsamling (DCR).

  3. 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.

  1. 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.

  2. 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 Anslut eller API:

  1. HTTP-begäran och svarsstruktur till datakällan

  2. 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.

  3. Sidnumreringsalternativ för datakällan

Vi rekommenderar också ett verktyg som Postman för att verifiera dataanslutningskomponenterna. Mer information finns i Använda Postman med Microsoft Graph API.

Skapa dataanslutningsappen

Det krävs 4 komponenter för att skapa CCP-dataanslutningen.

  1. Definition av utdatatabell
  2. Datainsamlingsregel (DCR)
  3. Användargränssnitt för dataanslutning
  4. 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 DCE, inklusive att använda exempeldata för att skapa den anpassade tabellen och DCR, finns i Självstudie: Skicka data till Azure Monitor-loggar med API för inmatning av loggar (Azure-portalen). 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 data Anslut eller definition. Använd referensen för dataanslutningsdefinitioner som ett tillägg för att förklara API-elementen i detalj.

Anteckningar:

  1. Egenskapen kind för API-avsökningsanslutningsappen ska alltid vara Customizable.
  2. Eftersom det här är en typ av API-avsökningsanslutningsapp anger du connectivityCriteria typen till hasDataConnectors
  3. instructionsSteps Exemplet innehåller en knapp av typen ConnectionToggleButton. Med den här knappen kan du utlösa distributionen av regler för dataanslutning baserat på de angivna anslutningsparametrarna.

Använd Postman 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

Den här delen definierar anslutningsreglerna, inklusive:

  • Polling
  • autentisering
  • Personsökning

Mer information om hur du skapar det här avsnittet finns i referensen för anslutningsregler för dataanslutning.

Mer information om ett exempel finns i referensexemplet för anslutningsregler för dataanslutning.

Använd Postman 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 exempelmallen som guide.

Utöver exempelmallen använder publicerade lösningar som är tillgängliga i Microsoft Sentinel-innehållshubben ccp för deras dataanslutning. Granska följande lösningar som fler exempel på hur du sammanfogar komponenterna i en ARM-mall.

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.

  1. Kopiera innehållet i ARM-distributionsmallen.
  2. Följ anvisningarna för att redigera och distribuera mallen i artikeln Snabbstart: Skapa och distribuera ARM-mallar med hjälp av Azure-portalen.

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.

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.

  1. Det första dataflödet dirigerar eventType = Avisering till den anpassade ExampleConnectorAlerts_CL tabellen.
  2. 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 med enkel användning för Postman. 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 metadatadescription 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.

  1. contentTemplates (en överordnad resurs)
  2. data Anslut orDefinitions – Mer information finns i Användargränssnitt för dataanslutning.
  3. metadata
  4. contentTemplates
  5. contentPackages
    "resources": [
        // resource section 1 - contentTemplates
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
            "apiVersion": "2023-04-01-preview",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnectorDefinition'))]",
            "location": "[parameters('workspace-location')]",
            "dependsOn": [
                "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
            ],
            "properties": {
                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                "displayName": "[concat(variables('_solutionName'), variables('dataConnectorTemplateNameConnectorDefinition'))]",
                "contentKind": "DataConnector",
                "mainTemplate": {
                    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
                    "contentVersion": "[variables('dataConnectorVersionConnectorDefinition')]",
                    "parameters": {},
                    "variables": {},
                    "resources": [
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition')))]",
                            "apiVersion": "2022-01-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
                            "properties": {
                                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]",
                                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                                "kind": "DataConnector",
                                "version": "[variables('dataConnectorVersionConnectorDefinition')]",
                                "source": {
                                    "sourceId": "[variables('_solutionId')]",
                                    "name": "[variables('_solutionName')]",
                                    "kind": "Solution"
                                },
                                "author": {
                                    "name": "[variables('_solutionAuthor')]"
                                },
                                "support": {
                                    "name": "[variables('_solutionAuthor')]",
                                    "tier": "[variables('_solutionTier')]"
                                },
                                "dependencies": {
                                    "criteria": [
                                        {
                                            "version": "[variables('dataConnectorVersionConnections')]",
                                            "contentId": "[variables('_dataConnectorContentIdConnections')]",
                                            "kind": "ResourcesDataConnector"
                                        }
                                    ]
                                }
                            }
                        },
                        {
                            "name": "MyDCRV1", // Enter your DCR name
                            "apiVersion": "2021-09-01-preview",
                            "type": "Microsoft.Insights/dataCollectionRules",
                            "location": "[parameters('workspace-location')]",
                            "kind": null,
                            "properties": 
							{ 
                                // Enter your DCR properties here.
                                //  Consider using these variables:
                                //  "dataCollectionEndpointId": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]",
                                //  "workspaceResourceId": "[variables('workspaceResourceId')]",
							}
                        },
                        {
                            "name": "[variables('_logAnalyticsTableId1')]",
                            "apiVersion": "2022-10-01",
                            "type": "Microsoft.OperationalInsights/workspaces/tables",
                            "location": "[parameters('workspace-location')]",
                            "kind": null,
                            "properties": 
							{
								// Enter your log analytics table schema here. 
                                //  Consider using this variable for the name property:
                                //  "name": "[variables('_logAnalyticsTableId1')]",
							}			
                        }
						// Enter more tables if needed.
                    ]
                },
                "packageKind": "Solution",
                "packageVersion": "[variables('_solutionVersion')]",
                "packageName": "[variables('_solutionName')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnectorDefinition'))))]",
                "packageId": "[variables('_solutionId')]",
                "contentSchemaVersion": "3.0.0",
                "version": "[variables('_solutionVersion')]"
            }
        },
        // resource 2 section here
        // resource section 2 - dataConnectorDefinitions
        {
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition'))]",
            "apiVersion": "2022-09-01-preview",
            "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions",
            "location": "[parameters('workspace-location')]",
            "kind": "Customizable",
            "properties": 
			{
				//Enter your data connector definition properties here
				//"connectorUiConfig": {
				//	"graphQueriesTableName": "[variables('_logAnalyticsTableId1')]",
                //}, 
			}
        },
        // resource 3 section here
        // resource section 3 - metadata
        {
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition')))]",
            "apiVersion": "2022-01-01-preview",
            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
            "properties": {
                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]",
                "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]",
                "kind": "DataConnector",
                "version": "[variables('dataConnectorVersionConnectorDefinition')]",
                "source": {
                    "sourceId": "[variables('_solutionId')]",
                    "name": "[variables('_solutionName')]",
                    "kind": "Solution"
                },
                "author": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "support": {
                    "name": "[variables('_solutionAuthor')]",
                    "tier": "[variables('_solutionTier')]"
                },
                "dependencies": {
                    "criteria": [
                        {
                            "version": "[variables('dataConnectorVersionConnections')]",
                            "contentId": "[variables('_dataConnectorContentIdConnections')]",
                            "kind": "ResourcesDataConnector"
                        }
                    ]
                }
            }
        },
        // resource 4 section here
        // resource section 4 - contentTemplates
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates",
            "apiVersion": "2023-04-01-preview",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]",
            "location": "[parameters('workspace-location')]",
            "dependsOn": [
                "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]"
            ],
            "properties": {
                "contentId": "[variables('_dataConnectorContentIdConnections')]",
                "displayName": "[concat(variables('_solutionName'), variables('dataConnectorTemplateNameConnections'))]",
                "contentKind": "ResourcesDataConnector",
                "mainTemplate": {
                    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
                    "contentVersion": "[variables('dataConnectorVersionConnections')]",
                    "parameters":
                    // These parameters are used by the data connector primarily as properties for the administrator to enter in the UI when configuring the connector
					{
                        "connectorDefinitionName": {
                            "defaultValue": "connectorDefinitionName",
                            "type": "string",
                            "minLength": 1
                        },
                        "workspace": {
                            "defaultValue": "[parameters('workspace')]",
                            "type": "string"
                        },
                        "dcrConfig": {
                            "defaultValue": {
                                "dataCollectionEndpoint": "data collection Endpoint",
                                "dataCollectionRuleImmutableId": "data collection rule immutableId"
                            },
                            "type": "object"
                        }
						// Enter additional parameters, for example:
						//"domainname": {
                        //    "defaultValue": "domain name",
                        //    "type": "string",
                        //    "minLength": 1
                        //},
                        //"apikey": {
                        //    "defaultValue": "",
                        //    "type": "securestring",
                        //    "minLength": 1
                        //}
                    },
                    "variables": {
                        "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]"
                    },
                    "resources": [
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnections')))]",
                            "apiVersion": "2022-01-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/metadata",
                            "properties": {
                                "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]",
                                "contentId": "[variables('_dataConnectorContentIdConnections')]",
                                "kind": "ResourcesDataConnector",
                                "version": "[variables('dataConnectorVersionConnections')]",
                                "source": {
                                    "sourceId": "[variables('_solutionId')]",
                                    "name": "[variables('_solutionName')]",
                                    "kind": "Solution"
                                },
                                "author": {
                                    "name": "[variables('_solutionAuthor')]"
                                },
                                "support": {
                                    "name": "[variables('_solutionAuthor')]",
                                    "tier": "[variables('_solutionTier')]"
                                }
                            }
                        },
                        {
                            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', 'MyDataConnector')]", // Replace the last part of the name with your data connector name
                            //  To create several connections using this template, make the name dynamic. For example, use the 'concat' function to add the connector name with a GUID using the 'guid' function.
                            "apiVersion": "2022-12-01-preview",
                            "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors",
                            "location": "[parameters('workspace-location')]",
                            "kind": "RestApiPoller",
                            "properties": 
							{
								// Enter your data connector properties here. If you want to use UI parameters remember to escape the parameter like this: "[[parameters('paramName')]"
								//  Use parameters as needed. For example:	
                                // "dataType": "My product security event API",
                                // "response": {
                                //   "eventsJsonPaths": [
                                //        "$"
                                //    ],
                                //    "format": "json"
                                // },
                                // "paging": {
                                //    "pagingType": "LinkHeader"
                                // },
                                // "connectorDefinitionName": "[[parameters('connectorDefinitionName')]",
                                // "auth": {
                                //   "apiKeyName": "Authorization",
                                //    "ApiKey": "[[parameters('apikey')]",
                                //    "apiKeyIdentifier": "SSWS",
                                //    "type": "APIKey"
                                //} ,
                                // "request": {
                                //   "apiEndpoint": "[[concat('https://',parameters('domainname'),'/api/v1/logs')]",
                                //    "rateLimitQPS": 10,
                                //   "queryWindowInMin": 5,
                                //   "httpMethod": "GET",
                                //    "retryCount": 3,
                                //    "timeoutInSeconds": 60,
                                //    "headers": {
                                //        "Accept": "application/json",
                                //        "User-Agent": "My-Data-Source"
                                //    },
                                //    "startTimeAttributeName": "since",
								//    "endTimeAttributeName": "until"		     
                                // },
                                // "dcrConfig": {
                                //    "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]",
                                //    "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]",
                                //    "streamName": "Custom-ExampleConnectorAlerts_CL" //This input stream should be the same as the inputStream property configured for the DataCollectionRule 
                                // },
                                // "isActive": true
                            }
                        }
                    ]
                },
                "packageKind": "Solution",
                "packageVersion": "[variables('_solutionVersion')]",
                "packageName": "[variables('_solutionName')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]",
                "packageId": "[variables('_solutionId')]",
                "contentSchemaVersion": "3.0.0",
                "version": "[variables('_solutionVersion')]"
            }
        },
        // resource 5 section here
        // resource section 5 - contentPackages
        {
            "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages",
            "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('_solutionId'))]",
            "location": "[parameters('workspace-location')]",
            "apiVersion": "2023-04-01-preview",
            "properties": {
                "version": "[variables('_solutionVersion')]",
                "kind": "Solution",
                "contentSchemaVersion": "3.0.0",
                "contentId": "[variables('_solutionId')]",
                "source": {
                    "kind": "Solution",
                    "name": "[variables('_solutionName')]",
                    "sourceId": "[variables('_solutionId')]"
                },
                "author": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "support": {
                    "name": "[variables('_solutionAuthor')]"
                },
                "dependencies": {
                    "operator": "AND",
                    "criteria": [
                        {
                            "kind": "DataConnector",
                            "contentId": "[variables('dataConnectorVersionConnectorDefinition')]",
                            "version": "[variables('_dataConnectorContentIdConnectorDefinition')]"
                        }
                    ]
                },
                "firstPublishDate": "2023-12-05",
                "providers": [
                    "[variables('_solutionAuthor')]"
                ],
                "contentKind": "Solution",
                "packageId": "[variables('_solutionId')]",
                "contentProductId": "[concat(substring(variables('_solutionId'), 0, 50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]",
                "displayName": "[variables('_solutionName')]",
                "publisherDisplayName": "[variables('_solutionId')]",
                "descriptionHtml": "test",
                "icon": "[variables('_packageIcon')]"
            }
        }
        // that's the end!
    ]
}

Nästa steg

Mer information finns i